Search code examples
pythonvariablesscoping

Variable scoping of "for i in range(XX)" in Python


This is a exercise for Python, and I am confused about the variable scoping in Python.

"Return True if the given string contains an appearance of "xyz" where the xyz is not directly preceeded by a period (.). So "xxyz" counts but "x.xyz" does not.

xyz_there('abcxyz') → True
xyz_there('abc.xyz')→ False xyz_there('xyz.abc') → True"

This is my answer:

def xyz_there(str):
   for i in range(len(str)-2):
        if str[i]=='.':
           i+=1
           continue
        elif str[i:i+3]=='xyz':
           return True
   return False

And it is wrong. xyz_there('abc.xyz') → False will always return True. Because the variable i will always be 0,1,2.... And the i+=1 doesn't mean anything. Why???


Solution

  • It's not that you can't change the value of i. You can. The trick here is that you are iterating over the contents of the return value of range. Each time the loop resets you get the next value from that iterable, it does not increment the value of i to progress the loop.