2016-12-10 5 views
1

In meinem Passwort-Checker weiß ich nicht, warum, wenn ich Caps und Kleinbuchstaben in meiner Eingabe verwenden, es nicht starkes Passwort setzen.Password Checker Python

enter code here 
print("Password Checker") 
pw=input("Enter Your Password Here: ") 

if len(pw)<=5: 
if pw!=pw.upper()or pw!=pw.lower(): 
    print("WEAK Password") 
elif len(pw)>=6 and len(pw)<=12: 
if pw==pw.lower(): 
    print("Medium Password") 
elif len(pw)>=13: 
    print("Too Long") 
elif len(pw)<=12 and len(pw)>=6: 
if pw==pw.upper() and pw==pw.lower(): 
    print("Thats A STRONG Password") 
+0

kompatibel sein 'if len (pw)> = 13' ... wirklich? – thebjorn

Antwort

2

Ihre Logik rückwärts hier ist

if pw!=pw.upper() or pw!=pw.lower(): 

würden Sie verwenden entweder

if pw != pw.upper() and pw != pw.lower(): 

oder

if pw == pw.upper() or pw == pw.lower(): 

Sie haben ein ähnliches Problem zu einem späteren Linie

if pw==pw.upper() and pw==pw.lower(): 

Wenn Sie möchten, um zu überprüfen, dass es mindestens einen oberen und einen unteren Brief sind Sie so etwas wie

import string 
if any(i in string.ascii_lowercase for i in pw) and any(i in string.ascii_uppercase for i in pw): 
+0

Ich versuchte es, aber es scheint nicht zu funktionieren –

+0

@samnorman Sie haben mehrere andere Logikprobleme im Programm auch. Siehe meine Bearbeitung für eine andere. – CoryKramer

2
if pw==pw.upper() and pw==pw.lower(): 
    print("Thats A STRONG Password") 

tun können Sie überprüfen hier, wenn pw Groß- und Klein ist in der gleiche Zeit. Ich denke, Sie wollten überprüfen, ob das Passwort nicht nur Kleinbuchstaben und nicht nur Großbuchstaben ist. So sollte es sein

if pw != pw.upper() and pw != pw.lower(): 
    print("Thats A STRONG Password") 

Und natürlich in "Weak Pass" sollte es

if pw == pw.upper() or pw == pw.lower(): 
    print("Thats A WEAK Password") 

sein, weil Sie überprüfen, ob Pass klein geschrieben wird oder alle Groß

+0

Willkommen bei SO als neuer Benutzer. Gute Antwort. – LotPings

1

Ok. Die Methode .upper() und .lower(), um herauszufinden, ob die Zeichenkette aus Groß- oder Kleinbuchstaben besteht, funktioniert nicht, wenn eine Zahl oder ein Sonderzeichen in der Zeichenkette enthalten ist.

Verwenden Sie stattdessen .isupper(), um zu überprüfen, ob ein bestimmtes Zeichen in einer Zeichenfolge Großbuchstaben ist. und .islower() für Kleinbuchstaben. Diese Methoden jeden Scheck Zeichen für Zeichen in der Zeichenfolge, so dass die Codezeile wäre:

if any(x.isupper() for x in pw) and any(x.islower() for x in pw): 

so der vollständige Code (mit der Organisation der Logik) wären:

print("Password Checker") 
pw=input("Enter Your Password Here: ") 

#checking if password is to short, or to long. 
if len(pw)<=5 or len(pw)>=13: 
    if len(pw)<=5: 
     print ("To Short") 
    else: 
     print ("Too Long") 

else:#password is correct length 
    #checking if a uppercase AND a lowwercase. 
    if any(x.isupper() for x in pw) and any(x.islower() for x in pw): 
     print ("Thats A STRONG Password") 
    else: 
     print ("Medium Password") 

Lassen Sie mich wissen, wenn Ich kann weitere Fragen dazu beantworten.

HINWEIS: Wechsel von Eingang() zu raw_input() mit Python 2.7