- Python簡介
- Python安裝
- 第一個Python程序
- 編程語言的分類
Python簡介
一、Python的由來php
python的創始人爲吉多·範羅蘇姆(Guido van Rossum)。1989年的聖誕節期間,吉多·範羅蘇姆爲了在阿姆斯特丹打發時間,決心開發一個新的腳本解釋程序,做爲ABC語言的一種繼承。java
Python社區的人賦予他「仁慈大君」 的稱號,這一稱號直接來自英國肥皂劇《Monty Python飛行馬戲團》。Guido當初之因此選中Python做爲語言的名字,是由於他太喜歡這部肥皂劇了。python
二、Python的現狀linux
#編程語言的排名:http://www.tiobe.com/tiobe_index程序員
三、Python的特色web
引用一段《python基礎教程》開場白:shell
編寫C程序就像一羣人拿着剃刀在剛打過蠟的舞場內跳快舞 ------Walidi Ravens數據庫
C++:難學更難用,設計如此 ------匿名編程
在不少方面,Java就是C++ ------Michael Feldmanswift
如今請看一種史無前例的表演...... ------Monty Python的表演《飛行的馬戲團》
任何編程語言都有缺點,Python也不例外:
四、Python主要應用領域
其實就是在問:Python能作什麼?
相對於其餘語言來講Python擁有:很是完善的基礎代碼庫,覆蓋了網絡、文件、GUI、數據庫、文本等大量內容等。許多功能沒必要從零編寫,直接使用現成的便可。固然咱們也能夠寫一些完善的程序插件供其餘人使用!
Web程序
Python常常被用於Web開發。好比,經過mod_wsgi模塊,Apache能夠運行用Python編寫的Web程序。使用Python語言編寫的Gunicorn做爲Web服務器,也可以運行Python語言編寫的Web程序。Python定義了WSGI(Web Server Gateway Interface)標準應用接口來協調Http服務器與基於Python的Web程序之間的溝通。一些Web框架,如Django、Pyramid、TurboGears、Tornado、web2py、Zope、Flask等,可讓程序員輕鬆地開發和管理複雜的Web程序。
Python對於各類網絡協議的支持很完善,所以常常被用於編寫服務器軟件、網絡蠕蟲。第三方庫Twisted支持異步在線編寫程序和多數標準的網絡協議(包含客戶端和服務器),而且提供了多種工具,被普遍用於編寫高性能的服務器軟件。另有gevent這個流行的第三方庫,一樣可以支持高性能高併發的網絡開發。
GUI開發
Python自己包含的Tkinter庫可以支持簡單的GUI(Graphical User Interface)開發。可是愈來愈多的Python程序員選擇wxPython或者PyQt等GUI包來開發跨平臺的桌面軟件。使用它們開發的桌面軟件運行速度快,與用戶的桌面環境相契合。經過PyInstaller還能將程序發佈爲獨立的安裝程序包。
操做系統
在不少操做系統裏,Python是標準的系統組件。大多數Linux發佈版以及NetBSD、OpenBSD和Mac OS X都集成了Python,能夠在終端機下直接運行Python。有一些Linux發佈版的安裝器使用Python語言編寫,好比Ubuntu的Ubiquity安裝器、Red Hat Linux和Fedora的Anaconda安裝器。Gentoo Linux使用Python來編寫它的Portage包管理系統。Python標準庫包含了多個調用做業系統功能的庫。經過pywin32這個第三方軟件包,Python可以訪問Windows的COM服務及其它Windows API。使用IronPython,Python程序可以直接調用.Net Framework。
其餘
NumPy、SciPy、Matplotlib可讓Python程序員編寫科學計算程序。有些公司會使用Scons代替make構建C++程序。
不少遊戲使用C++編寫圖形顯示等高性能模塊,而使用Python或者Lua編寫遊戲的邏輯、服務器。相較於Python,Lua的功能更簡單、體積更小;而Python則支持更多的特性和數據類型。不少遊戲,如EVE Online使用Python來處理遊戲中繁多的邏輯。
YouTube、Google、Yahoo!、NASA都在內部大量地使用Python。OLPC的做業系統Sugar項目的大多數軟件都是使用Python編寫
因此他的應用範圍大概分爲:
- 數據分析
- 系統編程
- 組件集成
- 網絡服務
- 圖像處理
- 數值計算和科學計算
Python的安裝
開發必備環境
Windows
相對於以前的版原本說3.5在安裝的時候直接選擇:第一步add python to Path 選項就能夠了(以下圖)。
2.7安裝方法
1、下載安裝包 https://www.python.org/downloads/ 2、安裝 默認安裝路徑:C:\python27 3、配置環境變量 【右鍵計算機】--》【屬性】--》【高級系統設置】--》【高級】--》【環境變量】--》【在第二個內容框中找到 變量名爲Path 的一行,雙擊】 --> 【Python安裝目錄追加到變值值中,用 ; 分割】 如:原來的值;C:\python27,切記前面有分號
Linux
查看默認Python版本 python -V 1、安裝gcc,用於編譯Python源碼 yum install gcc 二、下載源碼包,https://www.python.org/ftp/python/ 3、解壓並進入源碼文件 4、編譯安裝 ./configure make all make install 5、查看版本 /usr/local/bin/python2.7 -V 6、修改默認Python版本 mv /usr/bin/python /usr/bin/python2.6 ln -s /usr/local/bin/python2.7 /usr/bin/python 7、防止yum執行異常,修改yum使用的Python版本 vi /usr/bin/yum 將頭部 #!/usr/bin/python 修改成 #!/usr/bin/python2.6
第一個Python程序
一、在什麼地方寫Python程序
- Python交互器
- Python文件中
- IDE(集成開發環境)
Python交互器
Windows:
一、屏幕左下角'視窗鍵'(左下角第一個圖標) 2、輸入cmd回車 三、在彈出的交互窗口中輸入'python'
Linux:
直接在窗口中輸入:python 便可
若是安裝多版本的輸入對應的版本號便可好比:python3.5
Python文件中
Windows:
推薦Notepad++ ,不要用Word和Windows自帶的記事本。Word保存的不是純文本文件,而記事本會自做聰明地在文件開始的地方加上幾個特殊字符(UTF-8 BOM),結果會致使程序運行出現莫名其妙的錯誤!
Linux:
使用自帶的VIM便可
第一個代碼:
#代碼文件名:hello.py 代碼內容以下: ''' print('Hello World') ''' #執行命令 ''' python hello.py Hello World '''
上面的代碼中執行Python代碼的時候,明確的指出 hello.py 腳本由 python 解釋器來執行。
若是想要相似於執行shell腳本同樣執行python腳本,例: ./hello.py
,那麼就須要在 hello.py 文件的頭部指定解釋器,以下:
#!/usr/bin/env python #The first code print "hello,world"
ps:
Linux中執行前需給予 hello.py 執行權限,chmod 755 hello.py
#!//usr/bin/env python #腳本用env啓動的緣由,是由於腳本解釋器在linux中可能被安裝於不一樣的目錄,env能夠在系統的PATH目錄中查找。同時,env還規定一些系統環境變量。env就是:envirnment 環境變量)
解釋器:
Python在執行時,解釋器會將.py文件中的源代碼編譯成Python的byte code(字節碼),而後再執行這些編譯好的byte code。
解釋器就是一個翻譯員,把我們寫的代碼翻譯成機器語言。
若是這裏不告訴解釋器用Python解釋的話在Linux中就會使用默認的解釋器Shell來解釋,可是Shell和Python說的不是一種語言,若是用shell去解釋Python的代碼就會報錯。
IDE(集成開發環境)
工欲善其事,必先利其器
使用合理的工具作事情能提高咱們工做的效率,一樣在寫Python代碼的時候,有一個很是好的工具就是Pycharm。
編程語言的分類
一、編譯型語言
需經過編譯器(compiler)將源代碼編譯成機器碼,以後才能執行的語言。通常需通過編譯(compile)、連接(linker)這兩個步驟。編譯是把源代碼編譯成機器碼,連接是把各個模塊的機器碼和依賴庫串連起來生成可執行文件。
優勢:編譯器通常會有預編譯的過程對代碼進行優化.由於編譯只作一次,運行時不須要編譯,因此編譯型語言的程序執行效率高,能夠脫離語言環境獨立運行。
缺點:編譯以後若是須要修改就須要整個模塊從新編譯。編譯的時候根據對應的運行環境生成機器碼,不一樣的操做系統之間移植就會有問題,須要根據運行的操做系統環境編譯不一樣的可執行文件.
表明語言:C、C++、Pascal、Object-C等
二、解釋型語言
解釋性語言的程序不須要編譯,相比編譯型語言省了道工序,解釋性語言在運行程序的時候才逐行翻譯.
優勢:有良好的平臺兼容性,在任何環境中均可以運行,前提是安裝瞭解釋器(虛擬機).靈活,修改代碼的時候直接修改就能夠,能夠快速部署,不用停機維護。
缺點:每次運行的時候都要解釋一遍,性能上不如編譯型語言。
表明語言:JavaScript、Python、Erlang、php、Perl、Ruby
三、混合型語言
既然編譯型和解釋型各有缺點就會有人想到把兩種類型整合起來,取其精華去其糟粕.就出現了半編譯型語言.
好比C#,C#在編譯的時候不是直接編譯成機器碼而是中間碼,.NET平臺提供了中間語言運行庫運行中間碼,中間語言運行庫相似於Java虛擬機。
表明有計:C#、java等
"""
Java語言是一種編譯型-解釋型語言,同時具有編譯特性和解釋特性
其實,確切的說java就是解釋型語言,其所謂的編譯過程只是將.java文件編程成平臺無關的字節碼.class文件,並非向C同樣編譯成可執行的機器語言,在此請讀者注意Java中所謂的「編譯」和傳統的「編譯」的區別)。做爲編譯型語言,JAVA程序要被統一編譯成字節碼文件——文件後綴是class。此種文件在java中又稱爲類文件。java類文件不能再計算機上直接執行,它須要被java虛擬機翻譯成本地的機器碼後才能執行,而java虛擬機的翻譯過程則是解釋性的。java字節碼文件首先被加載到計算機內存中,而後讀出一條指令,翻譯一條指令,執行一條指令,該過程被稱爲java語言的解釋執行,是由java虛擬機完成的。而在現實中,java開發工具JDK提供了兩個很重要的命令來完成上面的編譯和解釋(翻譯)過程。兩個命令分別是java.exe和javac.exe,前者加載java類文件,並逐步對字節碼文件進行編譯,而另外一個命令則對應了java語言的解釋(javac.exe)過程。在次序上,java語言是要先進行編譯的過程,接着解釋執行
"""
四、動態語言和靜態語言
動態語言:是一類在運行時能夠改變其結構的語言:例如新的函數、對象、甚至代碼能夠被引進,已有的函數能夠被刪除或是其餘結構上的變化。通俗點說就是在運行時代碼能夠根據某些條件改變自身結構。
主要動態語言:Object-C、C#、JavaScript、PHP、python、Erlang。
靜態語言:
與動態語言相對應的,運行時結構不可變的語言就是靜態語言。如Java、C、C++。
不少人認爲解釋型語言都是動態語言,這個觀點是錯的!Java是解釋型語言可是不是動態語言,Java不能在運行的時候改變本身結構。反之成立嗎?動態語言都是解釋型語言。也是錯的!Object-C是編譯型語言,可是他是動態語言。得益於特有的run time機制(準確說run time不是語法特性是運行時環境,這裏不展開)OC代碼是能夠在運行的時候插入、替換方法的。
五、動態類型語言和靜態類型語言
動態類型語言:
不少網上資料把動態類型語言和動態語言混爲一談,簡直是誤人子弟。動態類型語言和動態語言是徹底不一樣的兩個概念。
動態類型語言是指在運行期間纔去作數據類型檢查的語言,說的是數據類型,動態語言說的是運行是改變結構,說的是代碼結構。
動態類型語言的數據類型不是在編譯階段決定的,而是把類型綁定延後到了運行階段。
主要語言:Python、Ruby、Erlang、JavaScript、swift、PHP、Perl。
靜態類型語言:
靜態語言的數據類型是在編譯其間肯定的,寫編寫代碼的時候要明確肯定變量的數據類型。
主要語言:C、C++、C#、Java、Object-C。
至關一部分程序員,也包括曾經的我,認爲解釋型語言都是動態類型語言,編譯型語言都是靜態類型語言。這個也是錯的。swift是編譯型語言可是它也是動態類型語言。C#和Java是解釋型語言也是靜態類型語言。
六、強類型語言和弱類型語言
強類型語言:一旦一個變量被指定了某個數據類型,若是不通過強制類型轉換,那麼它就永遠是這個數據類型。你不能把一個整形變量當成一個字符串來處理。
主要語言:Java、C#、Python、Object-C、Ruby
弱類型語言:數據類型能夠被忽略,一個變量能夠賦不一樣數據類型的值。一旦給一個整型變量a賦一個字符串值,那麼a就變成字符類型。
JavaScript、PHP、C、C++(C和C++有爭議,可是確實能夠給一個字符變量賦整形值,可能初衷是強類型,形態上接近弱類型)
編程風格
1、語法要求
縮進統一:
同一級別的代碼必須一致!(而且建議全部級別的代碼的縮進建議是相同的--必須,開發規範裏建議4個空格)建議不要用table由於若是想把代碼在windows上運行,linux和windows的table的定義不一樣!!!!
好的編輯器能提升開發代碼的效率!使用Pycharm會幫助你加快代碼的編寫。
全部python,第一行必定要頂到行頭! 同一級別的新的都要頂到行頭。
2、變量
標識符的第一個字符必須是字母表中的字母(大寫或小寫)或者一個下劃線(‘ _ ’)
標識符名稱的其餘部分能夠由字母(大寫或小寫)、下劃線(‘ _ ’)或數字(0-9)組成。
有效 標識符名稱的例子有i、__my_name、name_23和a1b2_c3。
無效 標識符名稱的例子有2things、this is spaced out和my-name。
標識符名稱是對大小寫敏感的。例如,myname和myName不是一個標識符。注意前者中的小寫n和後者中的大寫N。
常量:數值不變的
變量:數值會變更的量
在python中沒有常量的,全部的數值均可以改變,可是他依然有個常量的概念,可是是人爲的你不去改變他,定義一個常量應該用大寫的形式。
AGE = 10 這個就是常量,他是大寫的!是約定俗成的。可是他是能夠改的!
name = 'Tim Luo' 這個是變量
##這裏須要注意下,設置變量的時候不能設置python自帶的內置方法好比type
如下關鍵字不能聲明爲變量名
1 ['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']
變量的起名的方式就是標識符名稱,經過標識符去調用內存中的數據。
咱們不須要指定編碼類型了,由於在Python3中默認編碼就是Unicode編碼
2、Python的執行過程
- 把代碼加載到內存中
- 詞法分析
- 語法分析
- 編譯生成字節碼
- 執行字節碼生成機器碼爲CPU可識別並執行
執行Python代碼時,若是導入了其餘的 .py 文件,那麼,執行過程當中會自動生成一個與其同名的 .pyc 文件,該文件就是Python解釋器編譯以後產生的字節碼。
ps:代碼通過編譯能夠產生字節碼;字節碼經過反編譯也能夠獲得代碼。(任何字節碼經過反編譯均可以獲得代碼)
3、Python變量
一、字符串
字符串特性,一旦修改,從新建立!
字符串的值是不能被修改的,他在內存裏是連續的,若是想改的話必須在後面預留因此不支持修改!
#!/usr/bin/env python #-*- coding:utf-8 -*- __author__ = 'luotianshuai' name = 'luotianshuai' print('The first variable==>:',id(name)) name = 'Tim' print('The second variable==>:',id(name))
結果:
The first variable==>: 4323819824
The second variable==>: 4323772208
在看字符串的下個例子:
name1 = 'luotianshuai' print(id(name1)) name2 = 'luotianshuai' print(id(name2))
結果:
4323819824 4323819824
上面不是說:字符串特性,一旦修改,從新建立!爲何他的內存地址是相同的呢?
這裏雖然他們的內存地址是相同的可是:他們的原理是各自在內存裏開闢了一塊內存空間,python給他進行了優化而已。有個池的概念(把你最經常使用的值作一個指向)!
二、列表、字典
看下面的例子:name1爲1個列表,讓name等於name1如今修改name1的值會影響name2嗎?
#!/usr/bin/env python #-*- coding:utf-8 -*- __author__ = 'luotianshuai' #給name1設置值爲列表 name1 = ['tianshuai',18,] #輸出name1的內存地址 print('Thes name1 memory address:',id(name1)) #給name2複製爲name1 name2 = name1 #輸出name2的內存地址 print('Thes name2 memory address:',id(name2)) #修改name1的值看下name2的值是否改變 name1[0] = 'shuaige' print(name1,'|',id(name1)) print(name2,'|',id(name2)) name2.append('dashuaige') print(name1,'|',id(name1)) print(name2,'|',id(name2))
結果:
''' Thes name1 memory address: 4314356360 Thes name2 memory address: 4314356360 ['shuaige', 18] | 4314356360 ['shuaige', 18] | 4314356360 ['shuaige', 18, 'dashuaige'] | 4314356360 ['shuaige', 18, 'dashuaige'] | 4314356360 '''
總結:集合中的元素不是連續的,當你修改、添加、刪除裏面的元素的時候內存地址是不變的!因此當咱們刪除添加name1裏的元素的時候name2也會跟着變。
4、獲取用戶輸入
Python 2有兩個全局函數,用來在命令行請求用戶輸入。第一個叫作input(),它等待用戶輸入一個Python表達式(而後返回結果)。第二個叫作raw_input()用戶輸入什麼它就返回什麼。這讓初學者很是困惑,而且這被普遍地看做是Python語言的一個「肉贅」(wart)。Python 3經過重命名raw_input()爲input(),從而切掉了這個肉贅,因此如今的input()就像每一個人最初期待的那樣工做。
一、獲取用戶輸入的內容
#!/usr/bin/env python #-*- coding:utf-8 -*- __author__ = 'luotianshuai' name = input('Please input you name:') print(name,'The value type',type(name))
而且這裏須要注意這個input獲取用戶輸入以後默認是字符串類型的以下:
Please input you name:123 123 The value type <class 'str'>
二、腳本傳入參數
咱們常常看到相似這樣的命令:/etc/init.d/httpd start httpd腳本是怎麼獲取這個start參數呢?【這個httpd是shell寫的主要這麼寫是方便回憶】Python中是怎麼實現的呢?
經過Python自帶的sys模塊以下:
#!/usr/bin/env python #-*- coding:utf-8 -*- __author__ = 'luotianshuai' import sys print(sys.argv) print(type(sys.argv))
結果:
LuoTimdeMacBook-Pro-2:Level_3_menu luotim$ python test.py 1 2 3 4 5 6 7 8 9 ['test.py', '1', '2', '3', '4', '5', '6', '7', '8', '9'] <type 'list'>
5、流程控制
一、if...else 和 if....elif...elif..........else
需求1、身份驗證
#!/usr/bin/env python #-*- coding:utf-8 -*- __author__ = 'luotianshuai' import getpass name = input('Please input your name:') pwd = input('Please input your pwd:') if name == 'tianshuai' and pwd == 'shuaige': print('hello Shuaige') else: print('You cant login system')
測試:
''' python3 test.py Please input your name:tianshuai Please input your pwd:shuaige hello Shuaige '''
需求2、根據用戶輸入內容輸出其權限
#!/usr/bin/env python #-*- coding:utf-8 -*- __author__ = 'luotianshuai'
''' alex 超級用戶 wusir 管理用戶 laoyao 普通用戶 ''' name = input('Please input you name:') if name == 'alex': print('超級用戶') elif name == 'wusir': print('管理用戶') elif name == 'laoyao': print('普通用戶') else: print('無效用戶')
測試
LuoTimdeMacBook-Pro-2:Level_3_menu luotim$ python3 test.py Please input you name:alex 超級用戶 LuoTimdeMacBook-Pro-2:Level_3_menu luotim$ python3 test.py Please input you name:wusir 管理用戶 LuoTimdeMacBook-Pro-2:Level_3_menu luotim$ python3 test.py Please input you name:laoyao 普通用戶 LuoTimdeMacBook-Pro-2:Level_3_menu luotim$ python3 test.py Please input you name:lskdjf 無效用戶
二、for i in range(100) and for i in xrange(1,100)
需求:有3次機會,若是3次中沒有猜中給予提示,3次都沒有猜中,鼓勵!
#!/usr/bin/env python #-*- coding:utf-8 -*- __author__ = 'luotianshuai' import random rand_num = random.randrange(10) for i in range(3): guess_num = int(input("請猜想數字(1~10):")) if guess_num == rand_num: print("太棒了你猜對了") break elif guess_num > rand_num: print("你猜想的有點大了,請嘗試小點的數字") else: print("你猜想的有點小了,請嘗試大點的數字") else: print("不要灰心,此次只是運氣很差,請下次嘗試") print("這個真正的數字是:%d" % rand_num)
測試結果1:
請猜想數字(1~10):5 你猜想的有點大了,請嘗試小點的數字 請猜想數字(1~10):3 你猜想的有點大了,請嘗試小點的數字 請猜想數字(1~10):1 太棒了你猜對了 這個真正的數字是:1
測試結果2:
請猜想數字(1~10):1 你猜想的有點小了,請嘗試大點的數字 請猜想數字(1~10):1 你猜想的有點小了,請嘗試大點的數字 請猜想數字(1~10):1 你猜想的有點小了,請嘗試大點的數字 不要灰心,此次只是運氣很差,請下次嘗試 這個真正的數字是:2
三、while循環
他的原理是:當條件爲真的時候運行,當條件爲假的時候中止!
#!/usr/bin/env python #-*- coding:utf-8 -*- __author__ = 'luotianshuai' import time count = 0 #指定循環爲True while True: #每次循環自加1 count += 1 #輸出結果 print(count) #休息兩秒 time.sleep(2) #這個循環就是死循環~ ############################### 看看這個例子在 count = 0 #指定循環爲True while count < 10: count += 1 print(count) ''' 每次循環加1,當count爲11的時候那麼這個條件:count < 10 就不成立了這個循環也就結束了! '''
while版本的猜數字遊戲
#!/usr/bin/env python #-*- coding:utf-8 -*- __author__ = 'luotianshuai' import random rand_num = random.randrange(10) count = 0 while count < 3: guess_num = int(input('請輸入您猜想的數字(1~10):')) if guess_num > 10: print('您輸入的數字超出範圍了:1~10') elif guess_num == rand_num: print('哇~,太棒了你猜對了~') break elif guess_num < rand_num: print('您猜的數字有點小了,請嘗試大點的數字') else: print("你猜的數字有點大了,請嘗試小點的數字") count += 1 else: print("不要灰心你,此次只是運氣很差,請下次嘗試") print("這個真正的數字是:%d" % rand_num)
四、continue 是跳出本次循環,break是跳出整個循環(當前的while or for循環)!
for i in range(3): count = 0 while True: count += 1 if count == 10: print('循環ID:%d' % count) continue if count == 11: print('11次循環退出:') break print('這是第%d次循環' % count) print(i)
上面的例子:
for循環中的while循環裏若是爲10的時候continue,那麼print('這是第%d次循環' % count)就沒法執行了,因此他中止了當前循環,當爲11的時候print('這是第%d次循環' % count)也沒法執行了而且跳出了整個大的while循環!
看下面的例子:
while True: print("我是第一層") while True: print("我是第二層") while True: print("我是第三層")
如今我要中止他怎麼辦?這麼寫?
while True: print("我是第一層") break while True: print("我是第二層") break while True: print("我是第三層") break
NO,這個是不行的,這時候就用到標誌位了!
需求:當count = 3 的時候全部循環依次退出
#!/usr/bin/env python #-*- coding:utf-8 -*- __author__ = 'luotianshuai' count = 0 while True: print('第一層') level_1_falg = False while True: print('第二層') level_2_flag = False while True: print('第三層') count += 1 if count <= 3: level_2_flag = True print('這是第三層:循環3次了我要跳到第二層') break #當第三層退出到第二層後而且標誌位被設置爲True後下面的條件出發而後把level_1_falg設置爲True if level_2_flag: level_1_falg = True print('這是第二層:第三層跳出了,我也要跳到第一層') break #當第二層退出到第一層後而且標誌位被設置爲True後,下面的條件激活退出! if level_1_falg: print('這是第一層,第二層和第三層都跳出了我也要跳出,整個程序結束') break
測試結果:
第一層
第二層
第三層
這是第三層:循環3次了我要跳到第二層
這是第二層:第三層跳出了,我也要跳到第一層
這是第一層,第二層和第三層都跳出了我也要跳出,整個程序結束
6、Python運算符
python算數運算符
操做符 | 描述符 | 例子 |
---|---|---|
+ | 加法 - 對操做符的兩側增長值 | a + b = 30 |
- | 減法 - 減去從左側操做數右側操做數 | a - b = -10 |
* | 乘法 - 相乘的運算符兩側的值 | a * b = 200 |
/ | 除 - 由右側操做數除以左側操做數 | b / a = 2 |
% | 模 - 由右側操做數和餘返回除以左側操做數 | b % a = 0 |
** | 指數- 執行對操做指數(冪)的計算 | a**b = 10 的冪 20 |
// | 地板除 - 操做數的除法,其中結果是將小數點後的位數被除去的商。 | 9//2 = 4 而 9.0//2.0 = 4.0 |
注:在Python2中默認是地板除,如今改成保留小數了,若是想使用地板除須要使用//
Python的比較操做符:
運算符 | 描述 | 示例 |
---|---|---|
== | 檢查,兩個操做數的值是否相等,若是是則條件變爲真。 | (a == b) 不爲 true. |
!= | 檢查兩個操做數的值是否相等,若是值不相等,則條件變爲真。 | (a != b) 爲 true. |
<> | 檢查兩個操做數的值是否相等,若是值不相等,則條件變爲真。 | (a <> b) 爲 true。這個相似於 != 運算符 |
> | 檢查左操做數的值是否大於右操做數的值,若是是,則條件成立。 | (a > b) 不爲 true. |
< | 檢查左操做數的值是否小於右操做數的值,若是是,則條件成立。 | (a < b) 爲 true. |
>= | 檢查左操做數的值是否大於或等於右操做數的值,若是是,則條件成立。 | (a >= b) 不爲 true. |
<= | 檢查左操做數的值是否小於或等於右操做數的值,若是是,則條件成立。 | (a <= b) 爲 true. |
注:Python3中<>已經取消了這個全部不等於都使用!=
Python賦值運算符:
運算符 | 描述 | 示例 |
---|---|---|
= | 簡單的賦值運算符,賦值從右側操做數左側操做數 | c = a + b將指定的值 a + b 到 c |
+= | 加法AND賦值操做符,它增長了右操做數左操做數和結果賦給左操做數 | c += a 至關於 c = c + a |
-= | 減AND賦值操做符,它減去右邊的操做數從左邊操做數,並將結果賦給左操做數 | c -= a 至關於 c = c - a |
*= | 乘法AND賦值操做符,它乘以右邊的操做數與左操做數,並將結果賦給左操做數 | c *= a 至關於 c = c * a |
/= | 除法AND賦值操做符,它把左操做數與正確的操做數,並將結果賦給左操做數 | c /= a 至關於= c / a |
%= | 模量AND賦值操做符,它須要使用兩個操做數的模量和分配結果左操做數 | c %= a is equivalent to c = c % a |
**= | 指數AND賦值運算符,執行指數(功率)計算操做符和賦值給左操做數 | c **= a 至關於 c = c ** a |
//= | 地板除,並分配一個值,執行地板除對操做和賦值給左操做數 | c //= a 至關於 c = c // a |
Python位運算符:
操做符 | 描述 | 示例 |
---|---|---|
& | 二進制和複製操做了一下,結果,若是它存在於兩個操做數。 | (a & b) = 12 即 0000 1100 |
| | 二進制或複製操做了一個比特,若是它存在一個操做數中。 | (a | b) = 61 即 0011 1101 |
^ | 二進制異或運算符的副本,若是它被設置在一個操做數而不是兩個比特。 | (a ^ b) = 49 即 0011 0001 |
~ | 二進制的補運算符是一元的,並有「翻轉」位的效果。 | (~a ) = -61 即 1100 0011以2的補碼形式因爲帶符號二進制數。 |
<< | 二進位向左移位運算符。左操做數的值左移由右操做數指定的位數。 | a << 2 = 240 即 1111 0000 |
>> | 二進位向右移位運算符。左操做數的值是由右操做數指定的位數向右移動。 | a >> 2 = 15 即 0000 1111 |
''' 二進制「與」計算:(1和1=1 0和任意都爲0) a = 10 b = 49 a&b 10 0 0 0 0 1 0 1 0 49 0 0 1 1 0 0 0 1 =0 0 0 0 0 0 0 0 0 二進制「或」計算:(遇1得1) a|b a = 60 # 60 = 0 0 1 1 1 1 0 0 b = 13 #13 = 0 0 0 0 1 1 0 1 = 0 0 1 1 1 1 0 1 = 0+0+32+16+8+4+0+1 = 61 二進制「異或」運算:(相同爲0,不一樣爲1) a^b a = 60 # 60 = 0011 1100 b = 13 # 13 = 0000 1101 0011 0001 = 0+0+32+16+0+0+0+1=49 二進制取反運算:(0置換爲1,1置換爲0) ~a a = 60 # 60 = 0011 1100 那麼 -a = 1100 0011 128 + 64 +2 +1 = 二進位向左、右移位運算符: a=2 那麼 往左移1位就是4以下: a<<1 = 4 ; a>>1 = 1 '''
Python邏輯運算符:
運算符 | 描述 | 示例 |
---|---|---|
and | 所謂邏輯與運算符。若是兩個操做數都是真的,那麼則條件成立。 | (a and b) 爲 true. |
or | 所謂邏輯OR運算符。若是有兩個操做數都是非零而後再條件變爲真。 | (a or b) 爲 true. |
not | 所謂邏輯非運算符。用於反轉操做數的邏輯狀態。若是一個條件爲真,則邏輯非運算符將返回false。 | not(a and b) 爲 false.
|
例子: and運算,都爲真時爲真 >>> 9 > 8 and 9 < 10 True >>> 9 > 8 and 9 > 10 False or運算,有一個爲真的時候便可爲真 >>> 9 > 8 or 9 > 10 True >>> 9 < 8 or 9 > 10 False >>> not運算,假爲真真爲假 >>> not 6.2 <= 6 True >>> not 6.2 >= 6 False >>>