Python函数,可根据接收到的输入帮助选择输出(构建为聊天机器人)

时间:2019-10-31 04:23:16

标签: python list loops conditional-statements chatbot

此功能的总体目标是获取我们作为输入得到的单词列表,要检查它们是否出现在输入中的单词列表以及如果列表中的某些内容返回到则返回的可能输出列表检查在输入列表中。

我定义了一个名为选择器的函数,具有三个输入input_list,check_list和return_list。我将输出初始化为无。接下来,我创建了一个for循环以遍历列表,并检查input_list的当前元素是否在check_list中。如果它在列表中,则将输出分配给return_list上一个名为random.choice的函数。

我的代码:

def selector(input_list, check_list, return_list):

     output = None

     for u in range(len(input_list)):
             if input_list[u] == check_list[u]:
                 output = random.choice(return_list)

     return output

上面的代码在执行时不会出错,但是,在断言我的函数时,我总是遇到索引错误,我相信这与代码的条件部分有关。

assert callable(selector)

assert selector(['in', 'words'], ['words'], ['yes']) == 'yes'

assert selector(['in', 'words'], ['out'], ['yes']) == None

IndexError                                    Traceback (most recent call last)

<ipython-input-77-e84ac970fd7f> in <module>

      1 assert callable(selector)

      2 

----> 3 assert selector(['in', 'words'], ['words'], ['yes']) == 'yes'

      4 assert selector(['in', 'words'], ['out'], ['yes']) == None

<ipython-input-76-2445f1f5eac9> in selector(input_list, check_list, return_list)
      3     output = None
      4     for u in range(len(input_list)):
----> 5         if input_list[u] == check_list[u]:
      6             output = random.choice(return_list)
      7 

IndexError: list index out of range

2 个答案:

答案 0 :(得分:0)

最可能是因为input_listcheck_list具有更多的元素

我怀疑您正在寻找类似这样的东西(未经测试):

def selector(input_list, check_list, return_list):

    for item in check_list:
        if item in input_list:
            return random.choice(return_list)
    return None

答案 1 :(得分:0)

input_list = ['in', 'words']
check_list = ['words']

如果IndexError,长度不同会导致{{1}中的if input_list[u] == check_list[u]:,这是一种解决方法(我假设u == 1中的所有单词都必须在{{1}中}):

check_list