Python 条件判断与循环
AI 辅助生成本文由 AI 起草并经人工核查,示例均标明软件版本;发现错误请以官方文档为准。
程序之所以有用,是因为它能根据条件做不同的事、把重复动作交给循环。这一篇把判断与循环的写法和坑一次说清。
环境准备
本文示例在 Python 3.13 下验证:
python --version
# Python 3.13.x
把代码存成 flow.py,用 python flow.py 运行即可看到输出。
if / elif / else
score = 85
if score >= 90:
print("优秀")
elif score >= 60:
print("及格")
else:
print("需要努力")
elif 可以有任意多个,else 可选。判断从上到下执行,命中第一个为真的分支后就不再看后面的分支,所以条件顺序要从严到宽。
什么是「假」
Python 不需要写 len(items) > 0,这些值本身就代表假:
for value in [None, False, 0, 0.0, "", [], (), {}, set()]:
print(repr(value), "→", bool(value))
# None → False
# False → False
# 0 → False
# ...
# set() → False
其他对象默认为真。想显式判断「有没有值」,用 is None:
if name is not None:
print(name)
注意区分:if not items 会把 0 和空字符串也当成空,而 if items is None 只认 None。
三元表达式与海象运算符
status = "成年" if age >= 18 else "未成年"
Python 3.8+ 可以在表达式里顺手赋值(海象运算符 :=):
if (count := len(items)) > 10:
print(f"太多了:{count} 个")
for 循环
for 遍历的是可迭代对象,不是下标:
for name in ["python", "go", "rust"]:
print(name)
需要下标时用 enumerate:
for index, name in enumerate(["python", "go", "rust"], start=1):
print(index, name)
# 1 python
# 2 go
# 3 rust
需要计数循环时用 range:
for i in range(3): # 0 1 2,不含 3
print(i)
list(range(1, 10, 2)) # [1, 3, 5, 7, 9],起点含、终点不含、步长 2
同时遍历两个序列用 zip,长度以短的为准:
for key, value in zip(["a", "b"], [1, 2]):
print(key, value)
# a 1
# b 2
while 循环
count = 3
while count > 0:
print(count)
count -= 1
while True 配合 break 是常见的「先执行再判断」写法:
while True:
line = input("输入 q 退出:")
if line == "q":
break
print(f"你输入了:{line}")
break / continue / else
break:直接跳出整个循环。continue:跳过本轮剩下的代码,进入下一轮。else:循环没有被 break 中断时才执行。
for n in [2, 4, 5, 6]:
if n % 2 != 0:
print(f"{n} 不是偶数")
break
else:
print("全部是偶数")
# 5 不是偶数(else 不执行)
else 用在查找场景很顺手:找到就 break,没找到走 else 处理默认值。
match 语句(3.10+)
多分支匹配结构时,match 比一长串 elif 清楚:
match command.split():
case ["quit"]:
print("退出")
case ["load", filename]:
print(f"加载 {filename}")
case _:
print("未知命令")
case _ 是兜底分支,类似 else。
常见错误与注意事项
1. 遍历时修改列表
items = [1, 2, 3, 4]
for item in items:
if item % 2 == 0:
items.remove(item) # 结果不可预期:[1, 3] 还是 [1, 3]?取决于迭代器内部位置
改为遍历副本,或用推导式新建列表:
items = [item for item in items if item % 2 != 0]
2. 用 is 比较值
a = 1000
b = 1000
a is b # False(不同对象),要用 ==
is 只用于和 None、True、False 这类单例比较。
3. 忘了更新循环变量导致死循环
while 里必须有让条件变假的语句,否则程序卡住(可用 Ctrl+C 中断)。
4. 缩进混用空格与 Tab
Python 靠缩进划分代码块。统一用 4 个空格,编辑器开启「Tab 转空格」。
小结
- 判断靠真值规则,空容器、0、
None都是假;判断None用is。 for遍历可迭代对象,要下标用enumerate,要计数用range。break跳出、continue跳过本轮、循环else只在没被break时执行。- 别在遍历过程中增删同一个列表。