Python用於流程控制的語句包括if,for,while,這些都是從C語言借鑒過來的,然后我們會提到pass語句。
1,if
if的語法很簡答,我們舉一個例子就好,注意關鍵字if, elif, else,一個if復合語句中可以有多個elif。
1 x = int(input("input an integer : ")) 2 if x > 0: 3 print x, " > 0" 4 elif x < 0: 5 print x, " < 0" 6 else: 7 print x, " = 0"
2,for
Python的for語句和C語言中的for語句是有區別的,C語言的for語句有循環變量初始語句,變化語句,以及一個循環結束條件語句,C的for語句很靈活。
而Python的for語句就是在一個序列(Sequence)上遍歷,按照序列中元素的順序遍歷。 [關於序列參考Python基礎-序列(Sequence)]
語法:for item in sequence:
2.1 一個基本的例子
1 words = ["feelings", "like", "love"] #輸出:8 feelings 2 for word in words: # 4 like 3 print len(word), word # 4 love
2.2 深入
一般情況下不要在for語句的內部去修改被遍歷的序列,為什么呢,因為默認情況下for在遍歷一個sequence的時候是不會事先復制它的,所以如果我們要修改被遍歷的sequence,我們就手動復制一個sequence用於遍歷。
如下是一個例子,用words[:]把words給復制下來,結果大家自己實驗一下
1 for word in words[:]:
2 print len(word), word 3 if len(word) > 4: 4 words.insert(0, word) 5 print "words : ", words
如果我們在for中不用words[:]替換words,會出現什么情況呢,會出現這個循環永遠也終止不了,因為每循環一次words的長度就增加1,大家動手試驗一下便知。通過這個試驗以及更深入的實驗我們還可以探索出Python for語句的一些實現機制,后面我會寫一篇來探討這個。
3,while
Python的while語句和C語言幾乎一樣,只是判斷條件沒有括號圍着。
下面這個例子輸出一個Fibonacci數列
1 a, b = 0, 1 2 fib = [] 3 while len(fib) < 10: #循環條件沒有括號 4 a, b = b, a+b 5 fib.append(b) 6 print fib
輸出:[1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
4,關於for和while的更多
4.1 break 和 continue
break和continue也是從C語言借鑒過來的,而且意義也一樣,break跳出當層循環,continue開始執行循環下一輪。
4.1 屬於for和while的else
循環語句for和while也可以有else,這是當循環完成,也就是沒有被break打破循環的情況才會執行的語句塊
一個例子,找出2~19中的質數,體會下for語句中的break和else。
1 factor = [] 2 for n in range(2, 20): 3 for x in range(2, n): 4 if n%x == 0: 5 print n, "=", x, "*", n/x 6 break; 7 else: # 這個else是和第3行的for匹配的 8 factor.append(n) 9 print factor
輸出結果:
4 = 2 * 2
6 = 2 * 3
......
[2, 3, 5, 7, 11, 13, 17, 19]
5, pass語句
我們今天看的if,while,for都是復合語句(compound statement), 復合語句就是包含其他語句的語句,除了if,while,for還有with,try以及函數和類定義。
而在復合語句中,如果我們什么都不需要做,就可以用pass,這就像C語言中只是一個分號的空語句
一個例子,代碼在這個地方等待鍵盤Ctrl-C來終止。
1 while True: 2 pass
參考:
1, http://docs.python.org/3.3/tutorial/controlflow.html#if-statements Python文檔
2, http://docs.python.org/3/reference/compound_stmts.html Python文檔