Python 2.6 非程式設計師教程/迴圈
這是本章新的打字練習
onetoten = range(1, 11)
for count in onetoten:
print count
以及永遠存在的輸出
1 2 3 4 5 6 7 8 9 10
輸出看起來非常熟悉,但程式程式碼看起來不同。第一行使用range函式。range函式使用兩個引數,如下所示range(start, finish)。start是產生的第一個數字。finish比最後一個數字大一。請注意,此程式可以用更短的方式完成
for count in range(1, 11):
print count
以下是一些示例,展示了range命令的行為
>>> range(1, 10) [1, 2, 3, 4, 5, 6, 7, 8, 9] >>> range(-32, -20) [-32, -31, -30, -29, -28, -27, -26, -25, -24, -23, -22, -21] >>> range(5,21) [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] >>> range(5) [0, 1, 2, 3, 4] >>> range(21, 5) []
下一行for count in onetoten:使用for控制結構。for控制結構看起來像for variable in list:。list從列表的第一個元素開始遍歷到最後一個元素。當for遍歷列表中的每個元素時,它會將每個元素放入variable中。這允許在每次執行for迴圈時使用variable。這裡還有一個示例(你不必輸入它)來演示
demolist = ['life', 42, 'the universe', 6, 'and', 9, 'everything']
for item in demolist:
print "The Current item is:",
print item
輸出是
The Current item is: life The Current item is: 42 The Current item is: the universe The Current item is: 6 The Current item is: and The Current item is: 9 The Current item is: everything
注意for迴圈是如何遍歷併為列表中的每個元素設定item的。注意,如果你不希望print轉到下一行,請在語句的末尾新增一個逗號(例如,如果你想在該行上列印其他內容)。那麼,for有什麼用呢?第一個用途是遍歷列表的所有元素並對每個元素執行操作。以下是一種快速新增所有元素的方法
list = [2, 4, 6, 8]
sum = 0
for num in list:
sum = sum + num
print "The sum is:", sum
輸出只是
The sum is: 20
或者你可以編寫一個程式來找出列表中是否存在重複項,就像這個程式一樣
list = [4, 5, 7, 8, 9, 1, 0, 7, 10]
list.sort()
prev = list[0]
del list[0]
for item in list:
if prev == item:
print "Duplicate of", prev, "found"
prev = item
為了更好地衡量
Duplicate of 7 Found
好的,它是如何工作的?這裡有一個特殊的除錯版本可以幫助你理解(你不需要輸入它)
l = [4, 5, 7, 8, 9, 1, 0, 7, 10]
print "l = [4, 5, 7, 8, 9, 1, 0, 7, 10]", "\t\tl:", l
l.sort()
print "l.sort()", "\t\tl:", l
prev = l[0]
print "prev = l[0]", "\t\tprev:", prev
del l[0]
print "del l[0]", "\t\tl:", l
for item in l:
if prev == item:
print "Duplicate of", prev, "found"
print "if prev == item:", "\tprev:", prev, "\titem:", item
prev = item
print "prev = item", "\t\tprev:", prev, "\titem:", item
輸出為
l = [4, 5, 7, 8, 9, 1, 0, 7, 10] l: [4, 5, 7, 8, 9, 1, 0, 7, 10] l.sort() l: [0, 1, 4, 5, 7, 7, 8, 9, 10] prev = l[0] prev: 0 del l[0] l: [1, 4, 5, 7, 7, 8, 9, 10] if prev == item: prev: 0 item: 1 prev = item prev: 1 item: 1 if prev == item: prev: 1 item: 4 prev = item prev: 4 item: 4 if prev == item: prev: 4 item: 5 prev = item prev: 5 item: 5 if prev == item: prev: 5 item: 7 prev = item prev: 7 item: 7 Duplicate of 7 found if prev == item: prev: 7 item: 7 prev = item prev: 7 item: 7 if prev == item: prev: 7 item: 8 prev = item prev: 8 item: 8 if prev == item: prev: 8 item: 9 prev = item prev: 9 item: 9 if prev == item: prev: 9 item: 10 prev = item prev: 10 item: 10
我在程式碼中添加了這麼多print語句,以便你可以看到每行發生了什麼。(順便說一句,如果你無法弄清楚為什麼程式無法正常工作,嘗試新增大量print語句,以便你可以看到發生了什麼。)首先,程式從一個無聊的舊列表開始。接下來,程式對列表進行排序。這樣做是為了將任何重複項放在一起。然後程式初始化一個prev(ious)變數。接下來,刪除列表的第一個元素,這樣第一個專案就不會被錯誤地認為是重複項。接下來進入for迴圈。檢查列表中的每個專案,看看它是否與前一個專案相同。如果它是重複項,則找到了。然後更改prev的值,以便下次執行for迴圈時,prev是當前項的前一項。果然,找到了 7 是一個重複項。(注意如何使用\t來列印一個製表符。)
使用for迴圈的另一種方法是執行某項操作一定次數。以下是一些程式碼來打印出斐波那契數列的前 9 個數字
a = 1
b = 1
for c in range(1, 10):
print a,
n = a + b
a = b
b = n
令人驚訝的輸出是
1 1 2 3 5 8 13 21 34
所有可以用for迴圈完成的事情也可以用while迴圈完成,但是for迴圈提供了一種簡單的方法來遍歷列表中的所有元素,或者執行某項操作一定次數。