Python初学者。这段Python代码是否尽可能高效?
这个问题/解决方案让我想到了另一个相关的问题-非常感谢您的帮助强> 根据初始反馈更新了以下当前代码 我是Python的新手(这是我的第二个程序)。我目前正在使用麻省理工学院的开放式课件来获得一篇关于使用Python的CS的介绍,我正在编写习题集1。我已经创建了这个程序,在12个月内成功地重新创建了“测试用例1”(不包括“结果”部分…仍在处理),但我的问题是,以下(我的)代码是否尽可能高效?我觉得我在重复我自己,而这可能不是必要的 原始代码:Python初学者。这段Python代码是否尽可能高效?,python,Python,这个问题/解决方案让我想到了另一个相关的问题-非常感谢您的帮助 根据初始反馈更新了以下当前代码 我是Python的新手(这是我的第二个程序)。我目前正在使用麻省理工学院的开放式课件来获得一篇关于使用Python的CS的介绍,我正在编写习题集1。我已经创建了这个程序,在12个月内成功地重新创建了“测试用例1”(不包括“结果”部分…仍在处理),但我的问题是,以下(我的)代码是否尽可能高效?我觉得我在重复我自己,而这可能不是必要的 原始代码: balance = float(raw_input("Ou
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)
如果您在新代码中看到任何其他内容,请告诉我
非常感谢那些帮助我做到这一点的人。你应该使用or,而不是传递到str()
并添加
print 'Month: %d' % (month,)
这与任何可能的效率问题无关*,但是如果你在做金融算术,你应该研究一下这个模块。否则,你将以奇怪而告终
*更准确地说:它会降低效率,但会提高代码的正确性。对于(速度)优化,您可能需要阅读 应替换为:
print "x:", x
这是一种特殊的印刷品
将循环更改为:
for month in xrange(1, 12+1):
放弃第一个循环的检查,只需将balance设置为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:', month
print 'Minimum monthly payment:', minPayment
print 'Principle paid:', principalPaid
print 'Remaining balance:', remainingBalance
balance = remainingBalance
谢谢你,我对代码做了修改。我用于重复计算的方法是否正确/良好?当我使用
%f
格式化浮点数时,是否有办法将小数限制为2?绝对正确。如文档中所示,在格式说明符中给出精度>>'%.2f'%123.456
'123.46'
通常使用for
循环循环已知次数,但在特定迭代中执行某些操作可能会很棘手(但在这种情况下并非如此)。另外,请参阅enumerate()
,以备将来参考。啊,我问这个问题太快了。我查了一下,当我回来删除/回答我自己时,你已经打败了我!谢谢(参考小数位)我确实研究了这个问题并应用了它,但为了得到与习题集完全相同的结果,我把它改了回去。显然,那些麻省理工学院的人认为他们很聪明:太有帮助了!我确实注意到我的计算有一个月的休息时间,所以我将if month>1
更改为if month>=1
,并对其进行了修复,但我更喜欢您使用进行
的方法,就像上面提到的Ignacio一样。另外,我关于效率的问题是关于额外的、不必要的(重复的)代码。当我试图删除顶部的数学运算时,我的原始代码不起作用,但现在使用for
循环是可能的。非常感谢你。最后,我最初使用的是打印“x:”,x
代码,但出于某种原因,我注意到它增加了一个额外的空间。也许我错了,现在在第一个月后没有任何变化。@tehaaron:听起来你错过了我添加到循环体底部的那行;它分配给balance。肯定是拼写错误……读了10个字。非常感谢。我在这里补充了一个后续问题:如果你愿意参加。再次感谢。这里有一个关于代码审查的网站。
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