0%

Python 条件判断详解:语法、逻辑与实战示例

Python if 判断:从”要不要做”到”做哪个”

写程序就是在做决策:用户年龄够不够?密码对不对?分数属于哪个等级?

Python 的 ifelifelse 就是用来做这些决策的。语法很简单,但真正写代码的时候,怎么把逻辑组织清楚、怎么避免常见问题,还是有些门道。

最简单的:if,一件事要不要做

1
2
3
4
age = 18

if age >= 18:
print("已成年")

if 后面的条件成立了,就执行缩进的代码块;不成立,跳过。

条件就是一个”真或假”的问题——比较运算(><==)、逻辑运算(andornot)、成员运算(in)都可以放在 if 后面。

1
2
3
4
5
6
7
8
9
10
11
# 比较
if score >= 60:
print("及格")

# 逻辑组合
if age >= 18 and has_id:
print("可以办理")

# 成员判断
if city in ["北京", "上海", "广州"]:
print("一线城市")

二选一:if-else,两条路走一条

一件事,成立走 A,不成立走 B。

1
2
3
4
5
6
7
8
9
10
11
# 预设正确密码
correct_password = "python123"

# 接收用户输入
user_input = input("请输入密码:")

# 判断密码是否正确
if user_input == correct_password:
print("密码正确,登录成功!")
else:
print("密码错误,请重新输入!")

ifelse 必然执行其中一个,没有第三种情况。

注意 === 的区别

  • = 是赋值,x = 5 把 5 赋给 x
  • == 是比较,x == 5 判断 x 是否等于 5

== 写成 =,在 Python 里会直接报语法错误,不像某些语言那样悄悄把条件变成赋值。

多选一:if-elif-else,多个条件按顺序判

当你有三个以上分支的时候,用 elif(else if 的缩写)。

1
2
3
4
5
6
7
8
9
10
11
12
# 定义分数(0-100)
score = 85

# 多条件判断评级
if score >= 90:
print("评级:优秀")
elif score >= 80: # 隐含条件:score < 90
print("评级:良好")
elif score >= 60: # 隐含条件:score < 80
print("评级:及格")
else: # 隐含条件:score < 60
print("评级:不及格")

执行逻辑:从上往下判断,碰到第一个成立的就执行,然后整段结束。 后面的条件不会再看了。

再复杂一点:嵌套判断,大条件里套小条件

有时候需要”先满足一个条件,再看另一个条件”。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 定义用户信息
user_role = "admin" # 角色:admin(管理员)、user(普通用户)
is_active = True # 账号是否激活:True(激活)、False(未激活)

# 外层判断:账号是否激活
if is_active:
print("账号已激活,正在验证权限...")
# 内层判断:用户角色是否为管理员
if user_role == "admin":
print("管理员身份,拥有全部操作权限")
else:
print("普通用户身份,拥有查看权限")
else:
print("账号未激活,请先激活账号!")

嵌套的逻辑是清晰的,但不建议超过三层——三层以上眼睛就花了,后期改代码也容易出错。

嵌套太多怎么办?用”提前返回”把它拉平:

1
2
3
4
5
6
7
8
9
10
# 扁平化写法,逻辑更清楚
if not is_active:
print("账号未激活")
return

print("账号已激活")
if role == "admin":
print("管理员,全部权限")
else:
print("普通用户,查看权限")

关键:非布尔值的 “隐式转换”

Python 中,非布尔值作为条件时,会自动转换为布尔值(TrueFalse),转换规则:

  • 转为 False 的情况00.0None、空字符串("")、空列表([])、空字典({})、空元组(());
  • 转为 True 的情况:非 0 数字、非空字符串、非空容器(列表 / 字典 / 元组)、True

示例:利用非空判断简化代码

1
2
3
4
5
6
7
8
# 定义一个列表(存储用户购物车)
cart = ["苹果", "香蕉"]

# 简化判断:无需写 len(cart) > 0,直接判断列表是否非空
if cart:
print(f"购物车中有 {len(cart)} 件商品:{cart}")
else:
print("购物车为空,请添加商品")

运行结果

1
购物车中有 2 件商品:['苹果', '香蕉']

欢迎关注我的其它发布渠道