使用Python的sys.argv模块计算硬币总价值(美元)时出现结果异常的技术问询
解决命令行硬币总价值计算的问题
嘿,我来帮你理清代码里的问题,让它正确计算硬币总价值!
你的代码里的核心问题:
- 字符串重复而非数值计算:
sys.argv获取的命令行参数都是字符串类型,直接用*操作符会让字符串重复(比如'9' * 2会变成'99'),这就是你看到输出一堆重复数字的根本原因。 - 逻辑完全错误的计算式:你写的
sum = int((sys.argv[1]) * 2 + (sys.argv[2]) * 3 + ...)完全不符合硬币价值的计算逻辑,每个硬币数量应该乘以对应的面值(25美分=0.25美元,10美分=0.1美元等)。 - 多余的for循环:你的循环从1到5,但每次循环都重新给
sum赋值,循环根本没起到任何作用,反而多余。
修正后的代码
这里提供两种可靠的写法,你可以任选一种:
写法1:直接计算美元金额(简单直观)
import sys # 先把命令行参数转成整数 quarters = int(sys.argv[1]) dimes = int(sys.argv[2]) nickels = int(sys.argv[3]) pennies = int(sys.argv[4]) # 计算总价值:每个硬币数量乘以对应美元面值 total = quarters * 0.25 + dimes * 0.1 + nickels * 0.05 + pennies * 0.01 # 格式化输出,保留两位小数更符合美元的显示习惯 print(f'Result: ${total:.2f}')
写法2:先算总美分数再转美元(避免浮点精度问题)
如果担心浮点运算的精度问题,可以先计算总美分数,再除以100转成美元:
import sys quarters = int(sys.argv[1]) dimes = int(sys.argv[2]) nickels = int(sys.argv[3]) pennies = int(sys.argv[4]) # 计算总美分数 total_cents = quarters * 25 + dimes * 10 + nickels * 5 + pennies * 1 # 转成美元 total_dollars = total_cents / 100 print(f'Result: ${total_dollars:.2f}')
运行测试
当你在命令行输入:
python egg.py 9 7 3 6
正确输出会是:
Result: $3.16
(计算过程:925 +710 +35 +61 = 225+70+15+6=316美分 = 3.16美元)
内容的提问来源于stack exchange,提问作者Henry
相关产品推荐
相关产品推荐

