学习目标
- 通过使用while循环编写重复执行的语句。
- 遵从循环的设计策略开发循环。
- 利用用户的确认控制循环。
- 用哨兵值控制循环。
- 通过使用输入重定向从文件获取大量数据而不是从键盘输入来来获取大量数据,并且使用输出重定向将输出存人文件。
- 使用for循环来实现计数器控制的循环。
- 编写嵌套循环。
- 学习减少数值错误的技术。
- 从大量的例子里学习循环(GCD、FutureTuition、MonteCarloSimulation、PrimeNumber)。
- 使用break和continue控制程序。
- 使用一个循环来模拟随机漫步。
一、引言
循环是一种控制一个语句块重复执行的结构。循环的概念是程序设计的基础。Python提供了两种类型的循环语句:while循环和for循环。while循环是一种条件控制循环,它是根据一个条件的真假来控制的;而for循环是一种计数器控制循环,它会重复特定的次数。
二、while循环
关键点:当一个条件保持为真时while循环重复执行语句。
while循环的语法是:
while loop-continuation-condition:
# Loop body
Statement(s)
图5-1a显示的是while循环流程图。一个循环体单次执行被称作循环的一次迭代(或操作)。每个循环都包含一个loop-continuation- condition (循环继续条件),这是控制循环体执行的布尔表达式。每次都计算它来检测是否应该执行循环体。如果它的计算结果为真,则执行循环体;否则,终止整个循环并且程序控制权转到while循环后的语句。
这个显示“programming is fun !”一百次的循环是一个while循环的例子。它的流程图如图5-1b。循环继续条件是count<100并且这个循环体包含两条语句:
三、循环设计策略
对于一个初学编程的人来说,编写一个能够正确工作的循环不是一个容易的任务。编写一个循环时可以考虑以下三步。
- 第1步:确认需要循环的语句。
- 第2步:把这些语句包裹在一个循环,如下所示。
while True:
Statements
- 第3步:编写循环继续条件并且添加合适的语句控制循环。
while loop-continuation-condition:
Statements
Additional statements for contro1ing the 1o0p
四、for 循环
关键点:Python的for循环通过一个序列中的每个值来进行迭代。
我们经常是知道循环体需要被执行多少次,所以,使用一个控制变量统计执行的次数。
这种类型的循环被称作计数器控制的循环。大体上,这个循环可以编写成如下形式:
i = initialValue # Initialize loop-contro1 variable
while i < endValue:
# Loop body
...
i += 1 # Adjust loop-contro1 variable
for循环可以用来简化上面的循环:
for i in range(initia1Value, endValue):
# Loop body
通常,for 循环的语法是:
for var in sequence:
# Loop body
sequence里保存data的多个条目,且这些条目按照一个接一个地方式存储。在后面的内容里,还将介绍字符串、列表和数组。Python 里它们都是序列类型的对象。变量var表示这个序列里每个连续值,针对每个值,循环体内的语句都执行一次循环体。
Range(a,b)函数返回一系列连续整数a、a+1、... b-2和b-1。例如:
for v in range(4,8):
print(v) # 4,5,6,7
range函数有两种或更多形式。你也可以使用range ( a)也可以使用range ( a,b,k)。range(a)与range(0,a)功能一样。 在range(a,b,k)中k被用作步长值。序列中的第一个数是a。序列中每一个连续数都会被增加一个步长值k。b是界限值。序列中的最后一个数必须小于b。
如果函数range(a,b,k)中的k为负数,则可以反向计数。在这种情况下,序列仍为a、a+k、a+2k 等等但k为负数。最后一个数必须大于b。例如:
for v in range(5, 1, -1) :
print(v) #5,4,3,2
注意: range 函数中的数必须为整数。例如: range(1.5,8.5)、range(8.5) 或range(1.5,8.5,1)都是错误的。
五、嵌套循环
关键点:一个循环可以嵌套到另一个循环里。
嵌套循环是由一个外层循环和一个或多个内层循环构成。每次重复外层循环时,内层循环都被重新进入并且重新开始。
例如:
for i in range(1000) :
for j in range (1000) :
for k in range (1000) :
Perform an action
注意:注意嵌套循环可能会花费很长的时间来运行。分三层来考虑上面嵌套的循环:动作被执行了1 000 000 000次。如果完成这个动作用时1毫秒,那么运行这个循环的总时间将会超过277小时。
六、 最小化数值错误
关键点:在循环继续条件中使用浮点数可能会导致数值错误。
数值错误涉及浮点数是必然的。这节提供一个如何最小化这种错误的例子。
下面程序清单中的程序是对一个从0.01开始到1.0 的数列中的数求和。这个数列里的数每次递增0.01,如下所示: 0.01 +0.02+0.03+...
sum=0
i = 0.01
while i<= 1.0:
sum += i
i =i+0.01
print("The sum is", sum) #输出49.5
最后结果显示49.5,但是实际上正确的结果应该为50.5。哪个地方错了?在循环的每次迭代中变量i都递增0.01。当循环结束时,i的值稍稍大于1 (而不是真正为1 )。这导致最后一个i值并没有被加到sum上。最基本的问题是浮点数被近似表示了。
为了改正这个错误,可以使用一个整数计数器来确保所有的数字都被加到了sum上。下面是一个新的循环:
sum=0
count = 0
i = 0.01
while count < 100:
sum += i
i = i+0.01
count += 1
print("The sum is", sum)
七、关键字break和continue
关键点:关键字break和continue提供了另一种控制循环的方式。
建议:两个关键字: break 和continue都可以为循环语句提供额外的控制。在某些情况下,使用break和continue可以简化程序设计。然而,如果过度使用或者使用不恰当则会导致程序很难理解和调试。
我们可以在循环中使用关键字break来立即终止循环。continue退出一次迭代而break退出整个循环。示例如下:
八、总结
- 1.两种类型的循环语句:while循环和for循环。
- 2.循环中需要被重复执行的语句被称为循环体。
- 3.循环体的一-次执行被叫做循环的一次迭代。,
- 4.一个无限循环是指循环体的语句无限次被执行。
- 5.在设计一个循环时,你不仅仅要考虑循环控制结构还要考虑循环体。
- 6.while循环首先检查循环继续条件。如果条件为真,则执行循环体;否则,循环终止。
- 7.哨兵值是一个特殊的值,它表明输人值的结束。
- 8.for循环是计数器控制的循环,循环体执行可预见次数遍。
- 9.break和continue两个关键字都可以被用在循环中。
- 10.break关键字立即结束包含这个break的最内层循环。
- 11.continue只终止当前迭代。