用Python计算信用支付

2024-09-30 01:37:32 发布

您现在位置:Python中文网/ 问答频道 /正文

Python初学者。我必须编写一个程序,生成一个表格,显示“信用卡”类型的余额,不管用最低付款额还清余额需要多少个月。我想我已经解决了大部分问题,但我遇到了一个问题

问题是如何在余额付清后结束循环,同时使最终付款等于余额。由于最低付款额大于上一次付款的余额,因此我的最终余额为负数。我试图通过向循环中添加一个if-then语句来解决这个问题,但最终我得到了.04的付款,而示例输出中的零价格为3.80美元

到目前为止,我掌握的代码是:

listedPrice = 200

print("%10s%20s%20s%20s%10s%20s" % \
     ("Month", "Starting Balance", "Interest to Pay", "Principal to Pay", "Payment", "Ending Balance"))

downPayment = listedPrice / 10
balance = listedPrice - downPayment
interestRate = .12
interest = (balance * interestRate) / 12 
payment = (5 * balance) / 100
principal = payment - interest
numPayments = 24

for month in range(1, numPayments +1):
    balance = balance
    interest = balance / 100
    principal = payment - interest
    endBalance = balance - payment + interest
    print("%10s%20.2f%20.2f%20.2f%10.2f%20.2f" % \
        (month, balance, interest, principal, payment, endBalance))
    if endBalance < payment:
        payment = endBalance
    balance = endBalance

或者,我尝试了以下while循环:

month = 1

while balance > 0.0:
    balance = balance
    interest = balance / 100
    principal = payment - interest
    endBalance = balance - payment + interest
    print("%10s%15.2f%15.2f%15.2f%15.2f%15.2f" % \
        (month, balance, interest, principal, payment, endBalance))
    if endBalance < payment:
        payment = endBalance
        balance=endBalance
        month+=1
        break
    balance = endBalance
    month +=1

问题是表的最后一行停止了,支付了9美元,期末余额为3.80美元。它应该还有一行,付款为3.80,期末余额为0

感谢扎克·穆罕默德提出的中断命令的想法


Tags: toprincipalifpaymentpay余额printbalance
2条回答

我也是Python的新手,但我喜欢解决这些问题。这有助于我更好地理解语言,提高我解决问题的能力

尽管我知道这不是“最干净”或“最有效”的代码,但我仍然可以解释什么是错误的,以及我做了什么来修复它,我相信您可以从那里找到其他解决方案

这就是我如何解决你的两个问题:

listedPrice = 200

print("%10s%20s%20s%20s%10s%20s" % \
     ("Month", "Starting Balance", "Interest to Pay", "Principal to Pay", "Payment", "Ending Balance"))

downPayment = listedPrice / 10
balance = listedPrice - downPayment
interestRate = .12
interest = (balance * interestRate) / 12 
payment = (5 * balance) / 100
originalPayment = (5 * balance) / 100
principal = payment - interest
numPayments = 24

for month in range(1, numPayments +1):
    balance = balance
    interest = balance / 100
    principal = payment - interest
    endBalance = balance - payment + interest
    if payment == 9:
        print("%10s%20.2f%20.2f%20.2f%10.2f%20.2f" % \
            (month, balance, interest, principal, payment, endBalance))
        if endBalance < payment:
            payment = endBalance
        balance = endBalance
    elif payment <= originalPayment and balance != 0:
        payment = balance + interest
        principal = balance
        endBalance = 0
        print("%10s%20.2f%20.2f%20.2f%10.2f%20.2f" % \
            (month, balance, interest, principal, payment, endBalance))
        balance = endBalance
        print("\n It took",month,"months to pay off your credit card.")

从第1个月到第23个月;因为第24个月将是0美元,不应显示。然后让你知道花了多少个月

你的问题是你没有在最后一行打破循环,改变打印语句;随着计算,需要发生给你最后的最低付款线,完成循环,然后告诉你花了多少个月

注意:我添加了最后一次付款的.04利息,因此它是3.84次付款,如果出于任何原因,最后一次付款不包括利息,您只需从最后一次'elif声明'中取出即可。我注意到你在最初的问题中说你不想要它

但由于这是一张信用卡,我认为从技术上讲,最后一笔付款应该有利息,即使是四美分。但是,如果您的指示是对最后一笔付款不感兴趣,只需将其从“for statement”的最后一个循环中删除即可

那你该走了

我很乐意提供帮助。首先,我无法复制您自己在错误显示$3.80时遇到的问题,但您已接近成功。我在if语句后添加了一个中断,该中断将中断循环:

if endBalance < payment:
        payment = endBalance
        break

相关问题 更多 >

    热门问题