-3

我正在尝试编写一个短代码来计算由于每日利息而达到银行给定本金所需的天数。在 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
4

7 回答 7

6

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

for i in range(0):
    if (Bal * Int) == Tar:
        print '1'
    else:
        counter + 1
  1. range(0)是一个空列表,所以循环根本不会执行。
  2. counter + 1只是比计数器多计算一个,它不会增加计数器,你可能是说counter += 1
  3. 循环中没有任何东西在每次迭代中都会改变,所以如果你进入它,它将是一个无限循环。
于 2010-07-26T00:38:50.983 回答
3

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

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
于 2010-07-26T01:30:12.433 回答
2
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) 总是返回空列表。

于 2010-07-26T05:37:27.553 回答
0

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

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-07-26T01:35:20.443 回答
0

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

于 2010-07-26T00:35:52.370 回答
0

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

于 2010-07-26T00:36:16.650 回答
0

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

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

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

于 2010-07-26T00:37:05.147 回答