【问题标题】:Why the second loop doesnt work为什么第二个循环不起作用
【发布时间】:2017-02-28 00:30:39
【问题描述】:

第二个循环不起作用。当我编译它不输出任何文本,它只是要求输入并停在那里

这意味着第二个循环没有被执行,只是第一个但我不知道为什么

balance0 = float(input("balance = " ))
annualInterestRate = float(input("annualInterestRate = " ))
monthlyPayment = 10
balance = 0


month = 1
while (0):
 balance = balance0
 while month <= 12:
    balance1= (balance + annualInterestRate * balance/12)
    balance1 = balance1 - (monthlyPayment)
    print("Remaining balance month " , month, " is ", balance1)
    balance = balance1
    month += 1
 if balance < 0:
       print("Lowest payment: ", monthlyPayment)
       break

 else: 
     monthlyPayment += 10

循环

     while month <= 12 

无法运行,为什么?

【问题讨论】:

  • 因为你有条件while (0),它转换为while False,它永远不允许你输入下面的语句。你不想要while balance != 0 或类似的东西吗?
  • while(0) 永远不会为真,因此不会被执行。
  • 如果你问我,看起来两个循环都不起作用

标签: python


【解决方案1】:

实际上是你的外循环没有运行。你有:

while (0):

由于(0) 永远不会是真实条件,因此该循环将永远不会执行。基于您稍后在其中有一个 break 以在满足某些条件时终止它的事实,您可能的意思是:

while (1):

顺便说一句,while True:generally equivalent,而且可能更惯用。

【讨论】:

  • 我现在感觉好傻,不知道为什么我记得那样哈哈
  • @rachuism 归档以备将来参考的一种好方法是在调试时在关键位置临时添加一些跟踪prints,这样您就可以快速可视化程序通过代码所采用的路径。通过这种方式,您通常可以缩小问题的根源并快速发现问题(例如外部循环未执行的事实)。
【解决方案2】:

其他人都已经发现了主要问题。您还忽略了重置月份计数器。结果是,如果每月 10 美元无法还清贷款,您将陷入无限循环。试试这个:

while (True):
  balance = balance0
  for month in range(1, 12+1):

当您知道需要迭代多少次时,请使用 for 语句。

此外,您可能会使用更好的客户提示:annualInterestRate 是一个可变因素,普通人难以阅读。将此更改为“年利率;例如 0.12 表示 12% 的利息”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多