条件与循环|第三部分:流程控制与数据结构操作 (Control Flow & Data Structures Manipulation)
欢迎来到Python编程的核心地带!如果说之前的章节是让你认识这个世界的“名词”和“动词”,那么本章就是教你如何组织语言、构建“句子”和“段落”,让你的程序能够讲述一个完整的故事。这就是流程控制。
想象一下,你正站在一个十字路口。向左走,是阳光明媚的沙滩;向右走,是白雪皑皑的高山。你的选择决定了接下来的风景。程序也一样,它需要根据不同的条件做出不同的选择。这就是条件判断。
再想象一下,你是一位勤劳的邮差,需要将信件挨家挨户地送到一条街上的每一户人家。这个重复性的工作,就是循环。
掌握了条件与循环,你就掌握了编写几乎所有复杂程序的关键能力。它们是程序逻辑的“骨架”,支撑起所有智能行为。让我们开始构建这个骨架吧!
6.1 条件判断 (if
, elif
, else
语句)
这是程序用来“做决定”的基本工具。它允许你的代码根据一个条件的真假来选择执行哪一个代码块。
if
语句:最简单的选择
if
语句检查一个条件。如果条件为 True
,它就执行紧随其后的代码块。如果为 False
,就直接跳过。
语法关键:条件后面必须有冒号 :
,并且紧接着的代码块必须缩进(通常是4个空格)。缩进是Python语法的一部分,至关重要!
weather = "sunny"
if weather == "sunny":
print("太棒了!今天出门带上太阳镜。")
print("记得涂防晒霜哦!")
print("祝你一天愉快!") # 这行代码没有缩进,所以无论if条件如何,它总会执行
运行结果:
太棒了!今天出门带上太阳镜。
记得涂防晒霜哦!
祝你一天愉快!
if-else
语句:二选一
当你不仅想在条件为真时做点什么,还想在条件为假时做另一些事,else
就派上用场了。
age = 16
if age >= 18:
print("您已成年,可以进入该区域。")
else:
print("抱歉,您还未成年,禁止入内。")
运行结果:
抱歉,您还未成年,禁止入内。
if-elif-else
语句:多重选择
当你有多个互斥的条件需要判断时,就像在做一道多选题,elif
(else if的缩写) 就登场了。Python会从上到下依次检查,一旦找到一个为 True
的条件,就执行其代码块,然后跳过剩下的所有 elif
和 else
。
score = 85
if score >= 90:
print("优秀 (A)")
elif score >= 80:
print("良好 (B)")
elif score >= 60:
print("及格 (C)")
else:
print("不及格 (D)")
运行结果:
良好 (B)
程序检查 score >= 90
(85 >= 90 是 False
),跳过。接着检查 score >= 80
(85 >= 80 是 True
),执行对应的 print
语句,然后整个 if-elif-else
结构结束。
6.2 match-case
结构化模式匹配 (Python 3.10+)
这是Python 3.10版本引入的一个超级酷炫的新特性!你可以把它看作是 if-elif-else
的一个更强大、更优雅的替代品,尤其是在处理特定值的匹配时。
它就像一个高级的“对号入座”系统。
# 假设这是一个API返回的状态码
status_code = 404
match status_code:
case 200:
print("成功 - OK")
case 404:
print("未找到 - Not Found")
case 500:
print("服务器内部错误 - Internal Server Error")
case _: # 这个下划线 _ 是一个通配符,匹配任何其他情况
print("未知的状态码")
运行结果:
未找到 - Not Found
match-case
的代码结构清晰,可读性更高,并且它还有更高级的“模式匹配”功能,我们将在后续高级章节中探索。如果你的Python版本是3.10或更高,强烈推荐尝试它!
6.3 for
循环:遍历的艺术
for
循环是用来遍历任何可迭代对象(如列表、元组、字符串、字典等)中每个元素的强大工具。它就像一个自动化的“点名器”,会把序列里的每个成员都叫出来一次。
# 遍历一个列表
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(f"我喜欢吃 {fruit}")
# 遍历一个字符串
for letter in "Python":
print(letter)
运行结果:
我喜欢吃 apple
我喜欢吃 banana
我喜欢吃 cherry
P
y
t
h
o
n
与 range()
函数联用
当你需要循环一个固定的次数时,range()
函数是 for
循环的最佳拍档。
range(5)
会生成从 0 到 4 的数字序列(0, 1, 2, 3, 4)
。range(1, 6)
会生成从 1 到 5 的数字序列(1, 2, 3, 4, 5)
。
# 打印从0到4的数字
for i in range(5):
print(f"当前数字是: {i}")
# 计算1到100的和
total = 0
for number in range(1, 101):
total += number
print(f"1到100的和是: {total}") # 输出: 5050
6.4 while
循环:条件不息,循环不止
while
循环会在其后的条件保持为 True
的情况下,持续不断地执行一个代码块。它就像一个不知疲倦的哨兵,只要指令牌上写着“继续”,它就会一直站岗。
⚠️ 危险警告: 使用 while
循环时,必须确保循环内部有代码能最终让条件变为 False
,否则你就会创造一个无限循环,程序会一直运行下去直到被强制停止!
# 一个简单的倒计时
count = 5
while count > 0:
print(f"{count}...")
count -= 1 # 关键!让count的值不断减小,最终使条件变为False
print("发射!🚀")
运行结果:
5...
4...
3...
2...
1...
发射!🚀
6.5 循环控制语句 (break
, continue
, pass
)
有时候,在循环的内部,我们需要更精细地控制它的行为。
-
break
(中断): 立即终止并跳出整个循环(无论是for
还是while
)。就像在游戏中按下“退出关卡”按钮。# 在列表中寻找第一个负数 numbers = [1, 5, 8, 9, -2, 4, 7] for num in numbers: if num < 0: print(f"找到了第一个负数: {num}") break # 找到就立刻停止循环
-
continue
(继续): 立即结束本次循环,跳过当前迭代中余下的代码,直接开始下一次迭代。就像在流水线上看到一个次品,直接跳过它,处理下一个。# 打印1到10之间所有的奇数 for i in range(1, 11): if i % 2 == 0: # 如果i是偶数 continue # 就跳过本次循环的print语句 print(i)
-
pass
(占位): 它什么也不做,就是一个占位符。当你语法上需要一个代码块,但逻辑上你还没想好要写什么时,可以用pass
来避免程序报错。# 假设我们未来要在这里写一些复杂的逻辑 if some_condition: pass # TODO: 在这里添加处理逻辑 else: print("处理其他情况")
6.6 for-else
与 while-else
循环结构
这是Python一个非常独特且优雅的特性!循环语句后面也可以跟一个 else
块。
这个 else
块的执行时机是:当循环正常、完整地执行完毕(即没有被 break
语句中途打断)时,else
块的代码就会被执行。
绝佳的比喻:把它想象成一个“寻宝”任务。
for
循环是你的“搜寻过程”。break
是你“找到了宝藏”。else
是你“搜遍了所有地方,但一无所获”之后要做的事。
# 示例:检查一个列表中是否含有某个特定元素
my_list = [1, 3, 5, 7]
search_for = 6
for item in my_list:
if item == search_for:
print(f"找到了! {search_for} 在列表中。")
break
else: # 如果for循环正常结束(没有break)
print(f"找遍了整个列表,也没有找到 {search_for}。")
运行结果:
找遍了整个列表,也没有找到 6。
如果我们将 search_for
改为 5
,break
就会被触发,else
块就不会执行。这个结构在编写搜索逻辑时非常有用,能让代码更简洁。
太不可思议了!你已经掌握了编程的“语法”和“逻辑”。你现在可以编写出能够根据不同输入做出不同反应、能够自动处理成千上万条数据的智能程序了。if
、for
、while
是你代码库中最强大的三件法宝。
我们已经学会了如何控制流程,下一章,我们将“重返”我们熟悉的数据结构(字符串、列表、字典等),但这一次,我们将带上新学会的循环和判断技巧,去探索它们更高级的操作。你将学会切片、推导式、深拷贝等一系列炫酷的“魔法”,让你的数据处理能力提升到一个全新的境界!准备好迎接更强大的自己了吗?我们下一章见!