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 知识体系总览
下面这张图把本章的核心知识点串起来了。你可以把它当成一张「思维导图」,写代码时对照着看。
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,循环自然结束)。
break 实现这个功能。
好了,分支和循环的核心内容就这些。说白了,它们就是让程序「有脑子」的关键。多写几个小项目练练手,你会发现这些概念用起来其实很自然。