Python if 判断:从”要不要做”到”做哪个”
写程序就是在做决策:用户年龄够不够?密码对不对?分数属于哪个等级?
Python 的 if、elif、else 就是用来做这些决策的。语法很简单,但真正写代码的时候,怎么把逻辑组织清楚、怎么避免常见问题,还是有些门道。
最简单的:if,一件事要不要做
1 | age = 18 |
if 后面的条件成立了,就执行缩进的代码块;不成立,跳过。
条件就是一个”真或假”的问题——比较运算(>、<、==)、逻辑运算(and、or、not)、成员运算(in)都可以放在 if 后面。
1 | # 比较 |
二选一:if-else,两条路走一条
一件事,成立走 A,不成立走 B。
1 | # 预设正确密码 |
if 和 else 必然执行其中一个,没有第三种情况。
注意 = 和 == 的区别:
=是赋值,x = 5把 5 赋给 x==是比较,x == 5判断 x 是否等于 5
把 == 写成 =,在 Python 里会直接报语法错误,不像某些语言那样悄悄把条件变成赋值。
多选一:if-elif-else,多个条件按顺序判
当你有三个以上分支的时候,用 elif(else if 的缩写)。
1 | # 定义分数(0-100) |
执行逻辑:从上往下判断,碰到第一个成立的就执行,然后整段结束。 后面的条件不会再看了。
再复杂一点:嵌套判断,大条件里套小条件
有时候需要”先满足一个条件,再看另一个条件”。
1 | # 定义用户信息 |
嵌套的逻辑是清晰的,但不建议超过三层——三层以上眼睛就花了,后期改代码也容易出错。
嵌套太多怎么办?用”提前返回”把它拉平:
1 | # 扁平化写法,逻辑更清楚 |
关键:非布尔值的 “隐式转换”
Python 中,非布尔值作为条件时,会自动转换为布尔值(True 或 False),转换规则:
- 转为
False的情况:0、0.0、None、空字符串("")、空列表([])、空字典({})、空元组(()); - 转为
True的情况:非 0 数字、非空字符串、非空容器(列表 / 字典 / 元组)、True。
示例:利用非空判断简化代码
1 | # 定义一个列表(存储用户购物车) |
运行结果:
1 | 购物车中有 2 件商品:['苹果', '香蕉'] |