在条件为True 时,while 循环就会继续循环(这是它的名称的由来)。但如果你
想让一个代码块执行固定次数,该怎么办?可以通过 for 循环语句和 range()函数来实现。
“类真”和“类假”的值
其他数据类型中的某些值,条件认为它们等价于 True 和 False。在用于条件时,0、0.0 和' '(空字符串)被认为是 False,其他值被认为是True。例如,请看下面的程序:
name = ''
while not name:➊ print('Enter your name:') name = input()
print('How many guests will you have?') numOfGuests = int(input())
if numOfGuests:➋
print('Be sure to have enough room for all your guests.')➌ print('Done')
如果用户输入一个空字符串给 name,那么 while 语句的条件就会是 True ➊,程序继续要求输入名字。如果 numOfGuests 不是 0
➋,那么条件就被认为是 True,程序就会为用户打印一条提醒信息➌。
可以用 not name != ' '代替 not name,用 numOfGuests != 0 代替 numOfGuests,但使用类真和类假的值会让代码更容易阅读。
在代码中,for 语句看起来像for i in range(5):这样,总是包含以下部分:
• for 关键字;
• 一个变量名;
• in 关键字;
• 调用 range()方法,最多传入 3 个参数;
• 冒号;
• 从下一行开始,缩退的代码块(称为 for 子句)。
让我们创建一个新的程序,名为 fiveTimes.py,看看 for 循环的效果。
print('My name is') for i in range(5):
print('Jimmy Five Times (' + str(i) + ')')
for 循环子句中的代码运行了 5 次。第一次运行时,变量 i 被设为 0。子句中的 print()调用将打印出 Jimmy Five Times (0)。Python 完成 for
循环子句内所有代码的一次迭代之后,执行将回到循环的顶部,for 语句让 i 增加 1。这就是为什么 range(5)导致子句的 5 次迭代,i 分别被设置为 0、1、2、3、4。变量 i
将递增到(但不包括)传递给 range()函数的整数。图 2-14 展示了 fiveTimes.py 程序的流程图。
运行这个程序时,它将打印 5 次Jimmy Five Times 和 i 的值,然后离开 for 循环。
My name is
Jimmy Five Times (0) Jimmy Five Times (1) Jimmy Five Times (2) Jimmy Five Times (3)
Jimmy Five Times (4)
也可以在循环中使用 continue 语句。continue 语句将让 for 循环变量继续下一个值,就像程序执行已经到达循环的末尾并返回开始一样。实际上,只能在 while 和 for
循环内部使用 continue 和 break 语句。如果试图在别处使用这些语句,Python 将报错。
作为 for 循环的另一个例子,请考虑数学家高斯的故事。当高斯还是一个小孩时,老师想给全班同学布置很多计算作业。老师让他们从 0 加到
100。高斯想到了一个聪明办法,在几秒钟内算出了答案,但你可以用 for 循环写一个Python 程序,替你完成计算。
➊ total = 0
➋ for num in range(101):
➌ total = total + num
➍ print(total)
结果应该是 5050。程序刚开始时,total 变量被设为 0。然后 for 循环执行 100
次total = total + num。当循环完成 100 次迭代时,0 到 100 的每个整数都加给了total。
这时,total 被打印到屏幕上。即使在最慢的计算机上,这个程序也不用 1 秒钟就能完成计算。
(小高斯想到,有 50 对数加起来是 100:1 + 99, 2 + 98, 3 + 97……直到 49 + 51。
因为 50 × 100 是 5000,再加上中间的 50,所以 0 到 100 的所有数之和是 5050。聪明的孩子!)