tommyc38
tommyc38

Reputation: 741

Python While Loop - Variable Not Updating?

This code simply looks for a string in another string and returns the last postion of the occurance in the search string or -1 if its is not found.

I don't understand why my variable next_y is not updating considering that pos is an input into computation of next_y. My thought that is that if I update pos then next_y should also update. Instead pos gets updated and remains in the loop forever.

def find_last(x,y):
    if x.find(y) == -1:
        return -1

    pos = x.find(y)
    next_y = x.find(y, pos + 1)

    while next_y != -1:
        pos = pos + next_y

    return pos


search = 'tom ran up but tom fell down'
target = 'tom'

print(find_last(search,target))

Upvotes: 1

Views: 10739

Answers (2)

Szymon Zmilczak
Szymon Zmilczak

Reputation: 383

You don't change the value of next_y in the while loop, so its value isn't updated. Value of next_y is calculated once and compared for ever (or only once). To update this value you should call 'next_y = x.find(y, pos + 1)' in the loop.

def find_last(x,y):
  if x.find(y) == -1:
    return -1
  pos = x.find(y)
  next_y = x.find(y, pos + 1)
  while next_y != -1:
    pos = pos + next_y
    next_y = x.find(y, pos + 1)
  return pos

search = 'tom ran up but tom fell down'
target = 'tom'

print(find_last(search,target))

Upvotes: 1

JCOC611
JCOC611

Reputation: 19759

As mentioned in the comments, if you want to update next_y, you need to do it explicitly:

while next_y != -1:
    pos = pos + next_y
    next_y = x.find(y, pos + 1)

Upvotes: 0

Related Questions