Python 无限循环

Python infinite while loop

我有这个代码:

Text = input("Copy Text here ")
WordList = Text.split(" ")
i = 0
for i in range (0, len(WordList)-1):
     i += 1
while (i <= len(WordList))  :
    if (WordList[i] == "Name" or "Name1" or "Name2") :
        print(WordList[i])
     else:
        print("No DATA")

如果我 运行 这段代码会遇到两个问题:首先它只打印最后一个条目,这可能是因为我忘记告诉它在 "Name"、"Name2" 时停止计数或找到 "Name1"。更大的问题是这会以无限循环结束,我不知道为什么。

你有两个循环:一个 for 循环,每次递增 i 什么都不做(这是一个错误,因为 for 已经为你做了),还有一个 while 循环尝试执行实际工作,但 运行 直到 之后 for 循环终止。

无论如何,使用索引变量遍历列表是解决 Python 中问题的错误方法。相反,您应该直接迭代它:

text = "a b c Name d e Name2 f Name1 g"

for word in text.split(" "):
    if word in ("Name", "Name1", "Name2"):
        print(word)
    else:
        print("No DATA")

原始代码中的另一个问题是行

if (WordList[i] == "Name" or "Name1" or "Name2") :

... 这与您的想法不符。这里实际发生的是 "Name" or "Name1" or "Name2" 被评估为 "Name"(因为 short circuit logic),然后测试它与 WordList[i] 是否相等。测试某物是否是多个值之一的正确方法是使用 in 运算符,如上面的代码所示。

text = input("Copy Text here ")
wordlist = text.split(" ")
for i in wordlist:
    if (i in ["Name", "Name1", "Name2"]):
        print (i)
    else:
        print ("No DATA")

你把事情复杂化了 python 很好地处理了迭代,你不需要在每次迭代后增加计数器,实际上你不需要任何类型的计数器。

将循环混合在一起。第一个循环唯一的功能是不断添加到 i 直到它是你的单词列表的长度 - 1.

第二个循环将继续循环直到 i > wordlist 的长度,除非您在该循环中更改 i 的值,否则它不会这样做。

这也是它会打印最后一个单词的原因,因为 i 始终是 wordList - 1。

试试这个

for x in range (0, len(WordList)):
    if ((WordList[x] == "Name") or (WordList[x] ==  "Name1") or (WordList[x] ==  "Name2")):
        print (WordList[x])
    else:
        print ("No Data")