如何让Python披萨订单程序的if判断语句更简洁优雅?
S尺寸披萨计费代码优化方案
你当前的写法把两个附加品的所有Y/N组合都硬编码成独立判断分支,存在大量重复逻辑,后续维护、调价都很麻烦,可按照下面的思路优化:
核心优化思路
不要枚举所有条件组合算总价,把价格拆成「基础价+单项附加费」累加计算即可。对照你当前的定价可以拆解为:
- S尺寸披萨基础价:15
- 加意大利辣香肠额外收:2
- 加额外芝士额外收:1
拆分后完全匹配你现在的所有计费规则: - 不加任何附加品:15
- 只加芝士:15+1=16
- 只加辣香肠:15+2=17
- 两个都加:15+2+1=18
第一步优化:消除重复判断+拆分计价
你当前所有分支都重复写了size == "S"的判断,完全可以把S码的逻辑单独抽成块,内部只需要判断附加品是否要加,不需要列全所有组合:
if size == "S": price = 15 if add_pepperoni == "Y": price += 2 if extra_cheese == "Y": price += 1 total += price
这个写法的优势很明显:
- 调价不需要翻遍所有分支找数值,基础价、单项附加费的数值都单独写在明面上,改起来不会错
- 后续新增附加品(比如加蘑菇、加卷边)只需要新增一个单条件判断就行,不需要把所有附加品的Y/N组合全部枚举一遍——2个附加品要写4个分支,3个就要写8个,4个就要16个,枚举组合的写法随着功能增加会完全没法维护
- 删掉了所有重复的条件判断,代码短了很多,逻辑也更清晰
第二步优化:适配全尺寸的可扩展写法
如果后续要支持M、L尺寸的披萨,可以把所有定价规则整理成配置字典,计费逻辑完全不用改动,只需要调整配置就行:
# 定价配置统一管理,后续做活动调价、新增尺寸/附加品直接改这里 price_config = { "S": {"base": 15, "pepperoni": 2, "cheese": 1}, "M": {"base": 20, "pepperoni": 3, "cheese": 1}, "L": {"base": 25, "pepperoni": 3, "cheese": 1} } if size in price_config: current_total = price_config[size]["base"] if add_pepperoni == "Y": current_total += price_config[size]["pepperoni"] if extra_cheese == "Y": current_total += price_config[size]["cheese"] total += current_total
额外小建议
可以在接收用户输入的时候统一做格式化处理,避免因为用户输入小写、前后带空格导致判断失效:
# 接收输入时自动去掉前后空格、转成大写,用户输s/y、 S / Y都能正常识别 size = input("请选择披萨尺寸(S/M/L): ").strip().upper() add_pepperoni = input("是否加意大利辣香肠(Y/N): ").strip().upper() extra_cheese = input("是否加额外芝士(Y/N): ").strip().upper()
内容的提问来源于stack exchange,提问作者pythonbeginnerb
相关产品推荐
相关产品推荐

