Python while循环无法按预设终止条件正常结束的问题求助
汇率计算代码循环异常修复
核心问题定位
两处逻辑漏洞直接导致while循环无法按预期终止:
- 循环内未同步更新
satis_tl计算值:原代码中satis_tl是进入while循环前一次性计算完成的固定值,进入循环后仅对yeni_usd变量逐次累加,全程没有用更新后的yeni_usd重新计算satis_tl,导致satis_tl永远停留在初始的1866.2数值,只要初始值低于2004的成本阈值,循环判定条件就永远成立,形成死循环。 - 浮点逐次累加的精度偏差风险:直接对浮点变量执行
yeni_usd += 0.001的逐次累加操作,会受二进制浮点数的存储精度限制,出现实际值与预期值的细微偏差,即便补全了satis_tl的更新逻辑,也可能出现边界值判断不准确的问题。
修复实现
基础循环版修复
补全循环内的satis_tl实时计算逻辑,替换原代码中循环的判定方式:
kambiyo_yuzde = 2 / 1000 usd_bolu_tl = input("current rate: ") sahip_tl = input("how much money you have in turkish liras: ") # 含汇率税费的持有总成本 deger_tl = float(sahip_tl) * (1 + kambiyo_yuzde) print(f"含汇率税费的总兑换成本:{deger_tl} TL") # 持有的TL可兑换的美元总额 alinacak_usd = float(sahip_tl) / float(usd_bolu_tl) yeni_usd = 7.000 while True: # 每次循环实时计算当前价格对应的卖出总收益 satis_tl = alinacak_usd * yeni_usd print(f"当前测试美元卖出价:{yeni_usd}") # 收益覆盖成本时立即终止循环 if satis_tl >= deger_tl: break yeni_usd += 0.001 print(f"覆盖所有成本的最低美元卖出价为:{yeni_usd}") input("按任意键退出...")
效率优化方案
该场景不需要逐次累加跑循环,通过代数推导可以直接算出临界值,完全规避循环和浮点累加的精度问题:
临界值推导:最低卖出价 = 买入汇率 * (1 + 汇率费率)
对应测试场景代入计算:7.5 * (1 + 2/1000) = 7.515,和循环逐次计算的结果完全一致,计算耗时几乎为0。
内容的提问来源于stack exchange,提问作者Ahmet Öztürk
相关产品推荐
相关产品推荐

