2017-10-19 4 views
1

Ich bin ein Anfänger zu Python, ich versuche, ein Programm zu erstellen, das die Passwortvariabilität überprüft.Wie stelle ich sicher, dass ich nur einmal drucke?

Der Code ist fertig, aber wenn ich es ausführe, druckt es die gleiche Nachricht mehrmals. Aber ich möchte nur einmal drucken.

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) 

, was ich bekommen:

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

, was ich will:

#2w3E -> Geldig paswoord? False 
+0

Warum haben Sie die For-Schleife 'für Artikel in Wachtwoord'? Sie verwenden den Artikel nicht im Rest Ihres Codes. – jh1711

Antwort

1

Bei for item in wachtwoord: Sie in der Zeichenfolge über jedes Zeichen iterieren, die scheint unbeabsichtigt sein. Es sieht nicht so aus, als ob Sie item irgendwo innerhalb der for-Schleife verwenden, also wiederholt es den Vorgang für jedes Zeichen auf die gleiche Weise. Versuchen Sie, diese Zeile zu entfernen

+0

@ X.Feliers Gerne helfen und Willkommen bei Stack Overflow. Wenn diese Antwort oder eine andere Lösung Ihr Problem behoben hat, markieren Sie es als akzeptiert. – EthanBar

0

Sie drucken für alle Zeichen im Kennwort. Entferne diese Schleife. Die re Suchvorgänge durchlaufen das gesamte Kennwort, sodass Sie die Zeichen nicht durchlaufen müssen. Der große Hinweis ist, dass Sie nie innerhalb der Schleife Element verwenden - so dass Sie nicht wirklich durch die Zeichenfolge iterieren.


Ein hilfreicher Debug-Tipp: machen Sie Ihren Druck Aussagen einzigartig, so kann man sagen, warum Sie bei jeder Iteration fehlgeschlagen.

0

Wie der andere Benutzer erwähnt, ist das Entfernen der äußeren Schleife der erste Schritt, um dies zu beheben. Sobald Sie damit fertig sind, gibt es eine weitere Verbesserung, die Sie tun können, so halten Sie nicht, diese Aussagen print replizierende:

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

Beachten Sie, dass lengte eine bool Variable, um es zu None so Vergleich wird immer False zurückkehren (nicht was du willst).

Verwandte Themen