分支和循环:控制程序走向

写代码说白了就是让机器按你的思路一步步走。但很多时候,程序需要「看情况」做不同的事,或者「重复」做同一件事。我今天就带你看看 Python 里最常用的控制结构——分支和循环。这也是我刚开始学编程时觉得最贴近「思维」的部分。

其实你想想看,现实中的决策(如果下雨就带伞,否则就不带)和重复(每天刷一次牙),本质上就是 if 和 while。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
我曾经踩过一个坑:在 Python 里判断字符串是否为空,不能写 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 一般只会出现在 if 条件里。记住:break 跳出当前整个循环,continue 只是跳过这一次。我曾经在多层循环里用 break,发现它只跳出内层循环——想要跳出外层需要用标识变量或函数封装。

下面这张图把分支和循环的整体控制流串起来了,你可以跟着箭头走一遍:

分支与循环控制流 开始 条件成立? True 执行代码块 False else 分支(可选) 循环条件? False 退出循环 True 循环体(含break/continue) 循环继续 break break 直接跳出 break:跳出整个循环 continue:跳过本次,进入下一轮
值得注意的是,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 计数器。
一句话总结:分支帮你在选择中走对路,循环帮你重复干活不费劲。理解清楚 if、while、for 的协作方式,你已经掌握了 Python 逻辑控制的核心。