我正在学习如何使用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周,所以这对我来说真的很新,感谢您的帮助:)
答案 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
并没有阻止它的方法。
编辑:
您还需要修复两件事:
让我们更改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()
在no_match_intent
内部,应该是responses =
而不是responses: