2.7.8 for 循环和 range()函数

在条件为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。聪明的孩子!)
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大飞哥软件自习室

希望支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值