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

写程序说白了就是让计算机按你的想法干活。但光有变量和数据类型还不够——你得告诉它“什么时候做什么事”。这就是分支和循环干的事。

我个人习惯把这两样东西看作程序的“大脑”。分支让程序会思考,循环让程序会重复。没有它们,代码就是一潭死水。

核心思想:分支决定“走哪条路”,循环决定“走多少遍”。两者结合,就能写出真正有用的程序。

4.1 判断语句:if 和 if-else

先说说最简单的判断。你想想看,生活中到处都是判断:如果下雨就带伞,否则就不带。程序里也一样。

4.1.1 基本 if 语句

age = 18
if age >= 18:
    print("你已经成年了")

注意那个冒号 : 和缩进。Python 用缩进来表示代码块,不像其他语言用花括号。我刚学的时候老忘冒号,后来养成习惯:写完 if 条件就顺手敲个冒号。

4.1.2 if-else 语句

score = 75
if score >= 60:
    print("及格了")
else:
    print("不及格,继续加油")

这里有个坑:else 后面也要加冒号,而且要和 if 对齐。我曾经见过有人把 else 缩进到 if 里面去了,结果程序直接报错。

4.1.3 if-elif-else 多分支

score = 85
if score >= 90:
    grade = "优秀"
elif score >= 80:
    grade = "良好"
elif score >= 70:
    grade = "中等"
elif score >= 60:
    grade = "及格"
else:
    grade = "不及格"
print(f"你的等级是:{grade}")

注意顺序:从上往下检查,一旦满足某个条件就跳出整个结构。所以要把最严格的条件放前面。

小技巧:写多分支时,我习惯先画个流程图再写代码。这样逻辑不会乱,尤其是条件有重叠的时候。

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

判断离不开运算符。Python 的运算符分几类,我挑最常用的说。

4.2.1 比较运算符

运算符 含义 示例
== 等于 5 == 5 → True
!= 不等于 5 != 3 → True
> 大于 7 > 3 → True
< 小于 2 < 5 → True
>= 大于等于 5 >= 5 → True
<= 小于等于 3 <= 4 → True

注意:千万别把 == 写成 =。一个等号是赋值,两个等号才是判断。我刚开始写代码时至少犯过十次这种错。

4.2.2 逻辑运算符

age = 25
has_id = True

# and:两个条件都满足
if age >= 18 and has_id:
    print("可以进入")

# or:满足一个就行
if age < 12 or age > 60:
    print("可以享受优惠")

# not:取反
if not has_id:
    print("请出示身份证")

逻辑运算符可以组合使用。但别写太长的条件,否则自己都看不懂。我一般控制在三个以内,再多就拆成变量。

4.3 while 循环:不知道循环次数时用

while 循环适合“不知道要循环多少次”的场景。比如等待用户输入正确密码。

password = ""
while password != "123456":
    password = input("请输入密码:")
    if password != "123456":
        print("密码错误,请重试")
print("登录成功")

这里有个关键点:循环条件 password != "123456" 必须能在循环体内被改变,否则就成了死循环。

死循环警告:我曾经在项目里写过一个 while True 忘记加 break,结果程序卡死,服务器 CPU 直接飙到 100%。后来我养成了习惯:写 while 循环时先想好“退出条件”。

4.4 for 循环:知道循环次数时用

for 循环适合遍历序列。说白了就是“对每个元素做一遍操作”。

4.4.1 遍历列表

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

4.4.2 配合 range() 使用

# 打印 0 到 4
for i in range(5):
    print(i)

# 打印 2 到 8,步长为 2
for i in range(2, 9, 2):
    print(i)

range(start, stop, step) 是左闭右开区间,也就是说包含 start,不包含 stop。这个我记了好久才记住。

4.4.3 遍历字典

student = {"name": "小明", "age": 18, "score": 95}
for key, value in student.items():
    print(f"{key}: {value}")

经验之谈:遍历字典时用 .items() 最方便。直接遍历字典得到的是键,别搞混了。

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

这两个关键字用来控制循环的流程。我经常把它们比作开车:break 是急刹车,continue 是跳过当前路口。

4.5.1 break:立即退出循环

for i in range(10):
    if i == 5:
        print("遇到5,退出循环")
        break
    print(i)
# 输出:0 1 2 3 4

break 会直接跳出整个循环,后面的迭代都不执行了。

4.5.2 continue:跳过当前迭代

for i in range(5):
    if i == 2:
        print("跳过2")
        continue
    print(i)
# 输出:0 1 跳过2 3 4

continue 只是跳过本次循环的剩余代码,继续下一次迭代。

实用场景:我在处理数据清洗时经常用 continue。比如遍历一个列表,遇到空值就跳过,只处理有效数据。

4.6 本章知识体系

下面这张图帮你理清本章的核心逻辑:

分支与循环知识体系 分支结构 if 语句 if-else if-elif-else 循环结构 while 循环 for 循环 循环控制 break continue 核心要点 • 分支:根据条件选择执行路径,条件必须是布尔值 • while:条件为真时持续执行,适合未知次数的循环 • for:遍历序列或范围,适合已知次数的循环 • break:立即退出当前循环,continue:跳过本次迭代

4.7 综合示例:猜数字游戏

把今天学的知识串起来,写个小游戏:

import random

# 生成1到100之间的随机数
target = random.randint(1, 100)
guess = None
attempts = 0

print("猜数字游戏开始!范围是1到100")

while guess != target:
    try:
        guess = int(input("请输入你的猜测:"))
        attempts += 1
        
        if guess < target:
            print("猜小了,再大一点")
        elif guess > target:
            print("猜大了,再小一点")
        else:
            print(f"恭喜你!猜对了!用了{attempts}次")
            break
            
        # 超过10次提示
        if attempts >= 10:
            print("提示:你已经猜了10次了")
            
    except ValueError:
        print("请输入有效的数字")
        continue

这个例子用到了 if-elif-else、while 循环、break 和 continue。你想想看,如果不用循环,这个游戏得写多少行代码?

练习建议:试着给这个游戏加个“难度选择”功能:简单模式1-50,困难模式1-200。用 if 分支来实现。

分支和循环是编程的基石。我见过太多初学者在这上面栽跟头,但只要你多写、多练,很快就能掌握。记住:代码是写给人看的,逻辑清晰比炫技更重要。