Итак, я создал функцию, и внутри я поместил команду if, чтобы проверить ответ, но когда ответ недействителен, я хочу повторить функцию, чтобы она снова спросила. Предполагается, что он запрашивает ввод A или B, но когда, например, я помещаю C, он должен снова вызвать функцию и повторить. Как мне заставить его повторно запрашивать ввод? Вот что я пробовал:
def function():
data = input("A/B")
if data == "A":
print("A")
elif data == "B":
print("B")
else:
function() #<-----problem here
Кажется, работает. Что не так?
Файл "C: /Users//tsav1.py", строка 30, в функции function () NameError: имя 'function' не определено
Вызовите свою функцию после ее определения.






попробуйте цикл while:
ans = "C"
while ans! = "B" and ans! = "A":
ans=input("A/B")
print(ans)
Но ваш путь тоже правильный ... (пробовал запустить здесь: pythontutor.com/visualize.html#mode=display)
Не инициализируйте ans в "C", если он хочет добавить C в качестве допустимого значения в будущем, это может привести к проблемам (используйте пустую строку для инициализации ans = ""). Кроме того, с вашим кодом ввод a снова запросит ввод, что, вероятно, не является желаемым поведением. Вместо этого используйте while ans.upper() not in {"A","B"}:.
Опубликованный вами образец кода работает так, как вы описали. Для более сложных функций, связанных с возвратом значений, я бы рекомендовал написать и называть это так:
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 может быть использовано для существования вне функции заранее.
Также я отвечал на этот вопрос по телефону, поэтому, если я допустил ошибку, извиняюсь.