三明治成本计算Python代码数学逻辑异常问题求助
问题描述
我编写了一段用于计算三明治及其配料成本的Python代码,但输出配料价格时经常出现0值或无意义的高值。请帮忙查看代码的最后14行,分析数学逻辑出错的原因?我已耗时3小时仍无法解决,感谢帮助。
## Spencer Shample的代码 name_vendor = input('请输入供应商名称:\n') ## 输入供应商名称 while True: if name_vendor.isnumeric(): name_vendor = input('请输入供应商名称以继续:\n') else: break price_loaf_bread = input('\n一条面包的价格是多少?\n$') ## 在此输入面包单价 while True: if price_loaf_bread.isnumeric() and int(price_loaf_bread) > 0: break else: price_loaf_bread = input('请输入面包单价以继续:\n$') num_slices_bread_loaf = input('\n一条面包有多少片?\n') ## 输入一条面包的片数 while True: try: if int(num_slices_bread_loaf) < 1: raise ValueError # 触发错误提示并返回输入 break except ValueError: num_slices_bread_loaf = input('制作三明治至少需要1片面包!\n请输入三明治使用的面包片数:\n') price_cheese_per_lb = input('\n瑞士奶酪每磅的价格是多少?\n$') ## 奶酪每磅价格 while True: if price_cheese_per_lb.isnumeric() and int(price_cheese_per_lb) > 0 : break else: price_cheese_per_lb = input('请输入奶酪每磅价格以继续:\n$') num_slices_cheese = input('\n一磅奶酪有多少片?\n') ## 一磅奶酪的片数 while True: try: if int(num_slices_cheese) < 1: raise ValueError # 触发错误提示并返回输入 break except ValueError: num_slices_cheese = input('制作三明治至少需要1片奶酪!\n请输入三明治使用的奶酪片数:\n') price_pastrami_per_lb = input('\n熏牛肉每磅的价格是多少?\n$') ## 熏牛肉每磅价格 while True: if price_pastrami_per_lb.isnumeric() and int(price_pastrami_per_lb) > 1: break else: price_pastrami_per_lb = input('请输入熏牛肉每磅价格以继续:\n$') num_slices_pastrami = input('\n一磅熏牛肉有多少片?\n') ## 一磅熏牛肉的片数 while True: try: if int(num_slices_pastrami) < 1: raise ValueError # 触发错误提示并返回输入 break except ValueError: num_slices_pastrami = input('制作三明治至少需要1片熏牛肉!\n请输入三明治使用的熏牛肉片数:\n') dollar_per_slice_bread = (int(price_loaf_bread) / int(num_slices_bread_loaf)) input_num_slices_bread_loaf = input('你的三明治使用多少片面包?\n') total_price_bread = (int(dollar_per_slice_bread) * int(input_num_slices_bread_loaf)) dollar_per_slice_cheese = (int(price_cheese_per_lb) / int(num_slices_cheese)) input_num_slices_cheese = input('你的三明治使用多少片奶酪?\n') total_price_cheese = (int(dollar_per_slice_cheese) * int(input_num_slices_cheese)) dollar_per_slice_pastrami = (int(price_pastrami_per_lb) / int(num_slices_pastrami)) input_num_slices_pastrami = input('你的三明治使用多少片熏牛肉?\n') total_price_pastrami = (int(dollar_per_slice_pastrami) * int(input_num_slices_pastrami)) print(f"\n面包的成本是${total_price_bread:.2f}\n") print(f"\n奶酪的成本是${total_price_cheese:.2f}\n") print(f"\n熏牛肉的成本是${total_price_pastrami:.2f}\n") total_cost_sandwich = (total_price_bread + total_price_cheese + total_price_pastrami) num_sandiwches = input('你要制作多少个三明治?\n') print(f"如果你制作{num_sandiwches}个三明治,来自{name_vendor}的每个三明治总成本为${total_cost_sandwich:.2f}。" )
错误原因分析
核心问题出在最后14行的整数强制转换操作:
- 计算单配料总价时,你把浮点类型的单份配料价格(比如
dollar_per_slice_bread)用int()强制转换成了整数,这会直接截断小数部分。 - 比如一条面包5美元、共20片,单面包片价格是
5/20=0.25美元,int(0.25)会变成0,乘以任何片数结果都是0,这就是你看到的0值问题。 - 若单份配料价格大于1但带小数(比如7美元的面包分3片,单份约2.33美元),
int(2.33)会变成2,计算出的总价会低于实际值;极端情况下若截断逻辑出错,还会出现无意义的高值。
修复方案
去掉总价计算中的int()转换,保留浮点运算即可:
# 原错误代码 total_price_bread = (int(dollar_per_slice_bread) * int(input_num_slices_bread_loaf)) # 修复后代码 total_price_bread = (dollar_per_slice_bread * int(input_num_slices_bread_loaf))
同理,奶酪和熏牛肉的总价计算也需要做同样修改。
额外补充:当前代码只允许输入整数价格,实际场景中价格通常带小数(比如$3.99),可以把输入验证改成支持浮点数,用try-except来转换float()类型,计算会更准确。
内容的提问来源于stack exchange,提问作者Spencer
相关产品推荐
相关产品推荐

