Функция Python, которая помогает выбрать вывод на основе полученного ввода (создание чат-бота) - PullRequest
0 голосов
/ 31 октября 2019

Общая цель этой функции состоит в том, чтобы взять список слов, которые мы получили в качестве входных данных, список слов, чтобы проверить, появляются ли они на входе, и список возможных выходных данных, которые нужно вернуть, если что-то из спискапроверка есть в списке ввода.

Я определил функцию, называемую селектором, с тремя входами input_list, check_list и return_list. Я инициализировал вывод None. Затем я создал цикл for для просмотра списка и проверки того, что текущий элемент input_list находится в check_list. Если он находится в списке, выходные данные назначаются функции с именем random.choice в return_list.

Мой код:

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 голосов
/ 31 октября 2019
input_list = ['in', 'words']
check_list = ['words']

Причины различной длины IndexError в if input_list[u] == check_list[u]:, если u == 1, вот способ исправить это (я предполагаю, что все слова в check_list должны быть в input_list):

def selector(input_list, check_list, return_list):
     flag = True
     input_list = set(input_list)
     for i in check_list:
         if i not in input_list: 
             flag = False
     if flag:
         return random.choice(return_list)
     else:
         return None
     return output
0 голосов
/ 31 октября 2019

Скорее всего, потому что input_list имеет больше элементов, чем check_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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...