一、什么是while循环?
while循环是Python中的一种条件循环,只要条件为真,就会重复执行一段代码块。就像反复检查某个条件,满足就一直做,直到条件不再满足。
count = 1while count <= 5:print(f"第{count}次循环") count += 1
二、while循环的基本语法
while 条件: 循环体(要重复执行的代码) [循环变量更新]
语法要点:
- • 循环体内一般需要改变条件中涉及的变量,否则可能变成无限循环。
- • 当条件变为
False 时,循环结束,程序继续执行后面的代码。
三、while循环的执行流程
可以用流程图表示:
┌─────┐ │ 条件 │<────┐ └──┬──┘ │ │ │ 真 ┌─┴─┐ 假 │ ▼ │ 执行循环体─────┘ │ ▼ 更新循环变量 │ └─────────┘ (回到条件判断)
四、简单示例
示例1:打印1到5
i = 1while i <= 5:print(i) i += 1# 输出:1 2 3 4 5
示例2:计算1到100的和
i = 1total = 0while i <= 100: total += i i += 1print(f"1到100的和:{total}")
示例3:倒计时
count = 10while count > 0:print(count) count -= 1print("发射!")
五、循环变量更新
循环体内必须包含能改变条件结果的语句,否则条件一直为真,形成无限循环。
# 无限循环示例(千万别运行)whileTrue:print("停不下来了...")
要避免无限循环,确保循环变量朝着条件不成立的方向变化。
六、break语句——提前跳出循环
break 用于立即终止当前循环,不再执行循环体内剩下的代码,也不继续判断条件。
i = 1while i <= 10:if i == 5:break# 当i等于5时跳出循环print(i) i += 1# 输出:1 2 3 4
应用场景: 在满足某个条件时提前结束循环,例如搜索到目标后停止。
七、continue语句——跳过本次循环
continue 用于跳过本次循环剩余的代码,直接进入下一次条件判断。
i = 0while i < 5: i += 1if i == 3:continue# 跳过打印3print(i)# 输出:1 2 4 5
注意: 使用 continue 时要小心循环变量的更新位置,避免造成无限循环。
八、while-else 结构
Python 的 while 循环可以带一个 else 子句。else 中的代码在循环正常结束(即条件变为假)后执行,如果循环被 break 终止,则 else 不会执行。
i = 1while i <= 5:print(i) i += 1else:print("循环正常结束")# 输出:# 1 2 3 4 5# 循环正常结束
如果循环被 break:
i = 1while i <= 5:if i == 3:breakprint(i) i += 1else:print("循环正常结束") # 不会执行# 输出:1 2
应用场景: 可以用来检查循环是否提前退出,例如搜索失败时的处理。
九、while循环的常见应用
9.1 数字累加/累乘
# 求 n 的阶乘n = int(input("请输入n:"))result = 1i = 1while i <= n: result *= i i += 1print(f"{n}! = {result}")
9.2 输入验证
反复要求用户输入,直到输入合法为止。
age = int(input("请输入年龄:"))while age < 0or age > 150:print("年龄无效,请重新输入") age = int(input("请输入年龄:"))print(f"你的年龄是:{age}")
9.3 遍历列表(不常用,通常用for)
fruits = ["苹果", "香蕉", "橙子"]i = 0while i < len(fruits):print(fruits[i]) i += 1
9.4 猜数字游戏
import randomsecret = random.randint(1, 100)guess = Nonewhile guess != secret: guess = int(input("猜一个1-100的数字:"))if guess < secret:print("猜小了")elif guess > secret:print("猜大了")print("恭喜,猜对了!")
9.5 处理用户选择(菜单循环)
choice = ''while choice != '0':print("\n1. 功能一")print("2. 功能二")print("0. 退出") choice = input("请选择:")if choice == '1':print("执行功能一")elif choice == '2':print("执行功能二")elif choice == '0':print("程序结束")else:print("无效选择")
十、无限循环与退出条件
有时我们需要无限循环,直到用户主动退出或某个事件发生,可以用 while True 配合 break。
whileTrue: cmd = input("请输入命令(输入quit退出):")if cmd == 'quit':breakprint(f"执行命令:{cmd}")
优点: 结构清晰,退出条件明确。
十一、while循环的嵌套
一个 while 循环内部可以包含另一个 while 循环,称为嵌套循环。
# 打印九九乘法表i = 1while i <= 9: j = 1while j <= i:print(f"{j}×{i}={i*j}", end="\t") j += 1print() # 换行 i += 1
注意: 嵌套循环时,要确保内外循环的循环变量各自更新,避免相互干扰。
十二、常见错误与注意事项
12.1 忘记更新循环变量 → 无限循环
i = 1while i <= 5:print(i)# 忘记 i += 1
12.2 条件写反或逻辑错误
while i > 5: # 如果i初始为1,永远不进入循环print(i)
12.3 在continue前忘记更新变量 → 无限循环
i = 1while i <= 5:if i == 3:continue# 跳过了i+=1,i一直为3,无限循环print(i) i += 1
解决: 将更新放在continue之前,或用其他方式保证变量更新。
12.4 循环条件永远为真(且无break) → 无限循环
while1: # 1永远为真print("无限循环")
12.5 死循环导致程序无响应
如果程序进入死循环,可以按 Ctrl+C 强制终止。
十三、while循环 vs for循环
| | |
| | |
| while 条件: | for 变量 in 可迭代对象: |
| | |
| | |
选择原则:
十四、实战案例
案例1:银行取款机模拟
balance = 10000whileTrue:print("\n1. 查询余额")print("2. 取款")print("3. 存款")print("0. 退出") choice = input("请选择:")if choice == '1':print(f"当前余额:{balance}")elif choice == '2': amount = float(input("取款金额:"))if amount <= 0:print("金额必须大于0")elif amount > balance:print("余额不足")else: balance -= amountprint(f"取款成功,剩余余额:{balance}")elif choice == '3': amount = float(input("存款金额:"))if amount <= 0:print("金额必须大于0")else: balance += amountprint(f"存款成功,当前余额:{balance}")elif choice == '0':print("谢谢使用,再见!")breakelse:print("无效选择")
案例2:猜数字游戏(带次数限制)
import randomsecret = random.randint(1, 100)attempts = 0max_attempts = 7while attempts < max_attempts: guess = int(input(f"还剩{max_attempts - attempts}次机会,猜数字:")) attempts += 1if guess == secret:print(f"恭喜!猜对了,用了{attempts}次")breakelif guess < secret:print("猜小了")else:print("猜大了")else:print(f"机会用完了,答案是{secret}")
这里用了 while-else 在循环正常结束(即尝试完所有次数)时给出提示。
案例3:用户登录(限制次数)
correct_username = "admin"correct_password = "123456"attempts = 0max_attempts = 3while attempts < max_attempts: username = input("用户名:") password = input("密码:") attempts += 1if username == correct_username and password == correct_password:print("登录成功")breakelse:print(f"用户名或密码错误,还剩{max_attempts - attempts}次机会")else:print("尝试次数过多,账户已锁定")
案例4:打印图案(菱形)
n = 5# 行数i = 1while i <= n:# 打印空格 j = 1while j <= n - i:print(" ", end="") j += 1# 打印星号 j = 1while j <= 2 * i - 1:print("*", end="") j += 1print() i += 1
十五、总结
- • 必须确保循环条件最终会变为假,否则形成无限循环。
- •
break 立即退出循环,continue 跳过本次循环。 - •
while-else 在循环正常结束时执行 else 块。 - • 常用于次数不确定的循环、输入验证、菜单循环等。
记住: 写 while 循环时,心里默念“我是否让条件最终能变成假?” 这样才能写出安全可靠的循环。