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 本章知识体系
下面这张图帮你理清本章的核心逻辑:
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 分支来实现。
分支和循环是编程的基石。我见过太多初学者在这上面栽跟头,但只要你多写、多练,很快就能掌握。记住:代码是写给人看的,逻辑清晰比炫技更重要。