Я создаю текстовую игру на питоне и попал в дорожный блок. У меня есть функция, которая проверяет, содержит ли пользовательский ввод определенные слова, и если он это делает, возвращает пользовательский ввод, иначе он будет запрашивать ввод. Если вы напишете что-то, не содержащее одно из слов, оно снова вызовет функцию.Рекурсивная функция с теми же аргументами
def contains_words(prompt, words):
user_input = raw_input(prompt).strip().lower()
if user_input == "instructions":
print
instructions()
print
contains_words(prompt, words)
elif user_input == "i" or user_input == "inventory":
if len(inventory) == 0:
print
print "There is nothing in your inventory."
print
contains_words(prompt, words)
else:
print "Your inventory contains: " + inventory
contains_words(prompt, words)
else:
if user_input in words:
return user_input
else:
print
print "I did not understand your answer, consider rephrasing."
contains_words(prompt , words)
Вот я зову его:
pizza = contains_words("Do you like pizza?", ["yes", "no"])
В этой функции вы можете вызвать инструкции или инвентарь, а затем она будет вспомнить функцию. Все работает нормально, если вы вставляете одно из слов в свой ответ при первом запросе. Проблема возникает, когда вы вводите что-то неправильное, воспитываете инвентарь или воспитываете инструкции. Это заставляет функцию ничего не возвращать, а не вводить пользователя. Почему это происходит? Это потому, что функция сбрасывается, поэтому параметр равен none?
(a) Вы можете исправить отступы? Используйте ctrl + k с вашим кодовым блоком для этого (b) почему вы вызываете метод 'contains_words' и без' self' в разных местах? –
Все ваши рекурсивные вызовы должны возвращать их результаты. 'return contains_words (подсказка, слова)' – Ryan
«Self» - это случайность. Удаление – conyare