Why does:
for i in range(10):
i += 1
print(i)
return:
1
2
3
4
5
6
7
8
9
10
instead of:
2
4
6
8
10
?
Here would be some details if any more were necessary.
for i in range(10):
i += 1
print(i)
is equivalent to
iterator = iter(range(10))
try:
while True:
i = next(iterator)
i += 1
print(i)
except StopIteration:
pass
The iterator
that iter(range(10))
produces will yield values 0
, 1
, 2
... 8
and 9
each time next
is called with it, then raise StopIteration
on the 11th call.
Thus, you can see that i
gets overwritten in each iteration with a new value from the range(10)
, and not incremented as one would see in e.g. C-style for
loop.
you should use steps in your range:
for i in range(2,11,2):
print(i)
output:
2
4
6
8
10
i
is assigned at each loop iteration overwriting any changes done to its value.
for i in range(10):
i += 1
print(i)
is equivalent to:
i = 0 # first iiteration
i += 1
print(i)
i = 1 # second iiteration
i += 1
print(i)
i = 2 # third iiteration
i += 1
print(i)
# etc up to i = 9