嵌套While循环不起作用

时间:2010-12-15 19:13:52

标签: python while-loop match

我正在尝试使用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

实际上,hash DOES等于hashlist [247],但不是识别它并继续使用print wordlist [247]的代码,python会挂起嵌套的While循环。任何想法或建议?

谢谢!

编辑:修复缩进并删除不相关的变量。

编辑#2:所有变量都在前面的脚本中定义。这只是一段给我带来麻烦的代码片段。 Hash和Hashlist [247]相等(print hash和print hashlist [247],每个都给出848作为输出)。

编辑#3:已解决 - 感谢您的帮助!

4 个答案:

答案 0 :(得分:3)

您发布的代码不会嵌套任何循环。

while count != 10:

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

这是唯一相关的代码。这是一个无限循环,假设计数没有从10开始。

答案 1 :(得分:3)

事情1: Pythonic做10次做事的方式是

for _ in range(10):
    ...

事情2:显然Python认为hash != hashlist[247],或者它不会无限循环。请尝试print hash, hashlist[247], hash == hashlist[247]进行检查。

事3:反正while cond: pass有什么意义?你想尝试做多线程的东西吗?

答案 2 :(得分:1)

考虑更新的帖子(使用缩进代码):如果while的初始值大于count,则顶级10将是无限的。

此外,如果hash != hashlist[247],以下循环也将是无限的(如果没有自定义__getitem__, __eq__并且从另一个线程更改值):

...
while hash != hashlist[247]:
   pass
...

答案 3 :(得分:0)

这是由于散列和散列表的类型不同:/。 str和int。我忽略了这一点,因为python解释器没有提到任何关于类型错误的东西,我已经习惯了它,我只是忘了检查。

感谢大家的帮助!

对任何有类似问题的人:

双重检查您的类型!!!