-4

目前我正在上一门编程课程,我被困在这个问题上。当我点击提交时,它说有一个无限循环,我已经测试了几个小时并结束了,似乎找不到它。

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

4 回答 4

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 将始终为真,因为 while 循环仅在 text != "go away" 时继续。不需要这个 if-else 语句。

于 2013-09-06T22:28:03.227 回答
1

所以 - 这里有一个主要的逻辑错误:

当 text != "go away" 时,你有一个循环继续进行。但是,您检查的第一件事是 text != "go away"。这是多余的,您刚刚检查过。

我认为它不起作用的原因是 input() 的问题。好像没有提示你。

于 2013-09-06T22:28:14.013 回答
1

所有其他答案都指出了您的代码中的问题,而且它们是对的……但它们没有解释您从(似乎是)自动代码判断器获得的结果。

您的程序无法终止的唯一方法是它从未'go away'在输入中遇到过。请注意,它必须是精确 'go away'的。如果有多余的空格,它将不匹配。例如,'go away '不会终止您的程序。也许自动法官正在为您的程序提供一些意想不到的空白(这也可能是由于行尾不匹配的问题造成的)。

您可以通过从接收到的输入中去除无关的空白来防范这种情况。例如,您可以更改

text = input()

text = input().strip()

看看是否有帮助。

于 2013-09-06T23:19:36.743 回答
0

while text != "go away":
    if text != "go away":
        # ...
    else:
        text = "go away"

,我们已经确定了text != "go away"。这段代码不好。

于 2013-09-06T22:27:47.237 回答