分支和循环:控制程序走向
写代码说白了就是让机器按你的思路一步步走。但很多时候,程序需要「看情况」做不同的事,或者「重复」做同一件事。我今天就带你看看 Python 里最常用的控制结构——分支和循环。这也是我刚开始学编程时觉得最贴近「思维」的部分。
4.1 条件判断:if 语句
if 是最简单的分支。它的逻辑就是:如果某个条件成立,就执行一段代码。条件通常由运算符构成,比如比较大小、判断是否相等。
基本语法
age = 18
if age >= 18:
print("你已经成年了")
注意后面的冒号 : 和缩进,这个缩进决定了哪些代码属于 if 内部。我刚开始写的时候经常漏冒号,报错了才知道。
运算符先捋清楚
Python 的运算符分为比较运算符和逻辑运算符,我列个表方便你对照:
| 类型 | 运算符 | 含义 | 示例 |
|---|---|---|---|
| 比较 | == | 等于 | a == b |
| 比较 | != | 不等于 | a != b |
| 比较 | > | 大于 | a > b |
| 比较 | < | 小于 | a < b |
| 比较 | >= | 大于等于 | a >= b |
| 比较 | <= | 小于等于 | a <= b |
| 逻辑 | and | 与 | a > 0 and b < 10 |
| 逻辑 | or | 或 | a == 0 or b == 0 |
| 逻辑 | not | 非 | not flag |
if s == None,应该写 if not s。空字符串、空列表、0 在条件判断里都相当于 False,这点和别的语言不太一样。
4.2 双向选择:if-else 语句
一条 if 只能做「成立就执行,不成立就跳过」。但现实里经常有两条路:比如用户登录成功跳首页,失败显示错误。这时候就用 if-else。
score = 85
if score >= 60:
print("及格了")
else:
print("不及格,再努力")
如果还需要更多分支(比如优秀、良好、及格、不及格),就用 if-elif-else。每个分支依次检查,碰到第一个成立的就执行,然后跳出整块。
if score >= 90:
rank = "优秀"
elif score >= 80:
rank = "良好"
elif score >= 60:
rank = "及格"
else:
rank = "不及格"
print(rank)
我个人习惯把最严格的条件放在最前面,因为 Python 按顺序匹配。如果你把 score >= 60 放在第一行,那 95 分也会被归为「及格」——嗯,这是个很容易犯的逻辑顺序错误。
4.3 循环:while 和 for
循环解决重复问题。我做过一个日志分析工具,需要读取 10 万行文本逐行处理——靠手写是不可能的,必须用循环。
while 循环:直到条件不满足
while 后面跟一个条件,只要条件为 True 就一直执行。如果条件永远为 True,那就死循环了(Ctrl+C 可以打断)。
count = 0
while count < 5:
print("第", count, "次")
count += 1
你能看到我们手动更新 count,否则它永远小于 5。我曾在项目里忘了写自增语句,结果服务器 CPU 飙到 100%,后来加了个超时保护才解决。
for 循环:遍历序列
for 更适合遍历一个范围或一个集合。最常用的是 range() 生成等差数列。
for i in range(5): # 0,1,2,3,4
print(i)
for i in range(1, 5): # 1,2,3,4
print(i)
for i in range(0, 10, 2): # 0,2,4,6,8
print(i)
遍历列表更是家常便饭:
names = ["小明", "小红", "小刚"]
for name in names:
print("你好", name)
break 和 continue:控制循环的阀门
正常循环会一直走到结束或条件不成立。但有时候我们需要提前终止或跳过某次。
break:立刻跳出整个循环,不再执行剩余迭代。continue:跳过本次循环剩下的代码,直接进入下一次迭代。
# 用 break 找到第一个偶数就停
for num in [1, 3, 5, 6, 7, 9]:
if num % 2 == 0:
print("找到偶数", num)
break
# 用 continue 跳过 3 的倍数
for i in range(1, 11):
if i % 3 == 0:
continue
print(i, end=" ") # 输出: 1 2 4 5 7 8 10
下面这张图把分支和循环的整体控制流串起来了,你可以跟着箭头走一遍:
break 和 continue 只对当前最内层的循环生效。如果你在一个 for 里面嵌套了另一个 for,里面的 break 只能跳出内层,外层照样跑。我遇到过一个 bug,就是嵌套循环里 break 没起到预期效果,后来我把内层逻辑单独拎成一个函数才解决。
4.4 综合示例:猜数字小游戏
下面是我写的一个小 demo,用到了 if-elif-else、while、break。你可以跑一下试试。
import random
target = random.randint(1, 100)
print("猜一个 1 到 100 之间的数字")
while True:
guess = int(input("请输入你的猜测: "))
if guess < target:
print("小了")
elif guess > target:
print("大了")
else:
print("恭喜,猜对了!")
break
这个游戏里,while True 是个死循环,唯一退出的方式就是猜对后执行 break。我之前做类似的问答机器人时,也常用这种「检验-退出」模式,稳定且直观。
4.5 避坑指南
- 缩进错误:Python 用缩进定义代码块,混用 Tab 和空格会造成莫名其妙的语法错误。我建议统一用 4 个空格。
- 条件忘了写冒号:if / for / while 后面必须跟冒号,漏了会报语法错误。
- 死循环忘写自增:while 循环里如果改变了条件变量,一定要确保循环能终止。实在不行就在循环体加一个 max_iter 计数器。