while循环
中等0条件成立就重复:while 循环详解
你有没有遇到过这样的情况:不知道要重复多少次,但知道“什么时候停下”?比如:
- 你存零花钱,每天存5元,直到攒够200元买滑板。
- 妈妈让你“一直写作业,直到写完为止”——你也不知道要写多久,但一旦写完就停。
- 玩猜数字游戏,你一次一次地猜,直到猜中为止。
这些场景里,重复的次数不是固定的,而是取决于某个条件是否还成立。Python 里的 while 循环 就是专门解决这类问题的:只要条件为真,就一直执行循环体里的代码;条件变成假了,就停下来。
while 循环长什么样?
先看最基本的写法:
while 条件: # 条件可以是任何结果为“真”或“假”的表达式
要重复做的事 # 缩进的代码就是循环体
它就像马路上的一盏“条件红绿灯”:
- 当条件为真(比如红灯亮)→ 你必须继续等待(执行循环体)。
- 当条件为假(绿灯亮)→ 你可以走了(循环结束)。
生活中的 while 循环
例子1:存零花钱买滑板
假设你每天往储蓄罐里放5元,想知道什么时候能攒够200元。
total = 0 # 总金额,初始0元
goal = 200 # 目标金额,200元
day = 0 # 天数计数器
while total < goal: # 只要总金额小于目标,就继续存
total = total + 5 # 每天存5元
day = day + 1 # 天数加1
print(f"第{day}天,已存{total}元")
print(f"攒够了!花了{day}天。")
运行输出:
第1天,已存5元
第2天,已存10元
...
第40天,已存200元
攒够了!花了40天。
这里循环的条件是 total < goal,只要这个条件为真,就继续存钱。一旦 total 变成 200,条件变成假,循环停止。
例子2:排队等奶茶
你去奶茶店排队,前面还有 n 个人。你每等一个人就往前走一步,直到前面没人。
people_ahead = 5 # 前面有5个人
position = 1 # 你站在第1位,后面还有4个人
while people_ahead > 0: # 只要前面还有人,就继续等
print(f"还有{people_ahead}个人在我前面,继续等...")
people_ahead = people_ahead - 1 # 走一个
position = position + 1 # 你位置往前
# 通常还要等一会儿,但这里用减1模拟
print("轮到我了!点单!")
和 for 循环的区别
| 特点 | for 循环 | while 循环 |
|---|---|---|
| 适用场景 | 知道要循环多少次(比如从1数到10) | 不知道次数,只知道什么时候停 |
| 典型例子 | 遍历列表、固定次数的计算 | 猜数字、直到用户输入正确 |
| 条件 | 基于一个序列(如range) | 基于一个布尔表达式 |
简单记忆:for 循环是“做X次”,while 循环是“做到某条件满足为止”。
经典例子:猜数字游戏(保留原文)
猜数字是 while 循环最经典的应用——你不知道要猜几次,直到猜中为止。
import random # 导入随机模块
secret = random.randint(1, 100) # 生成1~100之间的随机整数
guess = 0 # 初始化猜测值,和secret不同即可
while guess != secret: # 当猜测不等于秘密数时,继续猜
guess = int(input("猜一个1-100之间的数:"))
if guess < secret:
print("猜小了")
elif guess > secret:
print("猜大了")
print("恭喜你猜对了!") # 一旦条件变成假(guess == secret),执行这句
关键点:
while guess != secret:只要“猜测不等于秘密”这个条件成立,就重复执行猜的动作。- 每次循环都会改变
guess的值(通过输入),这样条件才有可能变成假。 - 如果一直不改变条件(比如永远不输入、或者代码里漏了改变变量的语句),就会变成死循环。
容易犯的几个错误(中小学生常见)
错误1:忘记改变条件 → 死循环
count = 1
while count <= 5:
print("我还在循环里")
# 忘了写 count = count + 1
这个程序会永远打印“我还在循环里”,因为 count 永远是1,条件永远为真。必须每次循环中至少有一行代码能让条件最终变成假,比如让变量递增或递减。
错误2:条件写反
# 想循环直到用户输入 'yes'
answer = ""
while answer != "yes": # 这个正确
answer = input("请输入 yes 结束: ")
# 但如果写成 while answer == "yes": 那就永远不会执行循环体,
# 因为一开始 answer 是空字符串,不等于 yes。
错误3:死循环中忘记写 input 的冒号?不会,但要注意缩进
while True:
print("我缩进错了") # 没有缩进,会报错
while 循环体必须缩进,通常用4个空格。
进阶技巧:用 break 提前跳出循环
有时你想立即退出循环,不管条件是否还成立。可以用 break。
比如猜数字游戏中,可以加一个“放弃”选项:
import random
secret = random.randint(1, 100)
while True: # 条件永远为真,但用break退出
guess = input("猜一个数(输入q退出):")
if guess == 'q':
print("放弃啦,正确答案是", secret)
break # 立即跳出循环
guess = int(guess)
if guess < secret:
print("小了")
elif guess > secret:
print("大了")
else:
print("猜对了!")
break # 猜对也跳出
注意:break 只跳出它所在的那一层循环。如果在嵌套循环里,只能跳出最内层。
完整示例:计算圆周率(蒙特卡洛方法)趣味版
(高级一点,但能展示 while 的威力)
我们可以在一个正方形内随机丢“豆子”,落在四分之一圆内的豆子越多,就越接近 π/4。我们可以用 while 循环不断丢,直到达到一定精度。
import random
inside = 0 # 圆内的点数
total = 0 # 总点数
tries = 0 # 投掷次数
target_tries = 100000 # 目标投掷次数
while total < target_tries: # 注意这里是 total < 目标,条件是次数不够
x = random.random() # 0~1之间的随机数
y = random.random()
total = total + 1
if x*x + y*y <= 1: # 判断是否在四分之一圆内
inside = inside + 1
pi_approx = 4 * inside / total
print(f"投掷{total}次后估算π≈{pi_approx}")
这里 while 的条件是 total < target_tries,一旦达到10万次就停止。当然也可以改成“直到精度足够”,但需要更复杂的判断。
总结与相关指引
- while 循环:条件成立就一直做,适用于未知次数的重复。
- 一定要在循环体里改变影响条件的变量,否则会死循环。
- 可以使用
break提前结束循环。 - 可以用
continue跳过本次循环后面的代码,回到条件判断(但初学可以先用 break)。
学完 while 循环后,建议继续学习:
- [for 循环](固定次数循环)
- [break 和 continue](循环控制)
- [布尔表达式](条件判断的基础)
- [嵌套循环](循环里面套循环)
现在你可以用 while 循环写出更多好玩的程序了,比如:不断询问密码直到正确、计算指数增长、模拟游戏生命值变化等。记住:只要条件是“直到某件事发生”,就用 while!
例题精讲
在Python中,while循环的条件表达式可以是什么?
以下代码运行后,输出什么? i=0 while i<5: if i==3: break print(i) i+=1
在Python中,while循环体内可以包含if语句。正确还是错误?
以下代码计算n的阶乘,请填空。
n = 5
result = 1
while n > 0:
___
n -= 1
print(result)以下代码不断读入整数并累加,直到总和大于等于100时停止,请填空。
total = 0
num = int(input())
while total < 100:
total += num
___
print(total)