3.1 while 循环
循环(loop)用于重复执行一段代码。while 循环会先判断条件(condition),只要条件为 True,就执行循环体;循环体执行完后,再回到条件处重新判断。
while 的基本结构
一个稳定的 while 循环通常包含三件事:
- 初值:循环开始前,先准备循环变量。
- 条件:每一轮开始前,判断是否继续循环。
- 更新:每一轮循环中,让循环变量发生变化。
python
i = 1 # 初始值
while i <= 5: # 条件
print("循环中:i =", i)
i += 1 # 更新
print("循环结束后:i =", i)运行结果:
text
循环中:i = 1
循环中:i = 2
循环中:i = 3
循环中:i = 4
循环中:i = 5
循环结束后:i = 6while 的特点是先判断、再执行。因此循环体可能执行多次,也可能一次都不执行。
正在加载概念检查...
累加与平均值
循环经常和累加变量一起使用。下面的程序读取 5 个人的身高,并计算平均值。
python
NUM_PEOPLE = 5
total = 0
i = 1
while i <= NUM_PEOPLE:
height = float(input("请输入第 %d 个人的身高:" % i))
total += height
i += 1
average = total / NUM_PEOPLE
print("平均身高:%.2f" % average)一次可能的运行过程:
text
请输入第 1 个人的身高:160.8
请输入第 2 个人的身高:175.2
请输入第 3 个人的身高:171.2
请输入第 4 个人的身高:181.3
请输入第 5 个人的身高:164
平均身高:170.50total += height 的意思是把本次输入的身高加到累计总和里。循环结束后,total 保存的是所有身高之和。
正在加载交互实验...
正在加载概念检查...
正在加载本节练习...
循环直到条件改变
while 适合处理“循环次数不一定一开始就知道”的任务。例如,计算一个整数有多少位。
python
num = abs(int(input("请输入一个整数:")))
if num == 0:
digits = 1
else:
digits = 0
while num != 0:
num //= 10
digits += 1
print("位数:%d" % digits)一次可能的运行结果:
text
请输入一个整数:123
位数:3这里额外处理了 0。如果直接写 while num != 0,输入 0 时循环一次也不会执行,位数会被错误地算成 0。
正在加载交互实验...
正在加载概念检查...
正在加载本节练习...
猜数字游戏
还有一种常见场景是:程序不知道用户需要尝试多少次。猜数字游戏就是一个典型例子。程序先随机生成答案,然后不断读取用户输入;如果猜大了就提示“太大”,猜小了就提示“太小”,猜中后用 break 结束循环。
注意
random 是随机数模块。这里第一次使用模块:import random 表示导入模块,random.randint(1, 100) 会生成 1 到 100 之间的随机整数。模块会在第 6 章系统介绍。python
import random
answer = random.randint(1, 100)
cnt = 0
while True:
num = int(input("请猜一个数字:"))
cnt += 1
if num > answer:
print("太大")
elif num < answer:
print("太小")
else:
break
print("猜对了!你一共猜了 %d 次。" % cnt)一次可能的运行过程:
text
请猜一个数字:50
太大
请猜一个数字:25
太小
请猜一个数字:37
太小
请猜一个数字:43
太大
请猜一个数字:40
太大
请猜一个数字:38
太小
请猜一个数字:39
猜对了!你一共猜了 7 次。这里的 while True 会制造一个看似“永远为 True”的无限循环(infinite loop)。它不会自动结束,必须依靠循环体内部的 break 在猜中时主动跳出。
正在加载交互实验...