# Tutorial :Python for-loop counter error

### Question:

I am attempting to script a short code to figure out the number of days it takes to reach a given principal in the bank due to daily interest. Using my code below does not yield any errors when run in IDLE, but the counter returns 0. Any ideas what I missed?

``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  ``

### Solution:1

I'm not sure what you're getting at with this loop:

``for i in range(0):      if (Bal * Int) == Tar:          print '1'      else:          counter + 1  ``
1. `range(0)` is an empty list, so the loop won't execute at all.
2. `counter + 1` simply calculates one more than counter, it won't increment counter, you probably mean `counter += 1`
3. There's nothing in the loop that changes at each iteration, so if you ever get into it, it will be an infinite loop.

### Solution:2

I believe the formula to calculate final balance with interest is:

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

Assuming I got this correct, then you can find out how many interest periods it will take by:

``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  ``

### Solution:3

``In [5]: def test():     ...:     for i in range(0):     ...:         return '1'     ...:          ...:         In [6]: x = test()    In [7]: print x  ------> print(x)  None  ``

See the return value is 'None'. I don't know what are you trying to do. But The basic mistake is the Argument of range(x) function. The range(0) always return empty list.

### Solution:4

That's because you put range(0) which is an empty loop. Perhaps you could consider a while loop?

### Solution:5

Your loop `for i in range(0)` doesn't actually execute. `range(0)` returns an empty list `[]` which will skip the body of your for loop.

### Solution:6

Please explain what you think this does? Please update your question with an English-language explanation of how many times you think this look will work.

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

Hint. The answer is zero. The question is "why?" and "what were you trying to do?"

### Solution:7

You have been told the three or more problems with your code. If there's no particular reason to use a loop, it's better calculated with a formula:

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

or, for short,

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

Example: I have \$5000; how many years will it take to grow to \$10000 at 10% per annum?

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

Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »