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")
我有这个代码:
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")