Python未知的无限循环

时间:2013-09-06 22:22:24

标签: python

目前我正在编写一门编程课程而且我一直坚持这个问题。当我点击提交时,它说有一个无限循环,我已经测试了几个小时的开始和结束,似乎无法找到它。

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!")

这是它给我的错误。

  

你的程序输出太多了!这可能是因为代码中存在无限循环。

4 个答案:

答案 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"。这段代码不好。