# Different results with for loop and while loop

While writing a Sage script, I ran into a strange case where code worked correctly with specific constants, but when I looped over them in a `for`

loop, it no longer worked. After trying this and that, I found that a `while`

loop did not have this problem! As this felt very strange, recording the question here as a possible "gotcha".

Here's the code:

```
var('z')
from collections import defaultdict
p = defaultdict(dict)
N = 30
for h in range(N): p[0][h] = z**h
def fill(w):
for h in range(N - w):
p[w][h] = w/(w+h)*p[w-1][h+1] + h/(w+h)*(p[w][h-1] if h>=1 else 0)
## This doesn't work:
# for w in range(1, N): fill(w)
## Instead we need the below:
w = 1
while w < N:
fill(w)
w += 1
```

In short, the problem is that `for w in range(1, N): ...`

results in all zero polynomials, while `w = 1; while w < N: ...`

does not.

Related question: https://ask.sagemath.org/question/307...