2015-11-07 5 views
0

Этот код просто ищет строку в другой строке и возвращает последнее сообщение о возникновении в строке поиска или -1, если его не найдено.Python While Loop - переменная, не обновляющаяся?

Я не понимаю, почему моя переменная next_y не обновляется, учитывая, что pos - это вход в вычисления next_y. Я думал, что если я обновлю pos, то next_y также должен обновиться. Вместо этого pos обновляется и остается в цикле навсегда.

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)) 
+0

Нет, это предположение неверно: «Я думал, что если я обновляю' pos', тогда 'next_y' также должен обновляться». Вам нужно явно назначить 'next_y', т. Е.' Next_y = <вставить что-то здесь> ' –

+1

x.find() возвращает число, результат вычисления при его запуске. Если вы хотите снова вычислить это значение, вам нужно снова позвонить ему. – lolopop

ответ

0

Вы не измените значение next_y в то время цикла, поэтому его значение не обновляется. Значение next_y вычисляется раз и сравнивается навсегда (или только один раз). Чтобы обновить это значение, вы должны называть 'next_y = x.find (y, pos + 1)' в цикле.

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)) 
0

Как уже упоминалось в комментариях, если вы хотите обновить next_y, что вам нужно сделать это явно:

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