阅读提示:本文包含 8 个实战案例,建议配合代码编辑器边学边练,预计阅读时间 15 分钟。可以参看我的视频进行学习,喜欢的话,关注,点赞,分享
📌 什么是 While 循环?
while 循环是 Python 中最基本的循环结构之一,只要条件为真,就会一直执行。
while 条件:
# 循环体(条件为True时执行)
🥉 基础篇(3个案例)
案例 1:最简单的计数器 ⏱️
场景:打印 1 到 5 的数字
count = 1
while count <= 5:
print(f"当前数字:{count}")
count += 1# 别忘了自增,否则会无限循环!
print("循环结束!")
输出:
当前数字:1
当前数字:2
当前数字:3
当前数字:4
当前数字:5
循环结束!
💡 关键提醒:count += 1 这行代码至关重要!去掉它会导致死循环。
案例 2:用户输入验证 ✅
场景:要求用户输入正确的密码
password = "python123"
user_input = ""
while user_input != password:
user_input = input("请输入密码:")
if user_input != password:
print("❌ 密码错误,请重试")
print("✅ 登录成功!")
运行效果:
请输入密码:123
❌ 密码错误,请重试
请输入密码:python123
✅ 登录成功!
💡 实用场景:表单验证、权限检查、游戏登录界面等。
案例 3:猜数字游戏 🎲
场景:系统随机生成数字,用户猜测
import random
target = random.randint(1, 100) # 1-100的随机数
guess = 0
attempts = 0
while guess != target:
guess = int(input("猜一个1-100之间的数字:"))
attempts += 1
if guess < target:
print("📉 太小了!")
elif guess > target:
print("📈 太大了!")
else:
print(f"🎉 恭喜你!用了 {attempts} 次猜对了!")
💡 扩展思路:可以加入次数限制,超过3次直接退出。
🥈 进阶篇(3个案例)
案例 4:带条件的无限循环 🔄
场景:菜单系统,直到用户选择退出
whileTrue: # 无限循环
print("\n===== 学生管理系统 =====")
print("1. 查看成绩")
print("2. 添加学生")
print("3. 退出系统")
choice = input("请选择操作(1-3):")
if choice == "1":
print("📊 显示成绩列表...")
elif choice == "2":
print("➕ 添加新学生...")
elif choice == "3":
print("👋 再见!")
break# 跳出循环
else:
print("⚠️ 无效选择,请重新输入")
💡 核心技巧:while True + break 是构建交互式菜单的标准模式。
案例 5:嵌套 While 循环 ⭐⭐
场景:打印九九乘法表
i = 1
while i <= 9:
j = 1
while j <= i: # 内层循环控制列数
print(f"{j}×{i}={i*j}", end="\t")
j += 1
print() # 换行
i += 1
输出:
1×1=1
1×2=2 2×2=4
1×3=3 2×3=6 3×3=9
...(直到9×9)
💡 理解要点:外层控制行,内层控制列,end="\t" 让输出在同一行。
案例 6:遍历列表(While vs For)📋
场景:用 while 循环遍历列表
fruits = ["苹果", "香蕉", "橙子", "葡萄"]
index = 0
while index < len(fruits):
print(f"第 {index+1} 个水果:{fruits[index]}")
index += 1
对比 For 循环(更简洁):
for fruit in fruits:
print(f"水果:{fruit}")
💡 选择建议:遍历已知序列用 for;不确定次数时用 while。
🥇 高阶篇(2个实战案例)
案例 7:文件逐行读取 + 错误处理 📁
场景:读取日志文件,处理异常并统计关键词
defanalyze_log(filename, keyword):
count = 0
line_num = 0
try:
withopen(filename, 'r', encoding='utf-8') as file:
whileTrue:
line = file.readline() # 逐行读取
ifnot line: # 读到文件末尾
break
line_num += 1
if keyword in line:
count += 1
print(f"行 {line_num}: {line.strip()}")
except FileNotFoundError:
print(f"❌ 文件 {filename} 不存在")
return0
print(f"\n📈 统计:共找到 {count} 处 '{keyword}'")
return count
# 使用
# analyze_log("app.log", "ERROR")
💡 高阶技巧:readline() 配合 while 适合处理大文件,不会一次性占用大量内存。
案例 8:多线程爬虫速率控制 🕷️
场景:爬虫请求频率限制(每秒最多3次)
import time
from collections import deque
classRateLimiter:
def__init__(self, max_requests=3, time_window=1):
self.max_requests = max_requests # 最大请求数
self.time_window = time_window # 时间窗口(秒)
self.requests = deque() # 记录请求时间
defallow_request(self):
now = time.time()
# 清理过期请求记录
whileself.requests andself.requests[0] < now - self.time_window:
self.requests.popleft()
# 检查是否超过限制
iflen(self.requests) < self.max_requests:
self.requests.append(now)
returnTrue
else:
# 计算需要等待的时间
wait_time = self.requests[0] + self.time_window - now
print(f"⏳ 速率限制,需等待 {wait_time:.2f} 秒")
time.sleep(wait_time)
returnself.allow_request() # 递归重试
# 使用示例
limiter = RateLimiter(max_requests=3)
urls = ["url1", "url2", "url3", "url4", "url5"]
for url in urls:
limiter.allow_request()
print(f"🌐 正在抓取:{url}")
# 这里放实际的请求代码
💡 应用场景:API 限流、爬虫防封、服务器负载保护。
🎯 常见错误与避坑指南
| | | |
|---|
| 死循环 | while i < 5: print(i) | | |
| 忘记缩进 | while True: print("ok") | | |
| 变量未初始化 | while i < 5: | | |
| 无限递归 | | | |
📝 总结:While 循环使用场景
✅ 适合使用 While:
├── 用户交互式输入(直到输入正确)
├── 不确定循环次数(如猜数字)
├── 无限循环 + break 控制(菜单系统)
├── 逐行处理大文件
└── 需要复杂条件控制的场景
❌ 不适合使用 While:
├── 已知固定次数的遍历(用 for)
└── 简单的列表/字典遍历(用 for)
🚀 课后练习
- 练习1:用 while 实现倒计时功能(从10数到0,每秒打印一次)
- 练习2:实现一个简单的 ATM 机系统(查询余额、取款、存款、退出)
- 练习3
📚 推荐阅读:关注本公众号,回复「python」获取更多教程!
💬 互动话题:你在使用 while 循环时踩过哪些坑?欢迎在评论区留言!