Повторить функцию с помощью else

Итак, я создал функцию, и внутри я поместил команду if, чтобы проверить ответ, но когда ответ недействителен, я хочу повторить функцию, чтобы она снова спросила. Предполагается, что он запрашивает ввод A или B, но когда, например, я помещаю C, он должен снова вызвать функцию и повторить. Как мне заставить его повторно запрашивать ввод? Вот что я пробовал:

def function():
    data = input("A/B")
    if data == "A":
        print("A")
    elif data == "B":
        print("B")
    else:
        function()   #<-----problem here

Кажется, работает. Что не так?

Austin 20.07.2018 19:21

Файл "C: /Users//tsav1.py", строка 30, в функции function () NameError: имя 'function' не определено

daniel 20.07.2018 19:25

Вызовите свою функцию после ее определения.

Austin 20.07.2018 19:33
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
4
371
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

попробуйте цикл while:

ans = "C"
while ans! = "B" and ans! = "A":
    ans=input("A/B")   
print(ans) 

Но ваш путь тоже правильный ... (пробовал запустить здесь: pythontutor.com/visualize.html#mode=display)

Umbrelluck 20.07.2018 19:29

Не инициализируйте ans в "C", если он хочет добавить C в качестве допустимого значения в будущем, это может привести к проблемам (используйте пустую строку для инициализации ans = ""). Кроме того, с вашим кодом ввод a снова запросит ввод, что, вероятно, не является желаемым поведением. Вместо этого используйте while ans.upper() not in {"A","B"}:.

scharette 20.07.2018 19:30
Ответ принят как подходящий

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

def function():
    data = input("A/B")
    if data == "A":
        return("A")
    elif data == "B":
        return("B")
    else:
        return(function())

print(function())

Что это значит:

return(function())

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

Это рекурсивная функция. Для постройки достаточно вызвать с возвратом:

Else:
    return function()

Вы можете вставить функцию в переменную:

var = function()

И назовите это:

return var

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

def function():
    while True: 
        data = input("A/B") 
        if data == "A": 
            print("A") 
            return
        elif data == "B": 
            print("B")
            return

Как видно из приведенного выше кода, мы используем бесконечный цикл while, который будет продолжать цикл до тех пор, пока пользователь не введет «A» или «B». Если вы не знаете, что ключевое слово return может быть использовано для существования вне функции заранее.

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

Другие вопросы по теме