函数返回值跨函数使用问题:代码重复执行无预期结果排查
问题解决
核心问题
- 重复执行输入流程:你在
compare_coins里两次调用coins(),每调用一次就会触发一轮硬币数量输入,所以用户需要重复输入两次。 - 无法访问
coinS变量:coinS是coins函数内部的局部变量,函数外部不能直接引用,只能通过函数的返回值获取它的值。
修复后的代码
def coins(): print("Please insert coins.") qtrs = int(input('How many quarters: ')) dmes = int(input('How many dimes: ')) ncks = int(input('How many nickles: ')) pens = int(input('How many pennies: ')) coinS = (0.25 * qtrs) + (0.1 * dmes) + (0.05 * ncks) + (0.01 * pens) return coinS def compare_coins(n): # 只调用一次coins(),把返回值存到变量里复用 inserted_amount = coins() if inserted_amount > MENU[n]["cost"]: change = inserted_amount - MENU[n]["cost"] # 格式化输出为两位小数,避免浮点精度问题导致的奇怪显示 print(f'Here is your ${change:.2f}')
额外优化建议
用浮点数计算金额容易出现精度误差(比如0.1 + 0.2不等于0.3),建议改用整数以分作为单位计算,最后再转换成美元:
def coins(): print("Please insert coins.") qtrs = int(input('How many quarters: ')) dmes = int(input('How many dimes: ')) ncks = int(input('How many nickles: ')) pens = int(input('How many pennies: ')) # 全部转换成便士(分)计算,彻底避免浮点误差 total_cents = 25 * qtrs + 10 * dmes + 5 * ncks + 1 * pens return total_cents / 100 # 转换回美元 def compare_coins(n): inserted_amount = coins() cost = MENU[n]["cost"] if inserted_amount > cost: change = inserted_amount - cost print(f'Here is your ${change:.2f}')
内容的提问来源于stack exchange,提问作者Sir Flee
相关产品推荐
相关产品推荐

