Python, boucle while qui ne fonctionne pas
Résolu/FerméArkassus Messages postés 18 Date d'inscription mardi 1 février 2022 Statut Membre Dernière intervention 18 janvier 2023 - 24 nov. 2022 à 12:21
- Python, boucle while qui ne fonctionne pas
- Citizen code python avis - Accueil - Outils
- Boucle cmd - Forum Programmation
- Pc qui s'allume et s'éteint en boucle ✓ - Forum Matériel & Système
- Factorielle en c boucle while - Forum C
5 réponses
Modifié le 23 nov. 2022 à 18:12
Bonjour,
Plutôt qu'une image, il faut poster le source (et les messages à l'exécution) en utilisant l’icône et le langage idoine. Ce qui donne :
reponse="" while reponse not in ("oui","non"): reponse=input("question oui/non : ").lower() print(reponse)
Modifié le 23 nov. 2022 à 18:36
ta boucle n'est pas correcte, soit tu fais comme mon exemple précédent, un not in, soit la condition doit être à chaque fois répétée et != et or ne vont pas ensemble, il faut != et and
user_entree = input(":") while user_entree != "/help" and user_entree != "/generate" : print("cette commande n'est pas reconnue") user_entree = input(":") user_entree = input(":") while user_entree not in ("/help","/generate"): print("cette commande n'est pas reconnue") user_entree = input(":")
23 nov. 2022 à 18:14
Ah oui pardon,
voilà mon code :
import random letters = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"] maj_letters = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"] voyelles = ["a", "e", "i", "o", "u", "y"] consonnes = ["b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "v", "w", "x", "z"] maj_voyelles = ["A", "E", "I", "O", "U", "Y"] maj_consonnes = ["B", "C", "D", "F", "G", "H", "J", "K", "L", "M", "N", "P", "Q", "R", "S", "T", "V", "W", "X", "Z"] numbers = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"] special_characters = ["!", "?", "§", "#", "@", "&", "%", "ù", "µ"] help_message = "tapez '/help' pour acceder à la liste des commandes " help = """Bienvenue dans Unbreakable_Password_generator, voici la liste des commandes : /help : affiche toutes les commandes ainsi que leur utilité /generate : genere un mot de passe aleatoire avec par defaut 8 caracteres /generate-c : genere un mot de passe aleatoire avec un nombre de caracteres au choix /generate-e : genere un mot de passe facile à retenir, mais par consequent moins sur, il est compose de 8 caracteres /generate-u : genere un mot de passe incassable(ou presque) contenant les caractères etendus de l'ASCII 8 bits et avec par defaut 8 caracteres /generate-u-c : genere un mot de passe incassable(ou presque) contenant les caractères etendus de l'ASCII 8 bits et avec un nombre de caracteres au choix""" user_entree = input(":") while user_entree != "/help" or "/generate" or "/generate-c" or "/generate-e" or "/generate-u" or "/generate-u-c" : print("cette commande n'est pas reconnu") print(help_message) user_entree = input(":") if user_entree == "/help": print(help) elif user_entree == "/generate": alea = letters + maj_letters + numbers + special_characters password_aleatoire = (random.sample(alea, 10)) print("voici votre mot de passe :" + str(password_aleatoire)) elif user_entree == "/generate-c": nb_caracteres = input("combien de caracteres souhaitez-vous ?") alea = letters + maj_letters + numbers + special_characters password_aleatoire = (random.sample(alea, int(nb_caracteres))) alea = letters + maj_letters + numbers + special_characters password_facile_a_memoriser = (random.sample(maj_voyelles, 1)) + (random.sample(consonnes, 1)) + (random.sample(voyelles, 1)) + \ (random.sample(consonnes, 1)) + (random.sample(voyelles, 1)) + (random.sample(numbers, 2)) + \ (random.sample(special_characters, 1)) password_aleatoire = (random.sample(alea, 10)) password_facile_a_memoriser = " ".join(password_facile_a_memoriser) password_aleatoire = " ".join(password_aleatoire) print (password_facile_a_memoriser) print (password_aleatoire)
et le message à l'exécution ne me mentionne aucune erreur, il n'affiche juste pas le contenu de ma variable help
voilà le message à l'execution :
/help cette commande n'est pas reconnu tapez '/help' pour acceder à la liste des commandes
23 nov. 2022 à 18:42
D'accord je comprends mieux, merci beaucoup !
par contre je viens de me rendre compte d'un autre problème, comment faire pour que l'utilisateur revienne
au début de ma boucle while une fois qu'il aura tapé /help ?
En batch j'aurais fais un "go to" pour retourner au début mais en python me voilà perdu xD
Modifié le 23 nov. 2022 à 19:09
Il faut apprendre sans goto ;-) c'est à dire que tout doit être régit par des blocs (if, while, ...) imbriqués les uns dans les autres, ou des fonctions
On peut faire un programme avec une boucle sans fin, et un break pour en sortir
while True: .... if .... : break
là tu peux mettre le if dans la boucle while
user_entree = input(":") while user_entree not in ("/generate","/xxx"): if user_entree == "/help": print("help") else: print("cette commande n'est pas reconnue") print("help_message") user_entree = input(":")
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question23 nov. 2022 à 19:33
ducoup j'ai fais ce que vous m'avez dis (enfin j'ai essayé ^^)
ce qui me donne cela :
user_entree = input(":") while user_entree not in ("/help", "/generate", "/generate-c", "/generate-e", "/generate-u", "/generate-u-c"): if user_entree == "/help": print(help) elif user_entree == "/generate": alea = letters + maj_letters + numbers + special_characters password_aleatoire = (random.sample(alea, 8)) password_aleatoire = " ".join(password_aleatoire) print("voici votre mot de passe :" + str(password_aleatoire)) elif user_entree == "/generate-c": nb_caracteres = input("combien de caracteres souhaitez-vous ?") alea = letters + maj_letters + numbers + special_characters password_aleatoire = (random.sample(alea, int(nb_caracteres))) password_aleatoire = " ".join(password_aleatoire) print(password_aleatoire) elif user_entree == "/generate-e": password_facile_a_memoriser = (random.sample(maj_voyelles, 1)) + (random.sample(consonnes, 1)) + \ (random.sample(voyelles, 1)) + (random.sample(consonnes, 1)) + (random.sample(voyelles, 1)) + \ (random.sample(numbers, 2)) + (random.sample(special_characters, 1)) password_facile_a_memoriser = " ".join(password_facile_a_memoriser) print(password_facile_a_memoriser) else: print("cette commande n'est pas reconnue") print(help_message) user_entree = input(":")
mais lorsque je rentre '/help', il stoppe juste le programme
Modifié le 23 nov. 2022 à 20:06
si tu regardes bien, je n'ai pas mis le /help dans le not in
23 nov. 2022 à 20:18
Dans ce cas là il faut que j'enlève toutes mes autres conditions de ma boucle while pour les mettrent sous forme de if
mais je perd donc l'objectif initial qui était d'envoyer un message d'erreur si l'utilisateur appelait une autre commande
que celles déjà existante
Je pense qu'il y a quelque chose qui m'échappe...
24 nov. 2022 à 00:06
utilise le while pour le help et la mauvaise réponse, quand on en sort la demande saisie est correcte, tu peux alors traiter les différents cas, comme dans ton programme d'origine
24 nov. 2022 à 12:21
c'est bon ça fonctionne enfin !
merci beaucoup de votre patience,
Je pense avoir compris pas mal de choses grâce à vous :D
Bonne journée
Arkassus