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
循环提供了一种简单的方法来遍历列表中的所有元素,或者执行某项操作一定次数。