目前我正在编写一门编程课程而且我一直坚持这个问题。当我点击提交时,它说有一个无限循环,我已经测试了几个小时的开始和结束,似乎无法找到它。
import re
text = ""
print("Hello, my name is Eliza. What would you like to talk about?")
while text != "go away":
if text != "go away":
text = input()
text = text.lower()
if re.search(r"\bfeel\b", text) is not None:
print("Do you often feel that way?")
elif re.search(r"\bi am\b", text) is not None:
m = str(re.findall('i am\w* (\w+)',text))
m = re.sub('[\'\]\[]', '', m)
print("How long have you been",m+"?")
elif "you" in text:
if "me" in text:
m = str(re.findall('you\w* (\w.*)',text))
m = m.replace("me","you")
m = re.sub('[\'?\]\[]', '', m)
print("What makes you think I",m+"?")
else:
print("Please go on")
elif text == "go away":
text = "go away"
break
else:
print("Please go on")
else:
text = "go away"
print("I hope I have helped you!")
这是它给我的错误。
你的程序输出太多了!这可能是因为代码中存在无限循环。
答案 0 :(得分:2)
您的代码有一些冗余,但它适用于我。 python版本2和3之间有一些重要的区别,所以你应该指定(特别是函数input()
和raw_input()
。我用python 2运行你的代码,所以我给了字符串到输入提示。
Hello, my name is Eliza. What would you like to talk about?
"hi, I am askewchan"
('How long have you been', 'askewchan?')
"go away"
I hope I have helped you!
这是一个冗余的例子:
while text != "go away":
if text != "go away":
...
else:
text = "go away"
第一个if将永远为true,因为while循环仅在text!=“go away”时才会继续。没有必要使用if-else语句。
答案 1 :(得分:1)
所以 - 这里有一个主要的逻辑错误:
你有一个循环,一直在文本!=“走开”。但是,你要检查的第一件事就是文字!=“走开”。这是多余的,您只需检查一下。
我认为它不起作用的原因是input()的问题。它似乎没有促使你。
答案 2 :(得分:1)
所有其他答案都指出了代码中存在的问题,而且它们是正确的......但它们并没有解释您从(似乎是)自动代码判断中得到的结果。
程序无法终止的唯一方法是它在输入中永远不会遇到'go away'
。请注意,它必须完全 'go away'
。如果有额外的空格,则不匹配。例如,'go away '
不会终止您的计划。也许自动判断程序正在为程序提供一些意想不到的空白(这也可能是由于行结尾不匹配的问题造成的)。
您可以通过从接收的输入中删除无关的空白来防范这种情况。例如,您可以更改
text = input()
到
text = input().strip()
看看是否有帮助。
答案 3 :(得分:0)
在
while text != "go away":
if text != "go away":
# ...
else:
text = "go away"
,我们已经建立了text != "go away"
。这段代码不好。