python 的流程控制
python 在執行程式時,都是依照程式碼的順序由上而下執行,若遇到程式需要做判斷、或需要反覆執行某幾行程式碼時,就需要改變程式執行的流程。
- if 條件判斷式
當需要做條件判斷時,就必須使用 if 的條件判斷,如:
x=30
if x>30:
print 'x is more than 30.'
elif x==30:
print 'x is equal to 30.'
else:
print 'x is small than 30.'
...
x is equal to 30.
if 的條件判斷可搭配 elif 及 else 來判斷其它的條件。每一個符合條件的區塊以 ":" 開始,可以用縮排來區分,但同一區段的縮排方式要一致。
- if / else 三元運算式
if X:A=Y
else:
A=Z
可以轉換成
A=Y if X else Z
>>> x=1
>>> if x:
... a=2
... else:
... a=3
...
>>> a
2
>>> b=2 if x else 3
>>> b
2
>>> x=0
>>> b=2 if x else 3
>>> b
3
>>>
- while 迴圈
如果希望反覆執行某一段程式碼,直到達成某條件後才結束時,可以使用 while 迴圈。
i=0
while i<10:
... print i
... i+=1
...
0
1
2
3
4
5
6
7
8
9
- for 迴圈
如果要針對一個 list 的資料範圍作迴圈,可以使用for 迴圈,當每次執行時,就會依序從 list 中取出一個元素來處理。
>>> x=range(10)
>>> x
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
for i in x:
... print i
...
0
1
2
3
4
5
6
7
8
9
若 list 中的資料是 list 或 tuple資料型態時,也可以使用for 迴圈來取出對應的元素,如:
>>> dic={'name':'eric','email':'eric@gmail.com'}
>>> for k,v in dic.items():
... print 'dic[%s]=%s'%(k,v)
...
dic[name]=eric
dic[email]=eric@gmail.com
>>>
- break敍述會立即跳離迴圈
while 迴圈可以搭配break 來中斷或忽略某一部份的程式迴圈。
i=0
while i<10:
... if i==5: break
... print i
... i+=1
...
0
1
2
3
4
- continue敍述會跳至最近所在的迴圈
即當次不做,來到迴圈開頭列,繼續下一次
>>> x=10>>> while x:
... x-=1
... if x%2!=0: continue
... print x
...
8
6
4
2
0
- pass 敍述是什麼事也不做,繼續執行下一個敍述。
>>> while 1:
... pass
...
要按ctrl-C才會停止。
- try敍述
當程式有可能執行時出現例外錯誤事件時,我們可以使用try的控制項將程式包含在其中,其用法如下:
while True:
reply=raw_input('Enter number:')
if reply=='stop': break
try:
num=int(reply)
except:
print 'Bad!'*8
else:
print int(reply)**2
print 'Bye'
執行結果:
C:\Users\Administrator>python trySample.py
Enter number:8
64
Enter number:9
81
Enter number:ee
Bad!Bad!Bad!Bad!Bad!Bad!Bad!Bad!
Enter number:i
Bad!Bad!Bad!Bad!Bad!Bad!Bad!Bad!
Enter number:stop
Bye
C:\Users\Administrator>
example :
如何用for及if/else的判斷式,寫出下列圖示
*
***
*****
*******
*****
***
*
Ans:
intMaxSize=7
for i in range(1,intMaxSize*2+1,2):
if i>intMaxSize: print '*'*(intMaxSize-(i-intMaxSize))
else: print '*'*i
如何用for及if/else的判斷式,寫出下列圖示
*
***
*****
*******
*****
***
*
Ans:
intMaxSize=7
for i in range(1,intMaxSize*2+1,2):
if i>intMaxSize: print '*'*(intMaxSize-(i-intMaxSize))
else: print '*'*i