Лучший способ обработать пользовательский ввод, совпадающий с несколькими возможностями: «Y» / «y» / «yes» - PullRequest
0 голосов
/ 01 июля 2019

Если вы зададите кому-нибудь вопрос «да / нет», ответ будет одним из этих двух вариантов.В программировании, что, если ответом будет "Y" или "y" или "yes" или что-то еще?

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

def note_maker(note):
    case_note = open("case_note.txt", "a+")
    update = case_note.write("\n" + note)
    multiple_inputs = input("Do you want to enter more details? Y/N")

    while multiple_inputs == "yes" or multiple_inputs == "YES" or multiple_inputs == "Yes" or multiple_inputs == "Y" or multiple_inputs == "y":

        update_again = case_note.write("\n" + input("Enter your additional information"))
        multiple_inputs = input("Do you want to enter more details?")

    case_note.close()

Есть ли способ контролировать пользовательский ввод в то, что я ожидаю?

Ответы [ 3 ]

0 голосов
/ 01 июля 2019

Попробуйте рефакторинг проверки ввода в новую функцию:

def is_affirmative(input: str) -> bool:
    return input.strip().lower() in ['y', 'yes']


def note_maker(note):
    case_note = open("case_note.txt", "a+")
    update = case_note.write("\n" + note)
    multiple_inputs = input("Do you want to enter more details? Y/N")

    while not is_affirmative(multiple_inputs):
        update_again = case_note.write("\n" + input("Enter your additional information"))
        multiple_inputs = input("Do you want to enter more details?")

    case_note.close()

0 голосов
/ 01 июля 2019

Вы можете иметь set действительных да ответов и нет ответов:

yes_responses, no_responses = {'y', 'yes'}, {'n', 'no'}

user_response = None
while user_response not in yes_responses and user_response not in no_responses:
  user_response = input("Do you want to enter more details? (Y/N): ").lower()

if user_response in yes_responses:
  print("The user responded yes.")
else:
  print("The user responded no.")

Пример использования:

Do you want to enter more details? (Y/N): zxc
Do you want to enter more details? (Y/N): YesNo
Do you want to enter more details? (Y/N): yEs
The user responded yes.

Примечание: Преимущество использования set над list или tuple состоит в том, что операция in равна O(1), а не O(N).

0 голосов
/ 01 июля 2019

Вы можете сократить ввод данных пользователем и сделать его строчными, что должно помочь.

Например: user_input = input("Something? y/n: ")[0].lower()

Таким образом, если они введут «Y», «Да», «да» или «да», то в итоге получится «y».

...