流程控制与迭代
刚开始学 Python 时,最容易“会写但写不顺”的部分通常不是语法本身,而是控制流程时脑子里没有稳定的模板。这里把我最常用的判断、循环和迭代方式收在一起。
条件判断
最基本的结构是 if / elif / else:
score = 86
if score >= 90:
level = "A"
elif score >= 80:
level = "B"
else:
level = "C"
真假值要有感觉
Python 不只拿 True 和 False 做判断,很多对象本身就有真假值:
if []:
print("不会执行")
if "hello":
print("非空字符串会被视为 True")
常见的假值有:
FalseNone00.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 - 只是在构造新列表:优先考虑列表推导式