如何在Python循环及OOP中累加总价,避免变量重复赋值?
问题解决与OOP实现方案
一、普通函数的修改方案
你遇到的核心问题是total变量在循环内被重复赋值,只需将它的初始化移到循环外部,改用累加操作即可实现总价存储。修改后的代码如下:
def orders(): menu = { "Baja Taco": 4.00, "Burrito": 7.50, "Bowl": 8.50, "Nachos": 11.00, "Quesadilla": 8.50, "Super Burrito": 8.50, "Super Quesadilla": 9.50, "Taco": 3.00, "Tortilla Salad": 8.00 } total = 0.0 # 初始化总价在循环外,避免每次被重置 while True: try: item = input("Item: ").title().strip() # strip()同时去除首尾空格,简化代码 if item in menu: total += menu[item] # 累加商品价格,而非重新赋值 print(f"${total:.2f}") # 按货币格式输出,保留两位小数 except KeyError: pass except EOFError: print() break orders()
关键改动:
- 将
total初始化移至循环外部,确保每次循环只做累加操作 - 用
total += menu[item]替代total = orders[key],实现总价持续累加 - 用
f-string格式化输出,符合日常货币显示习惯
二、面向对象(OOP)的实现方案
在OOP中,可以通过类封装订单的状态与行为,将总价作为实例属性存储,每次调用方法修改属性值,从根本上避免“重新赋值变量”的问题。代码示例:
class Order: def __init__(self): self.menu = { "Baja Taco": 4.00, "Burrito": 7.50, "Bowl": 8.50, "Nachos": 11.00, "Quesadilla": 8.50, "Super Burrito": 8.50, "Super Quesadilla": 9.50, "Taco": 3.00, "Tortilla Salad": 8.00 } self.total = 0.0 # 实例属性存储总价,初始值为0 def add_item(self, item_name): """添加商品并累加总价""" formatted_item = item_name.title().strip() if formatted_item in self.menu: self.total += self.menu[formatted_item] return True return False def show_total(self): """显示当前订单总价""" print(f"${self.total:.2f}") def run_order_system(): order = Order() while True: try: item = input("Item: ") if order.add_item(item): order.show_total() except EOFError: print() break run_order_system()
核心逻辑:
Order类封装了订单的核心数据(菜单、总价)和操作(添加商品、显示总价)self.total作为实例的属性,每次调用add_item时仅修改其值,不存在重新赋值变量的问题- 代码逻辑拆分更清晰,后续扩展删除商品、查看订单明细等功能更便捷
内容的提问来源于stack exchange,提问作者Shayan.att
相关产品推荐
相关产品推荐

