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

为何我的债务月供计算代码无法通过Beecrowd测试?

债务月度还款计算代码报错排查修改方向

我需要编写代码计算债务的月度还款,直至债务清零并逐笔展示还款进度;若还款额大于等于剩余债务则一次性结清。但提交至Beecrowd后始终报错,已尝试多种写法,以下是当前代码:

ant = int(input())
p = int(input())
dps = 0
pg = 1
if p < ant:
    while dps >= 0:
        pg += 1
        dps = ant - p
        print(f"pagamento: {pg}")
        print(f"antes = {ant}")
        print(f"depois = {dps}")
        print('-' * 5)
        ant = dps
        dps = ant-p
else:
    dps = 0
    print(f"pagamento: {pg}")
    print(f"antes = {ant}")
    print(f"depois = {dps}")
    print('-' * 5)

代码存在的问题

  • 循环逻辑错误:原代码用while dps >= 0作为循环条件,初始dps=0会直接进入循环,但后续没有正确的终止判断,容易引发无限循环或错误的还款流程。
  • 还款次数计数错误:当p < ant时,进入循环先执行pg += 1,导致第一笔还款的序号从2开始,不符合实际还款顺序。
  • 冗余计算与逻辑漏洞:循环内重复计算dps = ant - p,且未处理剩余债务小于等于还款额时的结清逻辑,会导致最后一笔还款的剩余金额出现异常。

修改后的代码示例

debt = int(input())
payment = int(input())
payment_num = 1

while debt > 0:
    # 判断当期还款是否能结清剩余债务
    remaining = 0 if payment >= debt else debt - payment
    
    # 输出当期还款信息
    print(f"pagamento: {payment_num}")
    print(f"antes = {debt}")
    print(f"depois = {remaining}")
    print('-' * 5)
    
    # 更新剩余债务和还款次数
    debt = remaining
    payment_num += 1

修改说明

  • 变量名更直观:将ant改为debt(剩余债务)、p改为payment(月度还款额)、pg改为payment_num(还款次数),提升代码可读性。
  • 循环条件改为debt > 0:只要还有未结清的债务就继续处理,逻辑更清晰。
  • 修复还款计数:从payment_num=1开始,每次循环后递增,确保第一笔还款序号正确。
  • 统一处理结清逻辑:每次循环先判断还款额是否能覆盖剩余债务,直接计算剩余金额,避免逻辑漏洞。

内容的提问来源于stack exchange,提问作者Travadox

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 16:45:47