Python初学者。这段Python代码的效率如何?
这个问题/解决方案让我想到了另一个相关的问题,问得很不错,在这里 - 希望能得到一些帮助!
根据最初的反馈,更新了下面的代码
我刚开始学习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 个回答
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