Вложенные пока петли не работают - PullRequest
1 голос
/ 15 декабря 2010

Я пытаюсь использовать цикл while, чтобы найти совпадение между двумя значениями.Один является статическим, а другой - записью в списке.Это код:

 while count != 10:

    for x in rawinput[pos]:
       a = ord(x)
       hash = hash + a

    print hashlist[247]
    print hash
    print wordlist[247]

    while hash != hashlist[247]:
       pass


    print wordlist[247]
    hash = 0 
    count = count + 1

На самом деле хеш ДОЛЖЕН быть равен хеш-листу [247], но вместо того, чтобы распознать его и продолжить код со списком печати [247], python зависает во вложенном цикле while,Есть идеи или предложения?

Спасибо!

Редактировать: Исправлены отступы и удалены нерелевантные переменные.

Редактировать # 2: Все переменные определены ранее в скрипте.Это всего лишь фрагмент кода, который доставляет мне неприятности.Hash и Hashlist [247] равны (выводят print hash и print hashlist [247] каждый по 848).

Редактировать # 3: решено - Спасибо за помощь!

Ответы [ 4 ]

3 голосов
/ 15 декабря 2010

Вещь 1: Pythonic способ сделать что-то 10 раз это

for _ in range(10):
    ...

Вещь 2: ясно, что Python думает, что hash != hashlist[247], иначе он не зациклится бесконечно. Попробуйте print hash, hashlist[247], hash == hashlist[247] проверить.

Вещь 3: какой смысл while cond: pass в любом случае? Вы пытаетесь делать многопоточные вещи или что-то?

3 голосов
/ 15 декабря 2010

Код, который вы разместили, не вкладывает циклы while.

while count != 10:

    for x in rawinput[pos]:
       a = ord(x)
       hash = hash + a

Это единственный соответствующий код. Это бесконечный цикл, предполагая, что отсчет не начался с 10.

1 голос
/ 15 декабря 2010

Учитывая обновленную запись (с отступом кода): верхний уровень while будет бесконечным, если начальное значение count больше 10.

Также, если hash != hashlist[247], следующий цикл также будет бесконечным (если нет пользовательских __getitem__, __eq__ и изменяющих значений из другого потока):

...
while hash != hashlist[247]:
   pass
...
0 голосов
/ 15 декабря 2010

Это произошло из-за того, что хэш-лист и хэш-лист были другого типа: /.ул и инт.Я упустил это из виду, поскольку интерпретатор python ничего не упомянул об ошибке типа, к которой я привык, и просто забыл проверить.

Спасибо всем за помощь!

Для тех, у кого похожая проблема:

ДВОЙНОЙ ПРОВЕРЬТЕ ТИПЫ !!!

...