Python如何实现列表对应元素相乘计算糖果订单总价
列表对应元素相乘实现方案
你拿到的遍历写法是错误的
那段代码无法正常运行,核心问题有两个:
- 直接对
(candy_order, candy_price, number_order)这个存了三个列表的元组做循环时,每次迭代只会取出其中一个完整列表,根本没法把三个列表的对应位置元素分别赋值给c/p/n,运行会直接抛出解包错误。 - 你现有点单逻辑本身有漏洞:没有定义
price变量,也没有把选中糖果的对应单价存入price_order列表,就算遍历逻辑写对了,也拿不到计算所需的单价数据。
正确实现步骤
1. 先修复点单逻辑的缺失部分
选中糖果后,先根据糖果名找到它在价格列表里的对应单价,存入price_order;同时把输入的数量转成整数后再存入number_order,不要存原始字符串,替换你原有else分支的代码即可:
else: buy_num = int(number) number_order.append(buy_num) # 匹配当前糖果的对应单价 candy_index = candy_name.index(candy) single_price = candy_price[candy_index] price_order.append(single_price) candy_total = buy_num * single_price total += candy_total keep_ordering = input("Would you like to add more to your order? ").lower() if keep_ordering == "no": break elif keep_ordering == "yes": continue else: print("That was not an option, please use yes or no.") break
2. 用zip()实现多列表对应位置遍历计算
Python内置的zip()会把多个列表相同位置的元素打包成元组,刚好满足你对应相乘的需求,代码写法如下:
# 重置总价避免重复累加 total = 0 print("===== 订单详情 =====") for candy_name_buy, price, num in zip(candy_order, price_order, number_order): item_subtotal = price * num total += item_subtotal print(f"{candy_name_buy} | 单价: ${price:.2f} | 数量: {num} | 小计: ${item_subtotal:.2f}") print(f"\n订单总金额: ${total:.2f}")
如果你不习惯用zip,也可以直接按下标遍历,逻辑完全一致:
total = 0 for i in range(len(candy_order)): item_subtotal = price_order[i] * number_order[i] total += item_subtotal print(f"{candy_order[i]} | 单价: ${price_order[i]:.2f} | 数量: {number_order[i]} | 小计: ${item_subtotal:.2f}")
注意:以上写法默认三个列表长度完全一致,你按修复后的点单逻辑走,三个列表是每次点单同步追加元素,不会出现长度不匹配的问题。
内容的提问来源于stack exchange,提问作者tham thmit
相关产品推荐
相关产品推荐

