AI编程(六):循环 — 让程序重复干活

作者:

for和while,批量处理的利器


上一篇我们学会了让程序做判断——ifelifelse,程序终于有了”脑子”。但你有没有想过,如果要给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编程(七):函数 — 代码的”打包复用术”

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注