跳到主要内容

流程控制与迭代

刚开始学 Python 时,最容易“会写但写不顺”的部分通常不是语法本身,而是控制流程时脑子里没有稳定的模板。这里把我最常用的判断、循环和迭代方式收在一起。

条件判断

最基本的结构是 if / elif / else

score = 86

if score >= 90:
level = "A"
elif score >= 80:
level = "B"
else:
level = "C"

真假值要有感觉

Python 不只拿 TrueFalse 做判断,很多对象本身就有真假值:

if []:
print("不会执行")

if "hello":
print("非空字符串会被视为 True")

常见的假值有:

  • False
  • None
  • 0
  • 0.0
  • ""
  • []
  • {}
  • set()

for 循环

Python 更鼓励“直接遍历对象”,而不是像 C 一样先拿下标。

for name in ["alice", "bob", "charlie"]:
print(name)

如果既想拿元素又想拿位置,优先用 enumerate()

names = ["alice", "bob", "charlie"]

for index, name in enumerate(names, start=1):
print(index, name)

如果要同时遍历多个序列,优先用 zip()

names = ["alice", "bob"]
scores = [92, 85]

for name, score in zip(names, scores):
print(name, score)

while 循环

while 更适合“条件驱动”的循环,例如不断读入、不断重试、不断累加。

count = 0

while count < 3:
print(count)
count += 1

一个常见坑

如果循环体里忘了更新条件变量,就会进入死循环:

while count < 3:
print(count)
# 忘了写 count += 1

break、continue、pass

for number in range(10):
if number == 3:
continue
if number == 7:
break
print(number)
  • break:直接结束整个循环。
  • continue:跳过本轮,进入下一轮。
  • pass:占位,不做任何事。

列表推导式

很多“循环 + 条件 + 收集结果”的写法,都可以改成列表推导式:

numbers = [1, 2, 3, 4, 5, 6]
even_squares = [x * x for x in numbers if x % 2 == 0]

这个写法很常用,但也别滥用。表达式一旦太长、嵌套太深,还是老老实实拆回普通循环更清楚。

我常用的选择标准

  • 已知要遍历某个对象:优先 for
  • 取元素同时取下标:enumerate()
  • 并排遍历多个序列:zip()
  • 需要不断尝试直到满足条件:while
  • 只是在构造新列表:优先考虑列表推导式

关联阅读