Python 条件判断详解:语法、逻辑与实战示例
Python if 判断:从”要不要做”到”做哪个”
写程序就是在做决策:用户年龄够不够?密码对不对?分数属于哪个等级?
Python 的 if、elif、else 就是用来做这些决策的。语法很简单,但真正写代码的时候,怎么把逻辑组织清楚、怎么避免常见问题,还是有些门道。
最简单的:if,一件事要不要做
age = 18
if age >= 18:
print("已成年")
if 后面的条件成立了,就执行缩进的代码块;不成立,跳过。
条件就是一个”真或假”的问题——比较运算(>、<、==)、逻辑运算(and、or、not)、成员运算(in)都可以放在 if 后面。
# 比较
if score >= 60:
print("及格")
# 逻辑组合
if age >= 18 and has_id:
print("可以办理")
# 成员判断
if city in ["北京", "上海", "广州"]:
print("一线城市")
二选一:if-else,两条路走一条
一件事,成立走 A,不成立走 B。
# 预设正确密码
correct_password = "python123"
# 接收用户输入
user_input = input("请输入密码:")
# 判断密码是否正确
if user_input == correct_password:
print("密码正确,登录成功!")
else:
print("密码错误,请重新输入!")
if 和 else 必然执行其中一个,没有第三种情况。
注意 = 和 == 的区别:
=是赋值,x = 5把 5 赋给 x==是比较,x == 5判断 x 是否等于 5
把 == 写成 =,在 Python 里会直接报语法错误,不像某些语言那样悄悄把条件变成赋值。
多选一:if-elif-else,多个条件按顺序判
当你有三个以上分支的时候,用 elif(else if 的缩写)。
# 定义分数(0-100)
score = 85
# 多条件判断评级
if score >= 90:
print("评级:优秀")
elif score >= 80: # 隐含条件:score < 90
print("评级:良好")
elif score >= 60: # 隐含条件:score < 80
print("评级:及格")
else: # 隐含条件:score < 60
print("评级:不及格")
执行逻辑:从上往下判断,碰到第一个成立的就执行,然后整段结束。 后面的条件不会再看了。
再复杂一点:嵌套判断,大条件里套小条件
有时候需要”先满足一个条件,再看另一个条件”。
# 定义用户信息
user_role = "admin" # 角色:admin(管理员)、user(普通用户)
is_active = True # 账号是否激活:True(激活)、False(未激活)
# 外层判断:账号是否激活
if is_active:
print("账号已激活,正在验证权限...")
# 内层判断:用户角色是否为管理员
if user_role == "admin":
print("管理员身份,拥有全部操作权限")
else:
print("普通用户身份,拥有查看权限")
else:
print("账号未激活,请先激活账号!")
嵌套的逻辑是清晰的,但不建议超过三层——三层以上眼睛就花了,后期改代码也容易出错。
嵌套太多怎么办?用”提前返回”把它拉平:
# 扁平化写法,逻辑更清楚
if not is_active:
print("账号未激活")
return
print("账号已激活")
if role == "admin":
print("管理员,全部权限")
else:
print("普通用户,查看权限")
关键:非布尔值的 “隐式转换”
Python 中,非布尔值作为条件时,会自动转换为布尔值(True 或 False),转换规则:
- 转为
False的情况:0、0.0、None、空字符串("")、空列表([])、空字典({})、空元组(()); - 转为
True的情况:非 0 数字、非空字符串、非空容器(列表 / 字典 / 元组)、True。
示例:利用非空判断简化代码
# 定义一个列表(存储用户购物车)
cart = ["苹果", "香蕉"]
# 简化判断:无需写 len(cart) > 0,直接判断列表是否非空
if cart:
print(f"购物车中有 {len(cart)} 件商品:{cart}")
else:
print("购物车为空,请添加商品")
运行结果:
购物车中有 2 件商品:['苹果', '香蕉']