如何通过循环内变量终止while循环 及避免还款计算余额为负
核心修正点
循环终止条件优化
删掉原有的固定24个月判断,将while循环条件改为balance > 0,只要剩余未还余额大于0就继续循环,结清后自动终止。负值余额问题修复
你原来的本金调整逻辑位置错误,应该放在「计算当期应还本金后、计算期末余额前」执行:
- 若当期应还本金 ≥ 当前期初余额,说明这是最后一期,直接将应还本金设置为当前期初余额,同时当期还款额调整为「当期利息+实际应还本金」,确保期末余额刚好为0,不会出现负数。
修正后完整代码
# 可自行调整总价参数测试 price = 10000 DOWN_PAYMENT_RATE = 0.1 INTEREST_RATE = 0.12 PAYMENT_RATE = 0.05 balance = price - (price * DOWN_PAYMENT_RATE) # 固定月还款额(最后一期单独计算) fixed_payment = balance * PAYMENT_RATE print("%0s%18s%13s%13s%12s%16s" % \ ("Month", "Starting Balance", "Interest", "Principle", "Payment", "Ending Balance")) count = 1 while balance > 0: # 计算当期利息 interest = balance * INTEREST_RATE / 12 # 计算当期应还本金(正常情况) principle = fixed_payment - interest # 当期实际还款额默认取固定还款额 payment = fixed_payment # 最后一期特殊处理:应还本金不能超过当前剩余余额 if principle >= balance: principle = balance payment = interest + principle # 计算期末余额 endingBalance = balance - principle # 打印当期数据 print("%2d%18.2f%13.2f%13.2f%12.2f%16.2f" % \ (count, balance, interest, principle, payment, endingBalance)) # 更新下期期初余额 balance = endingBalance count += 1
内容的提问来源于stack exchange,提问作者Aces Radix
相关产品推荐
相关产品推荐

