4. 分支和循环:控制程序的“大脑”

写程序说白了就是告诉计算机「什么时候做什么事」。而分支和循环,就是实现这个逻辑的核心工具。我个人习惯把分支理解成「岔路口」,循环理解成「绕圈跑」。今天咱们就把这两样东西彻底搞明白。

4.1 if 判断语句:让程序学会“看情况”

程序默认是顺序执行的——从上往下,一行接一行。但现实世界哪有这么简单?比如:如果用户是VIP,就显示VIP专享价;否则显示普通价。这时候就需要 if 了。

age = 18
if age >= 18:
    print("你已经成年了,可以考驾照。")

注意看,if 后面跟一个条件表达式,条件为 True 就执行缩进的代码块。缩进在Python里是硬性要求,不是装饰。我见过不少新手因为缩进不对,代码跑出莫名其妙的结果。

⚠️ 常见坑: 条件后面别忘了冒号 :。漏掉冒号,Python会直接报语法错误。

4.2 运算符:判断的“工具包”

条件判断离不开运算符。我把常用的运算符分成三类,用表格列出来,方便你对照着看。

类型 运算符 含义 示例
比较运算符 == 等于 5 == 5 → True
!= 不等于 5 != 3 → True
> / < 大于 / 小于 7 > 3 → True
>= / <= 大于等于 / 小于等于 4 <= 4 → True
逻辑运算符 and 并且(两边都真才真) True and False → False
or 或者(一边真就真) True or False → True
not 取反 not True → False
成员运算符 in 是否在容器里 "a" in "abc" → True
not in 是否不在容器里 "x" not in "abc" → True

这里有个小经验:判断字符串是否相等时,我建议先把两边的空格去掉(用 .strip()),否则一个多余空格就能让条件失效。我曾经排查过一个线上bug,查了半天,最后发现是用户输入末尾多了个空格。

4.3 if-else 语句:二选一的“岔路口”

只有一个 if 只能处理「满足条件做什么」。但现实往往是:满足条件做A,不满足做B。这时候 if-else 就派上用场了。

score = 85
if score >= 60:
    print("恭喜,及格了!")
else:
    print("别灰心,下次加油。")

如果条件不止两个呢?比如成绩分A、B、C、D、F五档。那就用 if-elif-else:

score = 88
if score >= 90:
    grade = "A"
elif score >= 80:
    grade = "B"
elif score >= 70:
    grade = "C"
elif score >= 60:
    grade = "D"
else:
    grade = "F"
print(f"你的等级是:{grade}")
💡 小技巧: elif 是「else if」的缩写。Python没有 switch 语句(3.10之前),所以多分支判断全靠 if-elif-else 搞定。

4.4 while 循环:不知道跑多少圈?用 while

什么时候用 while?当你不知道要循环多少次,只知道「只要条件成立就一直做」的时候。比如:只要用户输入的不是“quit”,就一直问下去。

command = ""
while command != "quit":
    command = input("请输入指令(输入quit退出):")
    print(f"你输入了:{command}")

这里有个经典陷阱:死循环。如果循环条件永远为 True,程序就会一直跑下去,直到你手动终止。我刚开始学的时候,写过一个 while True: 忘记加 break,结果控制台疯狂输出,差点把电脑搞卡。

⚠️ 避坑指南: 写 while 循环时,一定要确保循环体内有改变条件的机会,或者有 break 出口。否则就是死循环。

4.5 for 循环:遍历的“瑞士军刀”

for 循环在Python里用得比 while 多得多。它专门用来遍历一个可迭代对象(列表、字符串、字典、range等)。说白了,就是「把里面的东西挨个拿出来用」。

# 遍历列表
fruits = ["苹果", "香蕉", "橘子"]
for fruit in fruits:
    print(f"我喜欢吃{fruit}")

# 遍历字符串
for char in "Python":
    print(char)

# 配合 range() 生成数字序列
for i in range(5):  # 0,1,2,3,4
    print(i)

range(start, stop, step) 是 for 循环的好搭档。比如你想打印1到10之间的偶数:

for i in range(2, 11, 2):
    print(i)

我个人习惯在需要索引的时候用 enumerate(),它能同时拿到索引和值:

for index, fruit in enumerate(fruits):
    print(f"第{index+1}个水果是{fruit}")

4.6 break 和 continue:循环的“刹车”与“跳过”

循环不是只能从头跑到尾。有时候需要提前终止,有时候需要跳过某一次。这时候 break 和 continue 就登场了。

  • break:立即跳出整个循环。后面的循环次数都不执行了。
  • continue:跳过当前这一次,继续下一次循环。
# break 示例:找到第一个偶数就停
numbers = [1, 3, 5, 8, 9, 10]
for num in numbers:
    if num % 2 == 0:
        print(f"找到第一个偶数:{num}")
        break

# continue 示例:跳过所有奇数
for num in range(1, 11):
    if num % 2 != 0:
        continue
    print(num)  # 只打印偶数
🎯 核心区别: break 是「不干了,走人」;continue 是「这次算了,下次继续」。我在处理数据清洗时经常用 continue 跳过无效数据行,用 break 在找到目标后提前结束遍历,能省不少时间。

4.7 知识体系总览

下面这张图把本章的核心知识点串起来了。你可以把它当成一张「思维导图」,写代码时对照着看。

分支与循环知识体系 控制流程 分支结构 循环结构 if 判断 if-else if-elif-else while 循环 for 循环 break continue 💡 核心原则 分支解决「选哪条路」,循环解决「重复做」

4.8 实战:猜数字小游戏

把今天学的知识串起来,写一个简单的猜数字游戏。程序随机生成一个1-100之间的数,用户猜,程序提示「大了」或「小了」,直到猜中为止。

import random

target = random.randint(1, 100)
guess = None
attempts = 0

while guess != target:
    try:
        guess = int(input("猜一个1-100之间的数字:"))
        attempts += 1
        if guess < target:
            print("小了,再大一点。")
        elif guess > target:
            print("大了,再小一点。")
        else:
            print(f"🎉 恭喜!猜中了!你用了{attempts}次。")
    except ValueError:
        print("请输入有效的数字!")
        continue

这个例子用到了 while 循环、if-elif-else 分支、continue 跳过无效输入,以及 break(虽然这里没用显式break,但猜中后条件变为False,循环自然结束)。

💡 扩展思考: 如果想让游戏更友好,可以加一个「最多猜10次」的限制,猜超了自动结束。试试用 break 实现这个功能。

好了,分支和循环的核心内容就这些。说白了,它们就是让程序「有脑子」的关键。多写几个小项目练练手,你会发现这些概念用起来其实很自然。