Попытка выйти из программы не работает

#python-3.x #function

Вопрос:

В настоящее время я сам изучаю python по книгам, YouTube и т. Д. Недавно я начал с учебника по Python — Python для начинающих [Полный курс]. Я пытался самостоятельно создать несколько более масштабных программ (изучая документацию на python), чем те, что представлены в этом видео. Следовательно, это мой вопрос:

Я пытаюсь найти решение для выхода из функции the_func после нажатия клавиш (n, q ,e) . К сожалению, после выбора варианта не повторять попытку цикл все еще выполняется. Это вывод, скопированный с терминала:

 Guess the secret number: 1
Guess the secret number: 2
Guess the secret number: 3
Sorry, you are loser!
------------------------- 

Would you tray again? Y/N
 y
Guess the secret number: 9
The secret number was 9.
You are won!
------------------------- 

Would you tray again? Y/N
 n
Thank you!
Guess the secret number: 

 

Вы можете видеть , что даже после выбора n все начинается сначала.

Это и есть код:

 # Guessing Game

def the_func() :
    
    again = 'Would you tray again? Y/N'
    scecret_number = 9
    guess_count = 0
    guess_limit = 3


    while guess_count < guess_limit:
        guess = int(input("Guess the secret number: "))
        guess_count  = 1
        
        if guess == scecret_number:
            print(f"The secret number was {scecret_number}.nYou are won!")
            break

    else:
        print("Sorry, you are loser!")


    print("-" * int(len(again)), "n")
    print(again)

    answer = input(" ")

    while True:
        if answer.lower() == "y":
            the_func()
            
        #elif answer.lower() == "n":
        if answer.lower() in {'n', 'q', 'e'}:
            print("Thank you!")
            
            #return
            break
#         else:
#             print("Sorry, that was an invalid command!")

    the_func()

the_func()
 

Любая помощь будет признательна.

Ответ №1:

Проблема, с которой вы сталкиваетесь, известна как рекурсия. Проще говоря, функция вызывается несколько раз в конце. Вот пример, который может прояснить это для вас больше:

 def foo()
    while True:
        print('xyz')
        break
    foo() # Calling the function at the end causes recursion, i.e., infinite looping of the function (unless 'it is returned before the call')
foo()
 

Вы можете спросить, каково решение?
Как было сказано выше, вы можете предотвратить бесконечную рекурсию функции (если хотите), неявно возвращая функцию с помощью return.

Ваш ответ присутствует только в вашем коде. Позвольте мне показать вам, где:

 while True:
    if answer.lower() == "y":
        the_func()
            
#elif answer.lower() == "n":
    if answer.lower() in {'n', 'q', 'e'}: # I would use 'elif' here, if the above 'if' statement did not have the calling of the same function. But, here, using 'if' or 'elif' doesn't matter really.
        print("Thank you!")       
        return
#break
#else:
#print("Sorry, that was an invalid command!")
 

Я надеюсь, вы поняли, что делаете неправильно, и если у вас есть какие-либо сомнения, просто добавьте комментарий, и я помогу вам так быстро, как смогу.

Ответ №2:

Хааа.. ГОТОВО, Так что нам нужно

 while True: 
    if answer.lower() == "y": 
        return the_func() ***# <= add return to the_func()***
        
    if answer.lower() in {'n', 'q', 'quit', 'e', 'exit'}: 
        print("Thank you!")
        return
        
    #the_func() #<== mark as comment, and func not will bee looped again the_func()
    
the_func()

 

Тем не менее, @Alex спасибо тебе!