2017-10-19 21 views
1

Je suis débutant en python, j'essaie de créer un programme qui vérifie la variabilité du mot de passe.Comment m'assurer que je n'imprime qu'une seule fois?

Le code est terminé mais lorsque je l'exécute, il imprime le même message plusieurs fois. Mais je veux seulement imprimer une fois.

def controleer_paswoord(wachtwoord): 
    import re 
    for item in wachtwoord: 
     kleine_letter = re.search("[a-z]",wachtwoord) 
     hoofd_letter = re.search("[A-Z]",wachtwoord) 
     cijfer = re.search ("[0-9]",wachtwoord) 
     karakter = re.search ("[$#@]",wachtwoord) 
     lengte = (len(wachtwoord)<6 or len(wachtwoord)>12) 
     if kleine_letter == None: 
      print("{0} -> Geldig paswoord? False".format(wachtwoord)) 
     elif hoofd_letter == None: 
      print("{0} -> Geldig paswoord? False".format(wachtwoord)) 
     elif cijfer == None: 
      print("{0} -> Geldig paswoord? False".format(wachtwoord)) 
     elif karakter == None: 
      print("{0} -> Geldig paswoord? False".format(wachtwoord)) 
     elif lengte == None: 
      print("{0} -> Geldig paswoord? False".format(wachtwoord)) 
     else: 
      print("{0} -> Geldig paswoord? True".format(wachtwoord)) 

# wachtwoord = (input("Geef hier uw gewenste wachtwoord in:")) 
wachtwoord = "2w3E" 
controleer_paswoord(wachtwoord) 

ce que je reçois:

#2w3E -> Geldig paswoord? False 
#2w3E -> Geldig paswoord? False 
#2w3E -> Geldig paswoord? False 
#2w3E -> Geldig paswoord? False 

ce que je veux:

#2w3E -> Geldig paswoord? False 
+0

Pourquoi avez-vous la boucle for 'pour l'élément dans wachtwoord'? Vous n'utilisez pas d'élément dans le reste de votre code. – jh1711

Répondre

1

A for item in wachtwoord: vous itérez chaque caractère de la chaîne, qui semble être involontaire. Il ne semble pas que vous utilisiez item n'importe où dans la boucle for, donc il ne fait que répéter le processus de la même manière pour chaque caractère. Essayez de supprimer cette ligne

+0

@ X.Feliers Joyeux d'aider, et bienvenue à Stack Overflow. Si cette réponse ou un autre a résolu votre problème, veuillez le marquer comme accepté. – EthanBar

0

Vous imprimez pour tous les caractères dans le mot de passe. Retirez cette boucle. Les re recherchent tout le mot de passe, vous n'avez donc pas besoin de faire défiler les caractères. Le grand indice est que vous n'utilisez jamais item dans la boucle - donc vous ne faites pas vraiment l'itération à travers la chaîne.


Un soupçon de débogage utile: faire votre impression déclarations uniques, donc vous pouvez dire pourquoi vous avez échoué à chaque itération.

0

Comme l'a mentionné l'autre utilisateur, le retrait de la boucle externe est la première étape de la réparation. Une fois que vous avez fini avec cela, il y a une autre amélioration, vous pouvez le faire vous ne gardez pas répliquer ces déclarations print:

flag = None not in {kleine_letter, hoofd_letter, cijfer, karakter} and lengte 
print("{0} -> Geldig paswoord? {}".format(wachtwoord, flag)) 

Notez que lengte est une variable bool, si l'on compare à None retournera toujours False (pas ce que tu veux).