You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 08:56:04