python 的流程控制

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