聊天机器人问题-无限递归-Codecademy问题

时间:2020-04-19 14:18:56

标签: regex python-3.x chatbot

我正在学习如何使用Codecademy进行编码,但我确实遇到了一个问题,很想指出正确的方向!

大部分代码都能正常工作,我只是无法使它正确地响应.match_reply函数。想法是,聊天机器人应在self.alienbabble中识别正则表达式,并以适当的答案进行响应。但是,该函数的所有响应都可以无限递归进行调试。

  JLabel two = new JLabel();
   ImageIcon jaina= new ImageIcon("images/jaina.gif");
  two.setBounds(0,0,300,300);
   two.setIcon(jaina);

我觉得有一个非常简单的解决方案,我只编码了1周,所以这对我来说真的很新,感谢您的帮助:)

1 个答案:

答案 0 :(得分:4)

答案确实很简单。让我们将代码缩减为可重复的代码:

def match_reply(self, reply):
    for key, value in self.alienbabble.items():
      # I omitted the 3 lines that were here - defining 'intent', 'regex_pattern' and 'regex' - 
      # since at this point they're yet not used
      reply = input(self.match_reply(reply)) # oops! self.match_reply is called again!

如您所见,您递归调用self.match_reply并没有阻止它的方法。

编辑:

您还需要修复两件事:

  1. 让我们更改match_reply

    a。让我们给它一个更合适的名称match_alien_response
    b。让我们做它应该做的事情:匹配一个答复。因此,我们不需要它来从用户那里获得其他输入。
    C。确保确保它迭代alienbabble中的所有键并且不会立即返回。
    d。我们需要使用re.findall来获取字符串中的所有匹配项

    所有这些更改为我们提供了以下代码:

    def match_alien_response(self, userReply):
      found = False
      for intent, regPattern in self.alienbabble.items():
        found_match = re.findall(regPattern, userReply)
        if found_match and intent == 'describe_planet_intent':
          return self.describe_planet_intent()
        elif found_match and intent == 'answer_why_intent':
          return self.answer_why_intent()
        elif found_match and intent == 'cubed_intent':
          return self.cubed_intent(found_match[0])
      if not found:
        return self.no_match_intent()
    
  2. no_match_intent内部,应该是responses =而不是responses: