演算法工程師修仙之路:python3官方文件筆記(四)
本筆記來自於python手冊的中文版
深入 Python 流程控制
if 語句
-
可能會有零到多個 elif 部分,else 是可選的。關鍵字 ‘elif’ 是 ’else if’ 的縮寫,這個可以有效地避免過深的縮排。if … elif … elif … 序列用於替代其它語言中的 switch 或 case 語句。
x = int(input("Please enter an integer: ")) if x < 0: x = 0 print('Negative changed to zero.') elif x == 0: print('zero.') elif x == 1: print('Single.') else: print('More.')
for 語句
-
Python 中的 for 語句和 C 或 Pascal 中的略有不同。通常的迴圈可能會依據一個等差數值步進過程(如 Pascal),或由使用者來定義迭代步驟和中止條件(如 C ),Python 的 for 語句依據任意序列(連結串列或字串)中的子項,按它們在序列中的順序來進行迭代。
# 測量字串長度 words = ['cat', 'window', 'defenestrate'] for w in words: print(w, len(w)) """ cat 3 window 6 defenestrate 12 """
-
在迭代過程中修改迭代序列不安全(只有在使用連結串列這樣的可變序列時才會有這樣的情況)。如果你想要修改你迭代的序列,你可以迭代它的副本,使用切割標識就可以很方便的做到這一點。
for w in words[:]: if (len(w) > 0): words.insert(0, w) print(words) # ['defenestrate', 'window', 'cat', 'cat', 'window', 'defenestrate']
range() 函式
-
如果你需要一個數值序列,可以使用內建函式 range 生成一個等差級數連結串列。
-
range(10) 生成了一個包含10個值的連結串列,它用連結串列的索引值填充了這個長度為10的列表,所生成的連結串列中不包括範圍中的結束值。
-
可以讓 range() 操作從另一個數值開始,或者可以指定一個不同的步進值(甚至是負數,有時這也被稱為 “步長”)。
- range(5, 10):5,6,7,8,9;
- range(0, 10, 3):0,3,6,9;
- range(-10,-100,-30):-10,-40,-70。
-
迭代連結串列索引的話,需要結合使用 range() 和 len():
a = ['Mary', 'had', 'a', 'little', 'lamb'] for i in range(len(a)): print(i, a[i]) """ 0 Mary 1 had 2 a 3 little 4 lamb """
-
可迭代的:即適合作為那些期望從某些東西中獲得連續項直到結束的函式或結構的一個目標(引數)。for 語句就是這樣一個迭代器。list() 函式是另外一個迭代器 ,它從可迭代(物件)中建立列表。
break 和 continue 語句,以及迴圈中的 else 子句
-
break 語句和 C 中的類似,用於跳出最近的一級 for 或 while 迴圈。
-
迴圈可以有一個 else 子句:它在迴圈迭代完整個列表(對於 for )或執行條件為 false(對於 while )時執行,但迴圈被 break 中止的情況下不會執行。
for n in range(2, 10): for x in range(2, n): if (n % x == 0): print(n, "equals", x, "*", n // x) break else: # else語句是屬於for迴圈之中, 不是if語句。 print(n, "is a prime number") """ 2 is a prime number 3 is a prime number 4 equals 2 * 2 5 is a prime number 6 equals 2 * 3 7 is a prime number 8 equals 2 * 4 9 equals 3 * 3 """
-
與迴圈一起使用時,else 子句與 try 語句的 else 子句比與 if 語句的else 子句具有更多的共同點,try 語句的 else 子句在未出現異常時執行,迴圈的 else 子句在未出現 break 時執行。
-
continue 語句是從 C 中借鑑來的,它表示迴圈繼續執行下一次迭代。