繁体   English   中英

Python无限while循环

[英]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")

如果运行此代码,则会遇到两个问题:首先,它仅打印最后一个条目,这可能是因为我忘记告诉它在找到“名称”,“名称2”或“名称1”时停止计数。 更大的问题是,这以无限循环结束,我不知道为什么。

您有两个循环:一个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" (由于短路逻辑 ),然后将其与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的值,否则它将不这样做。

这也是为什么它会打印最后一个单词的原因,因为我始终是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")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM