【问题标题】:Python for-loop counter errorPython for循环计数器错误
【发布时间】:2010-07-26 00:32:56
【问题描述】:

我正在尝试编写一个短代码来计算由于每日利息而达到银行给定本金所需的天数。在 IDLE 中运行时,使用下面的代码不会产生任何错误,但计数器返回 0。有什么我错过的想法吗?

def main():
    # irrelevant code elided by msw, Bal, Int and Tar are numeric
    counter = 0
    for i in range(0):
        if (Bal * Int) == Tar:
            print '1'
        else:
            counter + 1
    print counter

【问题讨论】:

  • 也许我遗漏了一些明显的东西,但 'range(0)' 将返回一个空列表,并且你的 'for' 循环永远不会开始。
  • @Greg Schmidt:为了那些回答的人的利益,最好发布证明失败所需的最少代码(它也可以帮助您看到自己的错误)。
  • 老实说,我看不出这个程序是如何工作的。你几乎可以肯定永远不会让 bal*int 完全等于 tar。你需要某种范围。此外,您的余额似乎不是每天都在产生利息,因此您只是一遍又一遍地进行相同的比较 (Bal * Int) == Tar。报废或报废柜台。此外,您似乎没有使用提示(?)来使用数学函数(也许是幂函数?)
  • 第一行代码:从数学导入 * 它被编辑掉了。
  • 您的代码缺少最重要的东西:cmets 用英语描述您要完成的工作。

标签: python for-loop counter


【解决方案1】:

我不确定你在这个循环中得到了什么:

for i in range(0):
    if (Bal * Int) == Tar:
        print '1'
    else:
        counter + 1
  1. range(0) 是一个空列表,所以循环根本不会执行。
  2. counter + 1 只是计算比计数器多一,它不会增加计数器,你可能是说 counter += 1
  3. 循环中的任何内容在每次迭代时都不会发生变化,因此如果您进入其中,它将是一个无限循环。

【讨论】:

  • 基本上,我正在使用计数器来尝试生成达到帐户中目标 (Tar) 余额所需的天数。
  • @Greg Schmidt:“我正在使用计数器来尝试生成所需的天数”。不你不是。阅读答案。那个循环什么都不做。
【解决方案2】:

我相信计算最终余额的公式是:

Final = Principal * ( 1 + interest ) ** interest_period

假设我猜对了,那么您可以通过以下方式了解它需要多少个利息期:

def how_long(start_money, interest_rate, final_money):
    day = 0
    money = start_money
    while True:
        if money >= final_money:
            break
        day += 1
        money = start_money * (1 + interest_rate)**day

    return day, money

【讨论】:

  • 考虑while money < final_money:,而不是“while True:/if not condition:/break”
【解决方案3】:
In [5]: def test():
   ...:     for i in range(0):
   ...:         return '1'
   ...:     
   ...:     

In [6]: x = test()

In [7]: print x
------> print(x)
None

看到返回值为'None'。 我不知道你想做什么。但基本错误是 range(x) 函数的参数。 range(0) 总是返回空列表。

【讨论】:

    【解决方案4】:

    那是因为你放了 range(0) 这是一个空循环。或许你可以考虑一个while循环?

    【讨论】:

      【解决方案5】:

      您的循环 for i in range(0) 实际上并未执行。 range(0) 返回一个空列表 [],它将跳过你的 for 循环体。

      【讨论】:

        【解决方案6】:

        请解释一下您认为这是做什么的?请更新您的问题,并用英语解释您认为这种外观可以工作多少次。

        counter = 0
        for i in range(0):
            if (Bal * Int) == Tar:
                print '1'
            else:
                counter + 1
        

        提示。答案是零。问题是“为什么?”和“你想做什么?”

        【讨论】:

          【解决方案7】:

          您已被告知您的代码存在三个或更多问题。如果没有特别的理由使用循环,最好用公式计算:

          future_value = present_value * (1 + interest_rate_per_period) ** number_of periods
          

          或者,简称,

          f = p * (1 + i) ** n
          f / p = (1 + i) ** n
          log(f / p) = n * log(1 + i)
          n = log(f / p) / log(i + i)
          

          示例:我有 5000 美元;以每年 10% 的速度增长到 10000 美元需要多少年?

          >>> from math import log
          >>> f = 10000.0
          >>> p = 5000.0
          >>> i = 0.1
          >>> n = log(f / p) / log(1 + i)
          >>> n
          7.272540897341713
          >>>
          

          【讨论】:

            猜你喜欢
            • 2010-11-14
            • 2018-08-04
            • 1970-01-01
            • 2021-10-10
            • 1970-01-01
            • 2018-11-04
            • 1970-01-01
            • 2021-08-22
            • 1970-01-01
            相关资源
            最近更新 更多