[英]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.