免费编程软件「python+pycharm」
链接:https://pan.quark.cn/s/48a86be2fdc0
想象你正在开发一个电商网站的折扣系统:当用户购物车总额超过500元时自动打8折,否则按原价结算。这种根据不同条件执行不同操作的逻辑,就是程序中的条件控制。在Python中,这种"智能决策"能力主要通过if语句家族实现。本文将用最接地气的方式,带你掌握Python条件控制的精髓。
age = 18
if age >= 18:
print("您已成年,可以观看此影片")
这段代码就像一个简单的门卫:当年龄大于等于18岁时,打印允许观看的信息。if语句的结构非常直观:
if
关键字后跟条件表达式:
Python的条件表达式可以是:
==
, !=
, >
, <
, >=
, <=
and
, or
, not
in
, not in
is
, is not
username = "admin"
password = "123456"
if username == "admin" and password == "123456":
print("登录成功")
新手常犯的错误:
if age > 18
(缺少:
)=
和==
:赋值用=
,比较用==
当需要处理多种可能时,if-elif-else
组合就派上用场了:
score = 85
if score >= 90:
print("优秀")
elif score >= 80:
print("良好")
elif score >= 60:
print("及格")
else:
print("不及格")
这个成绩评判系统就像一个自动分级机,从上到下依次检查条件,第一个满足的条件会被执行,之后的所有条件都会被跳过。
Python会按顺序检查每个条件:
if
条件,如果为真则执行对应代码块,然后跳过整个结构elif
条件else
代码块points = 1200
if points >= 2000:
level = "钻石会员"
elif points >= 1000:
level = "白金会员"
elif points >= 500:
level = "黄金会员"
else:
level = "普通会员"
print(f"您的会员等级是:{level}")
这个例子展示了如何根据积分将用户分类到不同等级,是电商系统中的常见逻辑。
当需要更精细的判断时,可以将条件语句嵌套使用:
temperature = 28
is_sunny = True
if temperature > 30:
print("天气很热")
if is_sunny:
print("记得涂防晒霜")
else:
print("天气不算太热")
if not is_sunny:
print("考虑带把伞")
虽然嵌套很有用,但过度嵌套会让代码难以阅读。建议:
# 不好的嵌套示例
if user_logged_in:
if is_admin:
if has_permission:
print("允许操作")
# 改进后的版本
if user_logged_in and is_admin and has_permission:
print("允许操作")
order_status = "shipped"
payment_status = "paid"
if order_status == "pending":
print("订单待处理")
elif order_status == "confirmed":
if payment_status == "paid":
print("订单已确认,等待发货")
else:
print("订单已确认,但未付款")
elif order_status == "shipped":
print("订单已发货")
if payment_status != "paid":
print("警告:已发货但未付款")
else:
print("未知订单状态")
这个例子展示了电商系统中如何根据订单和支付状态显示不同信息。
Python提供了简洁的条件表达式语法:
age = 20
message = "成年" if age >= 18 else "未成年"
print(message)
这种写法适合简单的条件赋值,比完整的if-else结构更紧凑。
score = 75
result = "优秀" if score >= 90 else "良好" if score >= 80 else "及格" if score >= 60 else "不及格"
print(result)
虽然可以这样写,但建议超过两个条件时还是使用完整的if-elif-else结构,以保证可读性。
quantity = 15
unit_price = 10
# 批量购买折扣:超过10件打9折
total_price = quantity * unit_price * 0.9 if quantity > 10 else quantity * unit_price
print(f"总价:{total_price:.2f}元")
这个例子展示了如何用条件表达式实现简单的折扣计算。
Python 3.10引入了更强大的模式匹配语法match-case
,适合处理多种可能的值:
status = 404
match status:
case 200:
print("请求成功")
case 404:
print("页面未找到")
case 500:
print("服务器错误")
case _:
print("未知状态码")
_作为默认情况,类似于else。
match-case
不仅可以匹配具体值,还可以:
http_method = "POST"
path = "/users"
match (http_method, path):
case ("GET", "/users"):
print("获取用户列表")
case ("POST", "/users"):
print("创建新用户")
case ("GET", "/users/" + id):
print(f"获取ID为{id}的用户")
case _:
print("未处理的路由")
match-case
特别适合:
复杂的条件表达式应该拆分成多个简单条件:
# 不好的写法
if (user is not None and user.is_active and
user.has_permission('edit') and
post.author_id == user.id):
...
# 改进后的写法
if user is None or not user.is_active:
return False
if not user.has_permission('edit'):
return False
if post.author_id != user.id:
return False
# 所有条件满足
def check_access(user, resource):
if user is None:
return False
if not user.is_active:
return False
if resource.is_public:
return True
if user.id == resource.owner_id:
return True
return False
这种写法避免了多层嵌套,提高了可读性。
from enum import Enum
class OrderStatus(Enum):
PENDING = 1
CONFIRMED = 2
SHIPPED = 3
DELIVERED = 4
status = OrderStatus.SHIPPED
if status == OrderStatus.PENDING:
print("待处理")
elif status == OrderStatus.CONFIRMED:
print("已确认")
elif status == OrderStatus.SHIPPED:
print("已发货")
elif status == OrderStatus.DELIVERED:
print("已送达")
def calculate_discount(total):
"""根据购物车总额计算折扣
Args:
total: 购物车总额
Returns:
折扣率(0-1之间)
折扣规则:
- 总额 < 100: 无折扣
- 100 <= 总额 < 500: 9折
- 总额 >= 500: 8折
"""
if total < 100:
return 1.0
elif total < 500:
return 0.9
else:
return 0.8
检查:
# 调试技巧:打印变量值
x = 10
print(f"x的值是:{x}") # 确认x的值
if x > 20:
print("x大于20") # 这段代码不会执行
确保条件之间是互斥的,或者明确优先级:
# 不好的设计:两个条件可能同时满足
age = 25
is_student = True
if age < 30:
print("30岁以下")
if is_student:
print("学生")
# 改进:明确优先级
if is_student:
print("学生")
elif age < 30:
print("30岁以下非学生")
对于频繁执行的条件判断:
# 不好的写法:每次循环都计算len(data)
data = [1, 2, 3]
for i in range(10000):
if i < len(data): # 每次循环都计算len(data)
print(data[i])
# 改进后的写法
length = len(data)
for i in range(10000):
if i < length: # 只计算一次
print(data[i])
让我们用条件控制实现一个简易ATM系统:
def atm_system():
balance = 1000
pin = "1234"
attempts = 3
while attempts > 0:
input_pin = input("请输入PIN码:")
if input_pin == pin:
break
attempts -= 1
print(f"PIN码错误,还剩{attempts}次机会")
if attempts == 0:
print("卡已被锁定,请联系银行")
return
while True:
print("\nATM菜单:")
print("1. 查询余额")
print("2. 取款")
print("3. 存款")
print("4. 退出")
choice = input("请选择操作(1-4):")
if choice == "1":
print(f"当前余额:{balance}元")
elif choice == "2":
amount = float(input("请输入取款金额:"))
if amount > balance:
print("余额不足")
elif amount <= 0:
print("金额必须大于0")
else:
balance -= amount
print(f"取款成功,剩余余额:{balance}元")
elif choice == "3":
amount = float(input("请输入存款金额:"))
if amount <= 0:
print("金额必须大于0")
else:
balance += amount
print(f"存款成功,当前余额:{balance}元")
elif choice == "4":
print("感谢使用,再见!")
break
else:
print("无效选择,请重新输入")
atm_system()
这个案例展示了:
从简单的if判断到复杂的模式匹配,条件控制是编程中最基础也最重要的概念之一。它让程序能够根据不同情况做出不同反应,实现真正的智能行为。
记住这些要点:
随着经验的积累,你会逐渐掌握如何编写既高效又易读的条件控制代码。现在,打开你的编辑器,开始实践吧!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。