for和while,批量处理的利器
上一篇我们学会了让程序做判断——if、elif、else,程序终于有了”脑子”。但你有没有想过,如果要给100个文件重命名,或者把一张表格里所有人的工资都加上500块,难道要写100行几乎一模一样的代码?
当然不用。循环(Loop)就是专门解决”重复干活”这个问题的。
for 循环 —— 流水线上的工人
想象一条工厂流水线。传送带上依次过来10个零件,工人对每个零件做同样的操作:检查、打磨、喷漆。零件一个接一个地来,处理完最后一个,工作结束。
for 循环就是这条流水线:
零件列表 = ["螺丝", "螺母", "垫片", "弹簧"]
for 零件 in 零件列表:
print(f"正在打磨 {零件}...")
print(f"正在喷漆 {零件}...")
print(f"{零件} 处理完毕!n")
输出:
正在打磨 螺丝...
正在喷漆 螺丝...
螺丝 处理完毕!
正在打磨 螺母...
正在喷漆 螺母...
螺母 处理完毕!
...
规律很简单: for 变量 in 集合,循环体会对集合里的每个元素执行一次。变量每次自动变成下一个元素,全部遍历完,循环结束。
range() —— 批量生成数字
有时候我们不需要一个具体列表,只需要”从1到100″这样的数字序列。range() 就是干这个的:
# range(5) 生成 0, 1, 2, 3, 4(注意不包含5)
for i in range(5):
print(i)
# range(起始, 结束, 步长)
for i in range(1, 10, 2):
print(i) # 输出 1, 3, 5, 7, 9
想打印”你好”10遍?
for i in range(10):
print(f"你好!第 {i+1} 遍")
再也不用写10行 print 了。
while 循环 —— 闹钟响到你关掉为止
for 是”数着做”,while 是”做着看”。
想想闹钟。它设在早上7点,只要”没被关掉”这个条件还成立,它就一直响。你伸手按下按钮,条件不满足了,闹钟才停。
import time
倒计时 = 5
while 倒计时 > 0:
print(f"倒计时:{倒计时}")
倒计时 -= 1 # 每次减1,相当于"闹钟被调低一格"
print("时间到!🔔")
输出:
倒计时:5
倒计时:4
倒计时:3
倒计时:2
倒计时:1
时间到!🔔
关键点: while 后面跟一个条件,条件为 True 就继续循环,为 False 就停。一定要在循环体内改变条件,否则闹钟永远关不掉——这就是”死循环”。
break 和 continue —— 循环的紧急控制
流水线上出了次品,你不想处理它,直接跳到下一个——用 continue。
流水线突然起火了,你得立刻停下来——用 break。
# break:找到目标就停
水果 = ["苹果", "香蕉", "榴莲", "西瓜"]
for 水果名 in 水果:
if 水果名 == "榴莲":
print("找到榴莲了!停!")
break
print(f"检查了 {水果名}")
检查了 苹果
检查了 香蕉
找到榴莲了!停!
# continue:跳过不合格的
for i in range(1, 11):
if i % 2 == 0: # 偶数跳过
continue
print(i) # 只打印奇数:1, 3, 5, 7, 9
break 是终止整个循环,continue 是跳过当前这一轮,继续下一轮。
嵌套循环 —— 循环里套循环
循环里面还可以再放循环。外层每走一步,内层就完整走一遍:
for i in range(1, 4):
for j in range(1, 4):
print(f"({i}, {j})", end=" ")
print() # 换行
(1, 1) (1, 2) (1, 3)
(2, 1) (2, 2) (2, 3)
(3, 1) (3, 2) (3, 3)
像什么呢?像日历——外层循环是”月”,内层循环是”日”。每个月都要从1号走到31号。
实战:九九乘法表
学了嵌套循环,来做一个经典练习:
for i in range(1, 10):
for j in range(1, i + 1): # j 只到 i,形成三角形
print(f"{j}×{i}={i*j}", end="t")
print()
输出:
1×1=1
1×2=2 2×2=4
1×3=3 2×3=6 3×3=9
1×4=4 2×4=8 3×4=12 4×4=16
...
1×9=9 2×9=18 3×9=27 4×9=36 5×9=45 6×9=54 7×9=63 8×9=72 9×9=81
range(1, i + 1) 保证内层循环的次数随着外层递增——第一行1个算式,第二行2个,第九行9个。
实战:猜数字游戏(加上循环)
上一篇的猜数字只能猜一次。加上 while,就能一直猜:
import random
答案 = random.randint(1, 100)
次数 = 0
while True: # 无限循环,靠 break 退出
猜测 = int(input("猜一个1-100的数字:"))
次数 += 1
if 猜测 答案:
print("太大了!")
else:
print(f"恭喜你猜对了!用了 {次数} 次。")
break # 猜对了,跳出循环
while True 创建一个”永不停止”的循环,只有 break 能打破它。这是非常常见的模式。
小结
| 概念 | 一句话解释 |
|---|
|——|———–|
for |
把集合里的元素挨个取出来处理 |
|---|---|
while |
条件成立就一直做,直到条件不满足 |
range() |
快速生成数字序列 |
break |
立刻终止整个循环 |
continue |
跳过当前这一轮,继续下一轮 |
| 嵌套循环 | 循环里套循环,外层一步内层跑一圈 |
循环是程序真正”有用”的起点。有了循环,程序才能处理批量数据、实现游戏主循环、监听用户输入。它不是什么高级技巧,而是你写代码时用得最多的东西之一。
下篇预告: 循环让我们能重复执行代码,但同样的代码块如果在程序里出现好几遍,光靠循环还不够——你还需要函数。下一篇我们聊聊怎么把常用逻辑”打包”起来,写一次、到处用。👉 AI编程(七):函数 — 代码的”打包复用术”
发表回复