为何我的债务月供计算代码无法通过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
相关产品推荐
相关产品推荐

