4. 分支和循环:控制程序的“大脑”
写代码说白了就是让计算机按你的想法干活。但光有变量和数据类型还不够——你得告诉它“什么时候做什么事”。这就是分支和循环的用武之地。
我个人习惯把这两样东西看作程序的“大脑”。没有它们,代码只能从上往下一条条执行,跟流水账似的。有了它们,程序才能做判断、重复干活,真正变得“智能”起来。
本章核心:掌握 if 判断、while/for 循环、以及 break/continue 控制语句。这些是几乎所有程序的基础构件。
4.1 比较运算符与布尔值
做判断之前,你得先学会“比较”。Python 里比较的结果只有两种:True 或 False。说白了就是“是”或“否”。
| 运算符 | 含义 | 示例 | 结果 |
|---|---|---|---|
== | 等于 | 5 == 5 | True |
!= | 不等于 | 5 != 3 | True |
> | 大于 | 7 > 10 | False |
< | 小于 | 3 < 8 | True |
>= | 大于等于 | 5 >= 5 | True |
<= | 小于等于 | 9 <= 4 | False |
小技巧:我刚开始学的时候老把 =(赋值)和 ==(判断相等)搞混。记住:一个等号是“给值”,两个等号是“问是否相等”。
4.2 if 判断语句
if 的语法很直白:如果条件成立,就执行某段代码。
age = 18
if age >= 18:
print("你已经成年了")
print("可以考驾照了")
注意那个冒号 : 和缩进。Python 用缩进来表示代码块,这是硬规矩。我见过不少新手因为缩进不对报错,急得满头大汗。
注意:缩进必须统一。要么全用空格(推荐4个),要么全用 Tab。混着用会报 IndentationError。
4.3 if-else 语句
光有 if 不够——条件不成立时怎么办?这时候 else 就派上用场了。
score = 59
if score >= 60:
print("恭喜,及格了!")
else:
print("差一点,继续加油")
你想想看,现实中的判断哪有非黑即白的?所以 Python 还提供了 elif,用来处理多个条件分支。
score = 85
if score >= 90:
grade = "优秀"
elif score >= 80:
grade = "良好"
elif score >= 70:
grade = "中等"
elif score >= 60:
grade = "及格"
else:
grade = "不及格"
print(f"你的等级是:{grade}")
这里有个细节:elif 是按顺序判断的。一旦某个条件满足,后面的就不再执行了。我在项目中遇到过因为条件顺序写反导致逻辑错误的坑——比如把 score >= 60 写在 score >= 80 前面,结果 85 分也被判成“及格”。
4.4 while 循环
while 循环的逻辑很简单:只要条件为真,就一直执行。
count = 0
while count < 5:
print(f"第 {count+1} 次循环")
count += 1
这段代码会打印 5 次。每次循环 count 加 1,直到 count 变成 5,条件 count < 5 为假,循环结束。
死循环警告:如果你忘了写 count += 1,条件永远为真,程序就会一直跑下去。我曾经在调试一个服务器程序时,因为 while 条件写错导致 CPU 飙到 100%,整个服务器卡死了。嗯,那教训够深刻。
4.5 for 循环
for 循环更适合“遍历”场景——比如处理列表里的每个元素。
fruits = ["苹果", "香蕉", "橘子", "西瓜"]
for fruit in fruits:
print(f"我喜欢吃{fruit}")
配合 range() 函数,for 循环也能实现“重复 N 次”的效果:
for i in range(5):
print(f"这是第 {i+1} 次")
range(5) 生成 0 到 4 的整数序列。如果你想要 1 到 5,可以写成 range(1, 6)。第三个参数是步长:range(0, 10, 2) 会得到 0, 2, 4, 6, 8。
我的习惯:能 for 循环解决的问题,我一般不用 while。for 循环更安全——它天然有边界,不容易写出死循环。
4.6 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(f"偶数:{num}")
第一个循环遇到 8 就停了,不会继续检查 9 和 10。第二个循环遇到奇数就跳过,只打印偶数。
避坑指南:我曾经在嵌套循环里用 break,以为它能跳出所有循环。结果它只跳出了内层循环。记住——break 和 continue 只作用于它们所在的 最内层 循环。
4.7 综合示例:猜数字游戏
把今天学的串起来,写个小游戏:
import random
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
except ValueError:
print("请输入有效的数字")
这个例子用到了 while 循环(持续猜直到猜对)、if-elif-else(判断大小)、break(猜对后退出)。你想想看,如果没有这些控制结构,这个游戏根本写不出来。
扩展思考:你可以试试给游戏加个“最多猜 7 次”的限制——用 attempts >= 7 作为另一个退出条件。这就是把分支和循环组合使用的典型场景。
分支和循环是编程的“左右手”。if 让你做选择,while/for 让你重复干活,break/continue 让你精细控制。把这些练熟了,后面学函数、列表推导式、递归都会轻松很多。