第4章 分支与循环:控制程序的“交通灯”
写代码就像指挥交通。数据是车流,而分支和循环就是路口的红绿灯和环形匝道。没有它们,程序只能一条路走到黑——从第一行跑到最后一行,毫无波澜。今天我们就来聊聊,怎么让代码“动脑子”。
4.1 if判断语句:最简单的路口
if 语句,说白了就是“如果……就……”。这是程序做决策的最小单元。我个人习惯把 if 想象成一个安检员:条件成立,放行;不成立,拦下。
age = 18
if age >= 18:
print("你可以考驾照了")
这里有个细节:Python 用缩进表示代码块。我见过不少新手在 if 后面忘了冒号,或者缩进不一致,结果程序直接报错。嗯,这几乎是每个初学者都会踩的坑。
4.2 运算符:判断的“尺子”
if 后面跟的是条件,条件离不开运算符。常用的有这几类:
| 类型 | 运算符 | 示例 |
|---|---|---|
| 比较运算符 | ==, !=, >, <, >=, <= | 5 > 3 → True |
| 逻辑运算符 | and, or, not | True and False → False |
| 成员运算符 | in, not in | "a" in "abc" → True |
你想想看,实际项目中很少只用单个条件。比如判断用户是否有权限:既要登录,又要角色是管理员。这时候 and 就派上用场了。
is_logged_in = True
role = "admin"
if is_logged_in and role == "admin":
print("欢迎进入后台")
if 18 <= age 不如 if age >= 18 读起来自然。这是代码可读性的细节,我一般会注意。
4.3 if-else 语句:两条路
if 只管“成立”的情况,那“不成立”呢?用 else。就像十字路口,绿灯走,红灯停,没有中间态。
score = 55
if score >= 60:
print("及格了")
else:
print("没及格,再努力")
如果条件不止两个,就用 elif。elif 是 else if 的缩写,Python 里没有 switch-case,全靠 elif 链搞定多分支。
score = 85
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
else:
grade = "D"
print(f"你的等级是 {grade}")
我在项目中遇到过一种情况:多个 elif 的顺序搞反了,导致永远进不到后面的分支。比如先判断 score >= 80,再判断 score >= 90,那 95 分也会被归到 B 级。顺序很重要,切记。
4.4 while 循环:重复直到条件不满足
while 循环就像“一直做某事,直到某个条件不再成立”。它适合你不知道具体要循环多少次,但知道什么时候停的场景。
count = 0
while count < 5:
print(f"第 {count+1} 次循环")
count += 1
这里有个经典陷阱:死循环。如果你忘了写 count += 1,程序就会永远打印下去。我曾经在写网络重试逻辑时,忘记在成功时跳出循环,结果日志刷了十几万行。嗯,从那以后我写 while 都会先检查退出条件。
4.5 for 循环:遍历一切
for 循环是 Python 里最常用的循环。它用来遍历一个可迭代对象,比如列表、字符串、字典。说白了,就是“挨个处理”。
fruits = ["苹果", "香蕉", "橘子"]
for fruit in fruits:
print(f"我喜欢吃 {fruit}")
for 循环配合 range() 函数,可以生成数字序列:
for i in range(5): # 0 到 4
print(i)
range(5) 生成 0,1,2,3,4,不包含 5。这是左闭右开区间。我刚开始学的时候总记混,后来就记住:range(n) 就是“从 0 到 n-1”。
for key, value in dict.items() 可以同时拿到键和值,比单独取 key 再查 value 效率高。
4.6 break:强行刹车
break 用来提前结束循环。不管循环条件是否还成立,遇到 break 就立刻跳出。
for i in range(10):
if i == 5:
break
print(i)
# 输出:0 1 2 3 4
我在项目中常用 break 做“找到就停”的逻辑。比如搜索列表里第一个满足条件的元素,找到了就没必要继续遍历了,节省时间。
4.7 continue:跳过本次
continue 和 break 不同。break 是跳出整个循环,continue 只是跳过当前这一次,继续下一次。
for i in range(5):
if i == 2:
continue
print(i)
# 输出:0 1 3 4
你想想看,这就像排队时有人临时离开,后面的人补上,队伍继续前进。continue 不会终止循环,只是“跳过当前元素”。
4.8 综合示例:猜数字游戏
把今天学的串起来,写个小游戏:
import random
target = random.randint(1, 100)
guess = None
while guess != target:
guess = int(input("猜一个 1-100 之间的数字:"))
if guess < target:
print("小了")
elif guess > target:
print("大了")
else:
print("猜对了!")
break
这个例子用到了 while 循环、if-elif-else、break。我在教新人时经常拿这个做练习,因为它覆盖了分支和循环的核心用法,而且有即时反馈,学起来不枯燥。
4.9 避坑指南
- 忘记冒号:if、while、for 后面都要加冒号,漏了会报语法错误。
- 缩进混乱:同一代码块必须用相同缩进,建议全程用 4 个空格。
- 死循环:while 循环一定要确保条件能变为 False,或者用 break 控制退出。
- 循环内修改迭代对象:遍历列表时不要增删元素,否则会出诡异 bug。我一般会复制一份再操作。
好了,分支和循环就聊到这儿。说白了,它们就是让代码“活起来”的关键。没有分支,程序就是死脑筋;没有循环,重复劳动能把你累死。下一章我们会聊函数,把代码打包成可复用的“积木”。到时候你会发现,有了分支和循环打底,写函数会顺手很多。