python3.5修煉手冊11
條件、循環和其他語句
import的使用
import的標準語法是:
import module1[,module2[,...moduleN]]
表示允許一個import導入多個模塊,但是各個模塊需要用逗號隔開。
當解釋器遇到import語句時,如果模塊在當前搜索路徑就會被導入。搜索路徑是一個解釋器,會先搜索所有目錄的列表。
python搜索路徑由一系列目錄名組成,python解釋器會依次從這些目錄中尋找引入模塊。
搜索路徑是在python編譯或安裝時確定的,被存儲在sys模塊的path的變量中
查看python默認搜索路徑的方式如下:
import sys print(‘python默認的搜索路徑是:%s‘%sys.path)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
python默認的搜索路徑是:[‘C:\\python.py‘, ‘C:\\python.py‘, ‘C:\\python\\python35.zip‘, ‘C:\\python\\DLLs‘, ‘C:\\python\\lib‘, ‘C:\\python‘, ‘C:\\python\\lib\\site-packages‘]
由上面可以到sys.path輸出的是一個列表,第一項輸出的是執行文件所在的目錄,即python解釋器的目錄
除了import語句引入模塊,還可以使用from語句引入模塊。
from 語句可以從模塊中導入指定部分到當前的命名空間。
form語法如下:
from modname import name1[,name[,...name]]
例如:
from math import pi print(pi)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
3.141592653589793
上例語句就是從math模塊中導入pi到當前命名空間,該語句不會將math整個模塊導入。
import和from做一個比較:(以math模塊中的sin、exp、pi為例)
import語句示例:
import math print(math.pi) print(math.sin(1)) print(math.exp(1))
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
3.141592653589793
0.8414709848078965
2.718281828459045
從上面可以看出import導入math模塊後裏面的函數是可以輸出的
from語句示例:
from math import pi print(pi) print(sin(1))
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
Traceback (most recent call last):
3.141592653589793
File "C:/python.py/tiaojianxunhuanyuju.py", line 9, in <module>
print(sin(1))
NameError: name ‘sin‘ is not defined
從上面可以看出from語句指定math模塊的pi函數後math中的其他函數是無法輸出的
使用from語句的好處如下:
import math print(math.pi) print(pi)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
Traceback (most recent call last):
3.141592653589793
File "C:/python.py/tiaojianxunhuanyuju.py", line 9, in <module>
print(pi)
NameError: name ‘pi‘ is not defined
從上面可以看出使用impot語句導入math模塊時訪問pi對象,需要使用math.pi否則會報錯
from math import pi print(pi)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
3.141592653589793
從上面可以看出使用from語句後,可以直接訪問pi對象,不需要加模塊名
from語句可以一個語句導入多個函數,多個函數之間用逗號分割。
例如:
from math import pi,sin,exp
也可以將模塊中的所有函數導入。
例如:
from math import *
註意:在實際開發環境中from語句不建議過多使用,不利於編寫清晰、簡單的代碼。只有想從給定模塊導入所有功能時才使用這種方式。
import語句給模塊取別名
例如:
import math as m print(m.pi)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
3.141592653589793
給模塊取別名的方式為:在導出模塊的語句末尾增加一個as子句,as後面跟上別名名稱。
from語句給模塊取別名同上
例如:
from math import pi as p print(p)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
3.141592653589793
使用逗號輸出
使用逗號輸出示例:
name=‘杜宇恒‘ print(‘我叫:‘,name)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
我叫: 杜宇恒
還可以使用逗號輸出多個表達式,只要將多個表達式用逗號隔開即可!
aa = ‘大家好!‘ bb = ‘我叫杜宇恒,‘ cc =‘來自北京。‘ print(aa,bb,cc)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
大家好! 我叫杜宇恒, 來自北京。
別樣的復賦值
序列解包
多個賦值操作同時進行。
例如:
x,y,z = 1,2,3 print(x,y,z)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
1 2 3
交換兩個或多個變量的值。
x,y,z = 1,2,3 x,y = y,x print(x,y,z)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
2 1 3
上例的輸出結果可以看出x和y的值交換了
在python中,交換所做的事情叫做序列解包(sequence unpacking)或可選叠代解包,即將多個值的序列解開,然後放到變量序列中。
例如:
num = 1,2,3 print(‘原始值:‘,num) x,y,z = num print(‘獲得序列解開的值(x):‘,x) print(‘獲得序列所有解開的值:‘,x,y,z)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
原始值: (1, 2, 3)
獲得序列解開的值(x): 1
獲得序列所有解開的值: 1 2 3
可以使用popitem方法將鍵-值作為元組返回,返回元組可以直接賦值到兩個變量中。
例如:
student = {‘name‘:‘杜宇恒‘,‘number‘:‘666‘} key,value=student.popitem() print(key) print(value)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
name
杜宇恒
序列解包允許函數返回一個以上的值並打包成元組,然後通過一個賦值句進行訪問。
註意:解包序列中的元素數量必須和放置在賦值符號"="左邊的數量必須完全一致。
鏈式賦值
通過多個等式為多個變量賦同一個值,這種方法叫做鏈式賦值。
例如:
x=y=z=10 print(x) print(y) print(z)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
10
10
10
鏈式賦值是將同一個值賦值給多個變量。
也可以單獨賦值
例如:
x=10 y=x print(y)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
10
單獨賦值相比較鏈式賦值,顯然鏈式賦值更簡潔。
增量賦值
將表達式放置在賦值運算符(=)的左邊(如將x=x+1寫成x+=1),這種寫法就叫做增量賦值(Augemented Assignment)。
這種寫法對 + - * / % 等標誌運算符都適應。
例如:
x=5 x+=1 print(‘加‘,x) x-=2 print(‘減‘,x) x*=2 print(‘乘‘,x) x/=4 print(‘除‘,x)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
加 6
減 4
乘 8
除 2.0
使用增量賦值相對賦值操作看上去更簡潔。
增量賦值除了適用於數值類型,還適用於二元運符的數據類型。
例如:
name=‘杜宇恒,‘ name+=‘666‘ print(name) name*=2 print(name)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
杜宇恒,666
杜宇恒,666杜宇恒,666
語句塊
在python中,冒號(:)用來標識語句塊的開始,語句塊中每一個語句都需要縮進(縮進量相同)。當退回到和已經閉合的塊一樣的縮進量時,表示當前語句塊已經結束。
條件語句
if語句
if的基本用法
例如:
greeting = ‘hello‘ if greeting == ‘hello‘: print(‘hello‘)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
hello
如果條件(在if冒號之間的表達式)判定為真,後面的語句塊就會被執行:如果條件判定為假,語句塊就不會被執行。
if語塊可以由多條語句組成,編寫過程中要註意保持語句的縮進一致。
例如:
greeting = ‘hello‘ if greeting == ‘hello‘: student={‘杜宇恒‘:‘666‘,‘高爽‘:‘777‘,‘徐偉‘:‘888‘,‘杜兆利‘:‘999‘} print(‘字典中的元素有%d個‘%len(student)) student.clear() print(‘字典刪除後元素的個數為:%d個‘%len(student))
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
hello
字典中的元素有4個
字典刪除後元素的個數為:0個
if語句的條件判定除了使用==外,還可以使用>(大於)、<(小於)、>=(大於等於)、<=(小於等於)等條件表示符大小關系。
還可以使用各個函數或方法返回值作為條件判定。
else子句
else的基本用法
例如:
greeting = ‘hi‘ if greeting == ‘hello‘: print(‘hello‘) else: print(‘該語句塊不在if中,greeting的值不是hello‘)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
該語句塊不在if中,greeting的值不是hello
這段程序加入了一個新的條件子句——else子句,之所以叫子句,是因為else不是獨立語句,只能做為if語句的一部分。使用else子句可以增加一種選擇。
註意:在else子句後面沒有條件判定
elif子句
elif子句的基本用法
例如:
num = 10 if num > 10: print(‘num的值大於10‘) elif 0 <=num<=10: print(‘num的值介於0到10之間‘) else: print(‘num的值小於0‘)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
num的值介於0到10之間
由輸出結果可知,這段程序執行的是elif子句中的語句塊,即elif子句的條件判定結果為true,所以執行這個子句後的語句塊。
elif需要和if、else子句聯合使用,不能獨立使用,並且必須以if語句開頭,可以選擇是否以else子句結尾。
嵌套代碼塊
嵌套代碼塊嵌套代碼塊就是把if,else、elif等條件語句再放入if、slse、elif條件語句塊中,作為深層次的條件判定語句。
嵌套代碼塊的基本用法
例如:
num = 10 if num %2 == 0: if num %3 == 0: print("你輸入的數字可以整除2和3") elif num % 4 == 0: print("你輸入的數字可整除2和4") else: print("你輸入的數字可以整除2,但不能整除3和4") else: if num % 3 == 0: print("你輸入的數字可以整除3,但不能整除2") else: print("你輸入的數字不能整除2和3")
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
你輸入的數字可以整除2,但不能整除3和4
由上例可以看出在if語句的語句塊中還存在if語句、語句塊以及else子句,else子句的語句塊中也可以存在if語和else子句。
is
is:同一性運算符
is的基本用法
例如:
x=y=[1,2,3] z=[1,2,3] print(x==y) print(x==z) print(x is y) print(x is z)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
True
True
True
False
從上例可以可看出x和z相等確不相同。這是應為變量x和y被綁定在同一個列表上,而變量z被綁定在另外一個具有相同數值和順序的列表上。它們的值可能相等,卻不是同一個對象。
使用==運算符判定兩個對象是否相等,使用is判定兩個對對象是否相同(是否為同對象)。
比較字符串和序列
對列表進行比較操作
例如:
print([1,2]<[2,1]) print([1,2]<[1,2]) print([1,2]==[1,2])
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
True
False
True
比較規則還適用於序列元素
例如:
print([2,[1,2]]<[2,[1,3]])
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
True
布爾運算符
and運算符用於連接兩個布爾值,並在兩者都為真值是返True,否則返回假。
例如:
num = 10 if num <=10 and num>=5: print(‘num的值在5到10之間‘) else: print(‘num的值不在5到10之間‘)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
num的值在5到10之間
與and同類的還有or和not連個運算符
布爾值的特性:只有在需要求值時才求值。
布爾運算符通常被稱為邏輯運算符,種行為同樣適用於or。比如說在表達式x or y 中, x為真時直接返回x的值,否則返回y的值。這意味著在布爾運算符後面的代碼都不執行。
斷言
使用斷言時需要註意註意以下幾點:
①assert斷言是用來聲明某個條件是真的。
②如果你非常確信你使用的列表中至少有一個元素,想要檢驗這一點,並在它非真時引發一個錯誤,那麽assert語句是應用在這種情形下的理想語句。
③assert語句失敗時,會引發一個AssertionError。
例如:
x=3 assert x > 0,‘x is not zero or negative‘ #提示x不是偶數 assert x % 2 ==0,‘x is not an even number‘
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
Traceback (most recent call last):
File "C:/python.py/tiaojianxunhuanyuju.py", line 8, in <module>
assert x % 2 ==0,‘x is not an even number‘
AssertionError: x is not an even number
由上例可以看出,當assert後面的條件為真是,程序正常運行;當assert後面的條件為假時,輸出錯誤信息,錯誤信息的提示是自定義的,這個錯誤提示信息可以稱為異常參數。assert的異常參數是在斷言表達式後添加的字符串信息,用來解釋斷言並更容易知道問題出在哪裏。
循環
while循環
while循環的基本語法如下:
while 判斷條件:
執行語句......
執行語句可以是單個語句或語句塊。判斷條件可以是任何表達式,所有非零、非空(null)的值都為真(True)。當判斷語句為假(False)時,結束循環。
小例子:
使用簡單的程序輸出1~5所有的數字如下:
n=1 while n < 6: print("當前數字是:",n) n+=1
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
當前數字是: 1
當前數字是: 2
當前數字是: 3
當前數字是: 4
當前數字是: 5
for循環
for循環的語法格式如下:
for iterat_var in sequence:
statements(s)
sequence是任意序列,iterat_var是序列中需要遍歷的元素。statements是待執行的語句塊。
對字符串進行for循環:
for letter in ‘good‘: print(‘當前字母‘,letter)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
當前字母 g
當前字母 o
當前字母 o
當前字母 d
對數字序列進行for循環
number =[1,2,3] for num in number: print(‘當前數字‘,num)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
當前數字 1
當前數字 2
當前數字 3
對字典進行for循環
name = {‘name‘:‘杜宇恒‘,‘number‘:‘666‘} for tup in name: print(‘%s:%s‘%(tup,name[tup]))
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
name:杜宇恒
number:666
循環遍歷字典元素
使用items方法將鍵-值對作為元組返回。
例如:
name = {‘name‘:‘杜宇恒‘,‘number‘:‘666‘} for key,value in name.items():
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
name:杜宇恒
number:666
字典中的元素是沒有順序的。也就是說,叠代字典中的鍵和值都能保證被處理,但是處理順序不確定,這也是用for循環輸出字典中的元素時不按照順序輸出的原因;
叠代工具
並行叠代:
程序可以叠代兩個序列。
例如:
student =[‘duyuheng‘,‘xuwei‘,‘gaoshuan‘] number = [‘666‘,‘777‘,‘888‘] for i in range(len(student)): print(student[i],‘的學號是‘,number[i])
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
duyuheng 的學號是 666
xuwei 的學號是 777
gaoshuan 的學號是 888
在上例中程序中,i是循環索引的標準變量名。
還可以使用內建的函數zip來進行並行叠代,把兩個序列合並在一起,返回一個元組的列表。
例如:
student =[‘duyuheng‘,‘xuwei‘,‘gaoshuan‘] number = [‘666‘,‘777‘,‘888‘] for name,num in zip(student,number): print(name,‘的學號是:‘,num)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
duyuheng 的學號是: 666
xuwei 的學號是: 777
gaoshuan 的學號是: 888
zip函數可以運作於任意數量的序列,並且可以應付不等長的序列,當短序列"用完"時就會停止。
例如:
for num1,num2 in zip(range(3),range(100)): print(‘zip鍵值對為‘,num1,num2)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
zip鍵值對為 0 0
zip鍵值對為 1 1
zip鍵值對為 2 2
由輸出結果可以看出,zip函數以短序列為準,當短序列遍歷結束時,for循環就會結束遍歷。
翻轉和排序叠代
reversed和sorted這兩函數可作用於任何序列或叠代對象,但不是原地修改對象,而是返回翻轉或者排序後的版本。
例如:
print(sorted([2,3,4,1,5])) print(sorted(‘hello,world!‘)) print(list(reversed(‘hello,world!‘))) print(‘‘.join(reversed(‘hello,world!‘)))
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
[1, 2, 3, 4, 5]
[‘!‘, ‘,‘, ‘d‘, ‘e‘, ‘h‘, ‘l‘, ‘l‘, ‘l‘, ‘o‘, ‘o‘, ‘r‘, ‘w‘]
[‘!‘, ‘d‘, ‘l‘, ‘r‘, ‘o‘, ‘w‘, ‘,‘, ‘o‘, ‘l‘, ‘l‘, ‘e‘, ‘h‘]
!dlrow,olleh
由輸出結果可以看到,sorted函數返回的是一個列表, reversed函數返回的是一個可叠代對象。在for循環和join方法中使用不會有任何問題。如果需要對這兩個函數使用索引、分片及調用list方法,就可以使用list類型轉換返回對象。
跳出循環
break
break語句用來終止循環語句,即使循環條件中沒有False條件或序列還沒有遍歷完,也會停止執行循環語句。
break語句用在while和for循環中。
如果使用嵌套循環,break語句就會停止執行最深層的循環並開始執行下一行代碼.
當遇到break語句時,無論什麽條件,都跳出這個循環。
例如:
#for示例 for letter in ‘hello‘: if letter ==‘l‘: break print(‘當前字母為:‘,letter) #while循環 num = 10 while num > 0: print(‘輸出數字為:‘,num) num -= 1 if num == 8: break
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
當前字母為: h
當前字母為: e
輸出數字為: 10
輸出數字為: 9
for 循環示例可以看出,輸出語句輸出循環遍歷到的字符,遇到指定字符時,跳出for循環。
使用while做條件判定時,在語句塊中輸出滿足條件的數字,當數字等於指定數字時,跳出while循環,不再繼續遍歷。
continue
continue語句用來告訴python跳過當前循環剩余語句,然後繼續進行下一輪循環。
當執行過程中遇到continue語句時,無論執行條件是真還是假,都要跳出這次循環,進入下一次循環。
例如;
#for示例 for letter in ‘hello‘: if letter == ‘l‘: continue print(‘當前字母:‘,letter) #while示例 num = 3 while num > 0: num -= 1 if num == 2: continue print(‘當前變量值:‘,num)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
當前字母: h
當前字母: e
當前字母: o
當前變量值: 1
當前變量值: 0
由上例可以看出,相比break語句,使用continue語句知識跳過一次循環,不會跳出整個循環。
循環中的else子句
在while循環中使用else語句
在while條件語句為False時,執行else的語句塊。
例如:
num = 0 while num < 3: print(num,"小於 3") num += 1 else: print(num,"大於或等於3") print("結束循環!!!")
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
0 小於 3
1 小於 3
2 小於 3
3 大於或等於3
結束循環!!!
從輸出結果可以看到,while循環結束後執行了else語句中的語句塊,輸出了"3大於或等於3"語句。
在for循環中使用else語句
在for如條件語句為False或者結束後沒有被break中斷時,執行else的語句塊。
例如:
names = [‘duyuheng‘,‘duzhaoli‘] for name in names: if name =="du": print(‘名稱:‘,name) break print("循環名稱列表"+name) else: print("沒有循環數據!") print("結束循環!")
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
循環名稱列表duyuheng
循環名稱列表duzhaoli
沒有循環數據!
結束循環!
由輸出條件看到,for循環結束後執行else語句塊中的內容。
pass語句
python中pass是空語句,作用是保持程序結構的完整性。
pass語句的基本用法:
name = ‘duyuheng‘
if name == ‘duyuheng‘:
print(‘hello‘)
elif name == ‘duzhaoli‘:
pass
else:
print(‘nothing‘)
C:\python\python.exe C:/python.py/tiaojianxunhuanyuju.py
hello
上例如果不使用pass占位就會報錯
本文出自 “duyuheng” 博客,謝絕轉載!
python3.5修煉手冊11