Python初学者。这段Python代码的效率如何?

3 投票
4 回答
928 浏览
提问于 2025-04-16 11:47

这个问题/解决方案让我想到了另一个相关的问题,问得很不错,在这里 - 希望能得到一些帮助!

根据最初的反馈,更新了下面的代码

我刚开始学习Python(这是我的第二个程序)。我正在使用麻省理工学院的开放课程资料,通过Python入门计算机科学,可以在这里找到相关视频,我正在做第一套练习题,可以在这里查看。我写了一个程序,成功地完成了“测试案例1”的12个月(不包括“结果”部分……我还在继续努力),但我想问的是,以下的代码是否尽可能高效?我觉得代码中有些地方可能重复了,但其实没必要。:

原始代码:

balance = float(raw_input("Outstanding Balance: "))
interestRate = float(raw_input("Interest Rate: "))
minPayRate = float(raw_input("Minimum Monthly Payment Rate: "))
interestPaid = round((interestRate/12.0)*balance, 2)
minPayment = round(minPayRate*balance, 2)
principalPaid = round(minPayment-interestPaid, 2)
remainingBalance = round(balance-principalPaid, 2)
month = 1

while month < 12 :    
    if month > 1 :
        balance = remainingBalance
    interestPaid = round((interestRate/12.0)*balance, 2)
    minPayment = round(minPayRate*balance, 2)
    principalPaid = round(minPayment-interestPaid, 2)
    remainingBalance = round(balance-principalPaid , 2)   
    month = month+1

    print 'Month: ' + str(month)
    print 'Minimum monthly payment: ' + str(minPayment)
    print 'Principle paid: ' + str(principalPaid)
    print 'Remaining balance: ' + str(remainingBalance)

当前代码

balance = float(raw_input("Outstanding Balance: "))
interestRate = float(raw_input("Interest Rate: "))
minPayRate = float(raw_input("Minimum Monthly Payment Rate: "))

for month in xrange(1, 12+1):
    interestPaid = round(interestRate / 12.0 * balance, 2)
    minPayment = round(minPayRate * balance, 2)
    principalPaid = round(minPayment - interestPaid, 2)
    remainingBalance = round(balance - principalPaid, 2)

    print 'Month: %d' % (month,)
    print 'Minimum monthly payment: %.2f' % (minPayment,)
    print 'Principle paid: %.2f' % (principalPaid,)
    print 'Remaining balance: %.2f' % (remainingBalance,)

    balance = remainingBalance

如果你在这段新代码中发现其他问题,请告诉我!

非常感谢那些帮助我走到这一步的人。

4 个回答

3

你应该使用 字符串插值 或者 格式化,而不是直接用 str() 函数转换后再拼接字符串。

print 'Month: %d' % (month,)
4

这和效率问题没有关系,但如果你在做财务计算,建议你看看 decimal 这个模块。否则,你可能会遇到奇怪的 四舍五入和表示错误


*更准确地说:使用这个模块会降低效率,但会提高你代码的正确性。

4
print "x: " + str(x)

应该替换为:

print "x:", x

这是一个关于打印的特殊情况。


把循环改成:

for month in xrange(1, 12+1):

去掉第一次循环的检查,直接把余额设置为剩余余额作为结束。

因为你手动增加月份,所以每次打印的值都是错误的。


如果你说的效率是指执行效率,那你担心这个 太早了。 如果你是指代码重复的话,确实在循环之前你不必要地重复了数学运算。结合上面的内容:

balance = float(raw_input("Outstanding Balance: "))
interestRate = float(raw_input("Interest Rate: "))
minPayRate = float(raw_input("Minimum Monthly Payment Rate: "))

for month in xrange(1, 12+1):    
  interestPaid = round(interestRate / 12.0 * balance, 2)
  minPayment = round(minPayRate * balance, 2)
  principalPaid = round(minPayment - interestPaid, 2)
  remainingBalance = round(balance - principalPaid, 2)   

  print 'Month:', month
  print 'Minimum monthly payment:', minPayment
  print 'Principle paid:', principalPaid
  print 'Remaining balance:', remainingBalance

  balance = remainingBalance

撰写回答