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.
4 Réponses :
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()
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 ...
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()
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é!
Choice = (int(Choice)) The Choice variable is string type so you need to convert the type string to int.
Oui merci! Vous n'avez pas besoin d'avoir ( ) dans Choice = int(Choice) btw
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)
Wow, je ne savais pas vraiment que les dictionnaires existaient, et c'est une réponse très détaillée. Merci!
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
Choiceen un entier, mais même si cela a réussi,Choiceest toujours une chaîne. Donc votreifne s'exécute jamais ...