difflib.get_close_matches выкидывают имена в списке, если первый ответ неверен

Вот обновленная версия из моего предыдущего вопроса. Я добавляю в код, где, если имя get_close_matches не является именем человека, которого они хотели, отбросьте ближайшее совпадение и заново запустите функцию и возьмите второе ближайшее совпадение (теперь во-первых, поскольку функция будет бросать из первого матча).

Есть ли у вас какие-либо комментарии о том, как это можно написать лучше? И работа. >.>

Вот что я до сих пор:

def throwout(pickedName): employeeNames.remove(pickedName) pickedName = difflib.get_close_matches(userEmpName, employeeNames, 1) print(pickedName) userNameOK = input("Is this the name of the person you're looking for?\n\n Type 'Y' or 'N'.\n\n") employeeNames = ['Colton','Jayne','Barb','Carlene','Dick','Despina'] employeeNames.sort() userEmpName = input("Please enter the employee name you're searching for. We'll return the best match on record.") pickedName = difflib.get_close_matches(userEmpName, employeeNames, 1) print(pickedName) userNameOK = input("Is this the name of the person you're looking for?\n\n Type 'Y' or 'N'.\n\n") if userNameOK == "N" or "n": if pickedName in employeeNames: throwout(pickedName) else: break else: break 

Ошибка при запуске имен в списке:

 Traceback (most recent call last): File "C:/Python33/employee1.py", line 64, in <module> print(userAnswer + " is the right choice.\n") NameError: global name 'userAnswer' is not defined 

Я понимаю, что это означает, что, поскольку список имен не имеет больше имен от их удаления, глобальная переменная «userAnswer» затем не определена.

One Solution collect form web for “difflib.get_close_matches выкидывают имена в списке, если первый ответ неверен”

Нет необходимости создавать функцию, чтобы выкидывать имена из списка как list.remove(name) делает одно и то же в одной строке.

 import difflib employeeNames = ['Colton','Coltron','Colty','Jayne','Barb','Carlene','Dick','Despina'] employeeNames.sort() userEmpName = raw_input("Please enter the employee name you're searching for. We'll return the best match on record.") while True: global Answer pickedName = difflib.get_close_matches(userEmpName, employeeNames, 1) print(pickedName) print employeeNames if len(pickedName)==0: break userNameOK = raw_input("Is this the name of the person you're looking for?\n\n Type 'Y' or 'N'.\n\n") if (userNameOK=='n' or userNameOK=='N'): employeeNames.remove(pickedName[0]) else: Answer=pickedName[0] break print Answer+" is the right choice" 

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

Также, поскольку employeeNames изменяется каждый раз, когда Имя удаляется из него, лучше создать копию списка и работать над этим конкретным списком

  • Создание и применение diff в python
  • python difflib сравнение файлов
  • Сравнение двух файлов .txt с использованием difflib в Python
  •  
    Interesting Posts for Van-Lav

    Можно ли создать encodeb64 из объекта Image?

    Ошибка аутентификации django с использованием python-social-auth

    использовать caffe для обучения Lenet с данными CSV

    цикл по всем переменным-членам класса в python

    Какой ключ: хранить значение для использования с Python?

    Joomla и XMLRPC

    Получите максимум значений_числений после groupby

    можно установить переменную с несколькими, если статусы?

    Как настроить разрешения в django-rest-framework, чтобы пользователь сеанса мог только перечислять объекты, у которых есть внешний ключ для этого пользователя?

    Возвращение словаря длины слова в строке

    Ноутбук Jupyter не печатает журналы в выходной ячейке

    выберите несколько столбцов в кадре данных pandas с индексом столбца как последовательный номер

    Динамически получать элементы dict через getattr?

    Каков рекомендуемый пробел для нарезки с индексами выражений в Python?

    Как создать облако слов из моделей LDA в Python?

    Python - лучший язык программирования в мире.