-1
votes

Comment revenir au début de la fonction

Donc, j'essaie que lorsque la fonction Settings() est terminée, je veux que le programme revienne au début de la fonction Menu() , comme lorsque le programme rencontre une erreur. J'ai essayé:

def Menu():
   Clear()
   print("Hello, world!")
   print("\n1. Settings")
   print("2. Exit")
   Choice = input("\n>")
   try:
       type(int(Choice))
   except Exception as e: 
       print("Oh no!\n I`ve encountered an error!" + e)
       Menu()
   if Choice == 1:
       Settings()
   if Choice == 2:
       exit(0)

def Settings():
   Menu()

Mais il revient simplement à l'endroit d'où il a été appelé et ne revient pas au début.

Quelqu'un peut-il m'aider avec ça?

Je suis un peu nouveau sur Python, donc désolé si j'ai fait quelque chose de mal.


2 commentaires

Utilisez une boucle dans la fonction Menu() et sortez de la boucle lorsqu'ils sélectionnent Quitter.


Vous vérifiez s'il est possible de convertir Choice en un entier, mais même si cela a réussi, Choice est toujours une chaîne. Donc votre if ne s'exécute jamais ...


4 Réponses :


0
votes

Bouclez simplement Menu () pour toujours:

def Menu():
   Clear()
   print("Hello, world!")
   print("\n1. Settings")
   print("2. Exit")
   Choice = input("\n>")
   try:
       type(int(Choice))
   except Exception as e: 
       print("Oh no!\n I`ve encountered an error!" + e)           
   if Choice == 1:
       Settings()
   if Choice == 2:
       exit(0)

def Settings():
   pass # do the settings stuff

while True:
    Menu()


2 commentaires

J'ai mis à jour ma réponse, cela devrait fonctionner de cette façon maintenant


N'est-il pas préférable de simplement mettre la boucle dans la fonction Menu et de l'appeler une fois? De cette façon, vous évitez tous ces appels récursifs ...



2
votes

Le type de Choice est str donc il ne peut pas comparer correctement et la comparaison échoue toujours, transtypez la valeur en int avec Choice = int(Choice)

def Menu():
   Clear()
   print("Hello, world!")
   print("\n1. Settings")
   print("2. Exit")
   Choice = input("\n>")
   try:
       Choice = (int(Choice))
   except Exception as e:
       print("Oh no!\n I`ve encountered an error!" + e)
       Menu()
   if Choice == 1:
       Settings()
   if Choice == 2:
       exit(0)

def Settings():
   Menu()


2 commentaires

Petite correction - ce n'est pas qu'il ne peut pas comparer , c'est juste que la comparaison échoue toujours ...


Oh ouais j'ai oublié ça. Merci de l'avoir signalé!



0
votes
Choice = (int(Choice))
The Choice variable is string type so you need to convert the type string to int.

1 commentaires

Oui merci! Vous n'avez pas besoin d'avoir ( ) dans Choice = int(Choice) btw



1
votes

Utilisez une boucle while et utilisez la méthode de chaîne .isdigit() pour vérifier si l'utilisateur a entré un nombre. En outre, vous devez également vérifier si le choix est une option de menu valide.

Remarque: N'oubliez pas de convertir le choix en un entier, sinon vos conditions ne s'exécuteront pas.

def Menu():
    while True:
        Clear()
        print('Hello, world!\n')
        print('1. Settings')
        print('2. Exit')
        
        choice = input('> ')
        if choice.isdigit() and int(choice) in {1, 2}:
            choice = int(choice)
            break
        else:
            print("Please enter 1 or 2")
            input('press enter to continue...')
    
    switch[choice]()

Si vous avez déjà vérifié que l'entrée de l'utilisateur est une option valide et que vous l'avez transformée en int, vous pouvez utiliser un dictionnaire comme celui-ci:

switch = {
    1: Settings
    2: exit
}

puis vous pouvez remplacer les instructions if dans votre menu comme ceci:

def Menu():
    while True:
        Clear()
        print('Hello, world!\n')
        print('1. Settings')
        print('2. Exit')
        
        choice = input('> ')
        if choice.isdigit() and int(choice) in {1, 2}:
            choice = int(choice)
            break
        else:
            print("Please enter 1 or 2")
            input('press enter to continue...')
    
    
    if choice == 1:
        Settings()
    if choice == 2:
        exit(0)


1 commentaires

Wow, je ne savais pas vraiment que les dictionnaires existaient, et c'est une réponse très détaillée. Merci!