Python while 循环的相关介绍
Python while 循环与 for 循环不同,while 循环会重复执行一系列动作,直到循环条件变为 False。
while 循环
通常,当无法预先确定循环的确切次数时,使用 while 循环。
较简单的 while 循环,语法格式如下:
while <expr>: <statement(s)>
<expr> 是一个布尔表达式。
<statement(s)> 表示要重复执行的代码块,通常称为循环体,用缩进表示。
首先程序会检查 <expr>,如果为 True,则执行循环体。然后再次检查 <expr>,如果仍为 True,则再次执行循环体。这一直持续到 <expr> 为 False,此时程序执行进入循环体之外的*一个语句。
注意:如果一开始条件就不成立,那么循环体将永远不会被执行。
例如,打印 1 到 5 之间的整数:
n = 0 while n < 5: += 1 print(n)
Tips:如果一个变量的值随着每次新的循环迭代而变化,那么这个变量被称为计数器。这里,n 就是一个计数器。
运行程序,会产生以下输出:
1 2 3 4 5
现在,对执行过程进行逐步分解:
较初 n 是 0,当进入 while 语句时,表达式 n < 5 成立,因此循环体执行,先将 n 加 1 到 1,然后打印出 n 的值。
当循环体完成时,程序执行返回到 while 循环顶部,并再次计算表达式,它仍然成立,所以循环体再次执行,并打印 2。
这一直持续到 n 变为 5。此时,当计算表达式时,它不成立,循环因此会终止。
else 子句
与 for 循环相同,在 while 循环中也可以有一个可选的 else 子句。
Tips:从语义上讲,else 子句的工作方式与 for 循环中的完全相同(只有在循环不被 break 语句“破坏”时,才会被执行)。
其语法格式如下:
while <expr>: <statement(s)> else: <statement(s)>
那么,到底在什么情况下,才会在循环中真正地用到 else 子句呢?
较常见的情况是:搜索列表中的一个特定项。如果找到了,使用 break 退出循环,else 子句则用于处理没有找到时的情况:
colors = ['red', 'green', 'blue'] clr = 'orange' while i < len(colors): if colors[i] == clr: # 找到时的处理 break i += 1 else: # 未找到时的处理 print(clr, 'not found')
运行程序,会产生以下输出:
orange not found
注意:循环中的 else 子句不太常见,甚至看起来有点奇怪。但是,如果能为代码增加清晰度,也不必刻意去回避它!
无限循环
在 while 循环中,语句的执行取决于是否满足循环条件。当条件一直成立时,循环将会永远持续下去,这种循环被称为无限循环。
循环陷阱
虽然 while 循环非常强大,但是需要注意一个陷阱:无限循环。
考虑一下这个例子:
while True: print('Have a good day') 很明显,True 永远成立。因此,这会启动一个无限循环。 运行程序,会产生以下输出: Have a good day Have a good day Have a good day ... Traceback (most recent call last): ... KeyboardInterrupt
懊恼了吧!消息会被无休止地打印,直到强制退出(按 Ctrl + C)或世界末日的到来。
打破无限循环
无限循环实际上很常见,但*要确保循环在某个时刻被打破,这样它才不会真正地无限执行下去。
在 Python 中,break 语句是打破无限循环的一种常用方法。
例如,猜测一个人的年龄,直到猜中为止:
# 待猜中的年龄 my_age = 18 while True: num = int(input('Please enter a number : ')) if num == my_age: break
运行程序,会产生以下输出:
Please enter a number : 20 Please enter a number : 25 ... Please enter a number : 30 Please enter a number : 18
这里,我们引入了一个新的内置函数 - input(),它会向用户显示一个提示,并耐心等待内容的输入。
如果输入的数字不是 18,则会一直提示你输入,直到输入 18 为止,这时 break 语句就会被调用,从而摆脱无限循环。
单行 while 循环
与 if 语句一样,可以在一行中指定 while 循环。
如果在循环体中有多个语句,它们可以用分号分隔:
n = 0 while n < 5: n += 1; print(n)
但这只适用于简单语句,不能将两个复合语句组合成一行。
假如,像下面这样:
n = 0 while n < 5: n += 1; if True: print(n)
就会报错:SyntaxError: invalid syntax
注意:PEP 8 并不鼓励在一行上使用多个语句,所以即使语法上没有任何问题,也应该尽量避免。
更多培训课程,学习资讯,课程优惠等学校信息,请进入 郑州金水区java培训郑州上街区C语言培训 网站详细了解,免费咨询电话:400-998-6158