Dans mon introduction au cours d'informatique, on nous a posé un problème où nous devions créer une boucle qui demandait le mot de passe d'une personne:
while True: password = input('What is your password?') if password == "abc123": break print("Please Try Again") print("Welcome!")
Comment puis-je le changer pour qu'après 5 essaie / devine le mot de passe, il dit "tout sans suppositions de mot de passe" (ou quelque chose de ce genre)?
6 Réponses :
Créez un compteur et faites-le compter à rebours. La condition de la boucle while
doit être "lorsque le compteur atteint 0":
for i in range(5): # will execute 5 times with i = 0, 1, 2, 3, 4 in that order ...
Vous devrez peut-être réécrire certaines choses afin que des choses différentes se produisent lorsque vous time out avec le compteur, par rapport à l'obtention du mot de passe correct.
Alternativement, une version plus correcte consisterait à utiliser une boucle for
au lieu d'une boucle while
:
counter = 5 while counter > 0: counter -= 1 password = input('What is your password?') if password == "abc123": break print("Please Try Again") print("Welcome!")
mais si vous n'utilisez pas la variable i
pour quelque chose en particulier, a while
fonctionnera tout aussi bien.
Je suis d'accord avec @mauve qu'une boucle while
n'est pas exactement ce que vous recherchez, mais vous pouvez toujours le faire avec un compteur:
for i in range(max_tries): password = input('What is your password?') if password == "abc123": break print("Please Try Again") else: raise ValueError("Too many attempts")
Cependant, il peut être un peu plus clair d'utiliser une boucle for
for i in range(max_tries): password = input('What is your password?') if password == "abc123": break print("Please Try Again") if i == max_tries: raise ValueError("Too many attempts")
Vous pouvez utiliser un else
à la fin de votre boucle for comme donc:
max_tries = 5 while max_tries > 0: # We will decrement max_tries on each loop password = input('What is your password?') if password == "abc123": break print("Please Try Again") max_tries -= 1 # Decrement max_tries if max_tries==0: # We tried too many times raise ValueError("Too many attempts!")
Où le else
attrapera le cas où un break
n'a pas été appelé avant la fin du boucle
Beaucoup de gens ne sont pas familiers avec la construction for ... else
, qui est classique dans ce cas
for attempt in range(5): password = input('What is your password?') if password == "abc123": print("Welcome!") break else: print("all out of password guesses")
Le else
être exécuté uniquement si un break
n'est pas rencontré
cela fonctionne, mais il affiche toujours "Bienvenue!" à la fin
En effet, ce n'est pas vraiment un "while true" si vous avez une limite de bouclage. Vous pouvez réaliser la même chose en vérifiant simplement le mot de passe 5 (ou n fois).
try_num = 0 success = False while True: try_num = try_num + 1 password = input('What is your password?') if password == "abc123": success = True break if try_num > 5: break print("Please Try Again") if success == True: print("Welcome!")
Si vous devez avoir un temps True pour un format spécifique attendu par l'évaluateur / l'enseignant / le devoir, vous pourrait toujours utiliser ce compteur et entrer dans le while True
.
try_num = 0 while try_num <= 5: try_num = try_num + 1 <rest of the code>
Vous pouvez voir que l'option 1 est plus élégante et plus simple à maintenir. p>
Vous pouvez également utiliser la boucle while ... else
:
attempts = 0 while attempts < 5: password = input('What is your password?') if password == "abc123": print("Welcome!") break print("Please Try Again") attempts += 1 else: print('You have exceeded the number of allowed login attempts!')
Je suis vraiment noob non seulement en python mais en programmation en général. Juste apprendre tout en étant quarentined Je suis venu avec ce code pour faire ce que l'op a demandé. Je fais un cours en ligne et l'activité me l'a demandé. Cela peut vous sembler stupide et il y a certainement de meilleures façons de faire ce que j'ai fait ici, mais cela fonctionne. (l'activité demandée de le faire avec While True)
rainbow = ("red, orange, yellow, green, blue, indigo, violet") while True: color_input = input("Enter a color of the rainbow: ") if color_input.lower() in rainbow: print ("Great, you did it!! ") break else: print ("Wrong, you still have 3 tries.") while True: color_input = input("Enter a color of the rainbow: ") if color_input.lower() in rainbow: print ("Great, you did it") break else: print ("Wrong, you stil have 2 tries") while True: color_input = input ("Enter a color of the rainbow: ") if color_input.lower() in rainbow: print ("Great, you did it") break else: print ("Wrong, last try") while True: color_input = input("Enter a color of the rainbow: ") if color_input.lower() in rainbow: print ("Great, you finally did it") break else: print ("You ran out attemps. Sorry, you failed") break break break break
Hé, pour quelqu'un qui a appris la programmation en quarantaine, vous avez bien fait. Mais il existe des moyens plus simples de le faire. Essayez de faire avec des compteurs.
Connaissez-vous les compteurs? Avez-vous pensé à en créer un et à l'incrémenter à chaque estimation?
Essayez de créer une condition différente de celle avec True. Vous pouvez utiliser une boucle for ou vous pouvez utiliser une variable de compteur, pour donner 2 options
pourquoi ne pas utiliser une boucle
for
?la plupart des langages de programmation fournissent une boucle for pour résoudre ce problème très courant.