Python初学者。这段Python代码是否尽可能高效?

Python初学者。这段Python代码是否尽可能高效?,python,Python,这个问题/解决方案让我想到了另一个相关的问题-非常感谢您的帮助 根据初始反馈更新了以下当前代码 我是Python的新手(这是我的第二个程序)。我目前正在使用麻省理工学院的开放式课件来获得一篇关于使用Python的CS的介绍,我正在编写习题集1。我已经创建了这个程序,在12个月内成功地重新创建了“测试用例1”(不包括“结果”部分…仍在处理),但我的问题是,以下(我的)代码是否尽可能高效?我觉得我在重复我自己,而这可能不是必要的 原始代码: balance = float(raw_input("Ou

这个问题/解决方案让我想到了另一个相关的问题-非常感谢您的帮助

根据初始反馈更新了以下当前代码

我是Python的新手(这是我的第二个程序)。我目前正在使用麻省理工学院的开放式课件来获得一篇关于使用Python的CS的介绍,我正在编写习题集1。我已经创建了这个程序,在12个月内成功地重新创建了“测试用例1”(不包括“结果”部分…仍在处理),但我的问题是,以下(我的)代码是否尽可能高效?我觉得我在重复我自己,而这可能不是必要的

原始代码:

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