2015-11-07 2 views
0

Je crée un programme de sécurité de connexion en Python, et cette partie est toujours bloquée en boucle infinie. Si vous êtes mis en lock-out, vous n'arrêtez pas de dire «vous avez été bloqué pendant 10 secondes» et il boucle à l'infini. Comment puis-je réparer ça?Comment réparer une boucle infinie en Python?

tries=0 
while finalusername!=username or finalpassword!=password: 
tries=tries+1 
print "That incorrect. Try again." 
print "You have", 5-tries, "tries left." 
finalusername= raw_input ("Username:") 
finalpassword= raw_input ("Password:") 
while tries>=4: 
    print "You have been locked out for 10 seconds. Please call the administrator if this keeps happening." 
    sleep (10.0) 
    system ('CLS') 
    finalusername!=username 
    finalpassword!=password 
+0

Votre indentation est clairement fausse. Cela générerait une erreur de syntaxe. – jpmc26

Répondre

0

Votre deuxième boucle while s'active lorsque tries est supérieure à quatre, mais la boucle elle-même ne fonctionne jamais sur tries ou contient toute autre condition de sortie. C'est pourquoi il devient infini. Donc, tries reste au-dessus de quatre et la boucle ne cesse jamais.

De votre code, il me semble qu'après avoir épuisé leurs essais, ils se verrouillent pendant 10 secondes et recommencent ensuite? Si oui, vous voudriez ajuster votre code comme ceci:

tries=0 
while finalusername!=username or finalpassword!=password: 
    tries=tries+1 
    print "That incorrect. Try again." 
    print "You have", 5-tries, "tries left." 
    finalusername= raw_input ("Username:") 
    finalpassword= raw_input ("Password:") 
    if tries>=4: 
     print "You have been locked out for 10 seconds. Please call the administrator if this keeps happening." 
     sleep (10.0) 
     system ('CLS') 
     tries = 0 #Reset tries counter 
     finalusername!=username #I don't think this part is required 
     finalpassword!=password #I don't think this part is required 
0

Facile, changer

while tries>=4: 

à

if tries >= 4: 

Si vous suivez votre code, lorsque vous entrez dans votre seconde en boucle, la valeur des variables tente ne change jamais Alors vous resterez là pour l'éternité. Si vous changez le while en if, vous allez exécuter le corps de l'instruction if puis continuer votre boucle.

0

Je pense que vous devriez mettre des essais à 0 après le sommeil, et la boucle si non nécessaire. Après le sommeil, l'utilisateur devrait recommencer 5 autres essais.

import os 
import time 

tries=0 
finalusername, finalpassword= 'a', 'a' 
username, password = None, None 


while True: 
    finalusername= raw_input ("Username:") 
    finalpassword= raw_input ("Password:") 
    if finalpassword == username and finalpassword == password: 
     break 
    tries=tries+1 
    print "That incorrect. Try again." 
    print "You have", 5-tries, "tries left." 
    if tries>=5: 
     print "You have been locked out for 10 seconds. Please call the administrator if this keeps happening." 
     time.sleep (10.0) 
     os.system('cls') 
     tries = 0