Валидировать тест в Python так, чтобы единственными допустимыми входными данными для повторного теста были 'y' или 'n'? - PullRequest
0 голосов
/ 27 мая 2018

Я использую Python 3.1.3 и пытаюсь написать викторину, чтобы проверить свои знания имен элементов и соответствующих атомных номеров периодической таблицы, используя генераторы случайных чисел, чтобы выбрать, запрашивать ли у пользователя запросатомный номер или имя элемента и о каком элементе спрашивать.В настоящее время я пытаюсь проверить все пользовательские данные.Я успешно проверил числовые и алфавитные входные данные, но изо всех сил пытаюсь подтвердить опцию «да» или «нет» для повторного прохождения теста, принимая входные данные: «y» или «n».Ранее я пытался использовать несколько операторов IF и ELIF, чтобы определить, дал ли пользователь ввод, равный допустимым значениям ввода, но после поиска переполнения стека я изменил свой код так:

##Functions
def validating_y_or_n_only(a,b,c):
    while b == 0:
        if not a:
            print("\n\tYou didnt enter anything.")
        elif a in ["y","n"]:
            b = 1
        else :
            print("\n\tYour input was invalid.")
        print("\tOnly 'y' and 'n' are considered valid.\n")
        print(c)
        a = str(input("\tEnter 'y' for yes or 'n' for no: "))
    return a

##Main Program
retake = "\n\tWould you like to re-take the quiz?"
print(retake)
replay_option = str(input("\tEnter 'y' for yes or 'n' for no: "))
replay_option = validating_y_or_n_only(replay_option,condition,retake)

Однако это создает бесконечный цикл и даже допустимые входные данные 'y' или 'n' или не принимаются.

1 Ответ

0 голосов
/ 27 мая 2018

Ваша логика кажется слишком сложной.Есть много переменных, которые кажутся ненужными или не используются.Также рекомендуется использовать значимые имена вместо a, b, c.

. Вот одно решение, которое использует break в цикле while, чтобы указать, когда были введены действительные данные.

def validating_y_or_n_only():
    while True:
        answer = str(input("\tEnter 'y' for yes or 'n' for no: "))
        if answer in ('y', 'n'):
            break
        elif not answer:
            print('\n\tYou didnt enter anything.')
        else:
            print('\n\tYour input was invalid.')
            print('\tOnly "y" and "n" are considered valid.\n')
    return answer

replay_option = validating_y_or_n_only()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...