You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python二维列表订单问题:让展示价格匹配计算值而非全局变量

解决女童子军饼干订单程序的价格计算问题

我来帮你搞定这个问题!从你的描述来看,核心问题是代码里错误地直接引用了全局的price变量,而没有使用calc_tot函数计算的实际单品总价,同时订单总金额的累加逻辑也错用了全局价格。下面我会结合常见的错误代码示例,给出具体的修正方案。

常见错误代码示例

假设你的原始代码大概是这样的:

price = 3.5  # 全局单价变量

def calc_tot(quantity):
    return quantity * price

# 2D列表存储订单信息:[姓名, 饼干类型, 数量]
orders = [
    ["Alice", "Thin Mints", 4],
    ["Bob", "Samoas", 2],
    ["Charlie", "Tagalongs", 3]
]

total_order = 0

print("=== 女童子军饼干订单 ===")
for order in orders:
    name, cookie_type, qty = order
    # 错误:直接使用全局price,而非calc_tot计算的单品总价
    print(f"{name} - {cookie_type}: {qty}盒 - ${price:.2f}")
    # 错误:累加全局单价,而非单品总价
    total_order += price

print(f"\n订单总金额: ${total_order:.2f}")

问题分析

这里有两个关键错误:

  • 打印单品价格时,直接调用了全局的price(3.5),没有调用calc_tot(qty)计算该订单的实际总价(比如4盒应该是4*3.5=14)
  • 订单总金额的累加逻辑错误,每次加的是单个饼干的单价,而不是当前订单的单品总价

修正后的代码

price = 3.5  # 全局单价变量

def calc_tot(quantity):
    return quantity * price

# 2D列表存储订单信息:[姓名, 饼干类型, 数量]
orders = [
    ["Alice", "Thin Mints", 4],
    ["Bob", "Samoas", 2],
    ["Charlie", "Tagalongs", 3]
]

total_order = 0

print("=== 女童子军饼干订单 ===")
for order in orders:
    name, cookie_type, qty = order
    # 先计算当前订单的单品总价
    item_total = calc_tot(qty)
    # 打印时使用计算好的单品总价
    print(f"{name} - {cookie_type}: {qty}盒 - ${item_total:.2f}")
    # 累加单品总价到订单总金额
    total_order += item_total

print(f"\n订单总金额: ${total_order:.2f}")

关键修改点

  • 新增item_total变量,存储calc_tot(qty)的返回值,确保每个订单的价格是实际数量×单价的结果
  • 打印语句中用item_total替代全局price,这样4盒会正确显示为$14.00
  • 订单总金额的累加改为加上item_total,总金额会是所有订单单品总价的正确总和

内容的提问来源于stack exchange,提问作者John Doe

火山引擎 最新活动