Как вернуть еще один возврат? - PullRequest
0 голосов
/ 02 июля 2019

Я хочу использовать функции в моей программе на Python, чтобы сделать ее более чистой и эффективной. В моей функции я возвращаю true или false в зависимости от выбора пользователя. Хотя в случае, если они вводят неправильный / недействительный ответ, я бы хотел вернуть ответ таким образом, чтобы больше вопросов не задавалось.

Edit:

Чтобы быть немного более информативным; Я хотел бы воссоздать это:

def askquestion(question):
    response = input(question, "Enter T or F")
    if response == "T":
        return True
    elif response == "F":
        return False
    else:
        return None 

def askmultiple():
    questionOne = askquestion("Do you fruits?")
    if questionOne == None:
        return # Exit the function, not asking more questions

    questionTwo = askquestion("Do you Apples?")
    if questionTwo == None:
        return # Exit the function, not asking more questions

Я хочу потом отключить проверку, если это None, и просто вернуть return.

Ответы [ 3 ]

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

Вы можете попробовать использовать цикл while, чтобы убедиться, что пользователь вводит правильный ввод.Например:

while not response.isdigit():
     response =  input("That was not a number try again")

В этом случае, хотя пользовательский ввод, «response» не является числом, консоль Python будет продолжать запрашивать ответ.Для базового шаблона

while not (what you want):
    (ask for input again)

Надеюсь, это вам поможет.:)

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

Использовать поток исключений.

def ask_question(prompt):
    """Asks a question, translating 'T' to True and 'F' to False"""
    response = input(prompt)

    table = {'T': True, 'F': False}
    return table[response.upper()]  # this allows `t` and `f` as valid answers, too.

def ask_multiple():
    questions = [
        "Do you fruits?",
        "Do you apples?",
        # and etc....
    ]

    try:
        for prompt in questions:
            result = ask_question(prompt)
    except KeyError as e:
        pass  # this is what happens when the user enters an incorrect response

Поскольку table[response.upper()] повысит KeyError, если response.upper() не равно ни 'T', ни 'F', вы можете поймать его ниже и использовать этот поток, чтобы вывести вас из цикла.


Другой вариант - написать валидатор, который заставляет пользователя правильно ответить.

def ask_question(prompt):
    while True:
        response = input(prompt)
        if response.upper() in ['T', 'F']:
            break
    return True if response.upper() == 'T' else False
0 голосов
/ 02 июля 2019

Когда вы не создаете оператор возврата в конце функции, равной единственному return, и эти два равны return None вызову.

Таким образом, вы можете организовать свой код как:

if returned_value is None:
    # do something a
elif returned_value is False:
    # do something else
else:  # value is True
    # do something b
...