Вложенные пока петли не работают
Я пытаюсь использовать цикл 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 ответа
Это произошло из-за того, что хэш и хэш-лист были другого типа:/. ул и инт. Я упустил это из виду, поскольку интерпретатор python ничего не упомянул об ошибке типа, к которой я привык, и я просто забыл проверить.
Спасибо всем за вашу помощь!
Для тех, у кого есть похожие проблемы:
ДВОЙНОЙ ПРОВЕРИТЬ СВОИ ВИДЫ!!!
Код, который вы разместили, не вкладывает циклы while.
while count != 10:
for x in rawinput[pos]:
a = ord(x)
hash = hash + a
Это единственный соответствующий код. Это бесконечный цикл, предполагая, что отсчет не начался с 10.
Вещь 1: Pythonic способ сделать что-то 10 раз
for _ in range(10):
...
Дело 2: ясно, что Python думает, что hash != hashlist[247]
, или это не будет петля бесконечно. Пытаться print hash, hashlist[247], hash == hashlist[247]
Проверять.
Дело 3: какой смысл while cond: pass
тем не мение? Вы пытаетесь делать многопоточные вещи или что-то?
Учитывая обновленный пост (с отступом кода): верхний уровень while
будет бесконечным, если начальное значение count
больше, чем 10
,
Кроме того, если hash != hashlist[247]
следующий цикл также будет бесконечным (если нет __getitem__, __eq__
и изменение значений из другого потока):
...
while hash != hashlist[247]:
pass
...