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

三明治成本计算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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 04:30:15