2016-09-28 3 views
0

私の名前はEdwinです。私はプログラミングには慣れていますが、私は学ぶのが大好きです。私は学校に割り当てられているので、パスワードを評価するプログラムを作成する必要があります。しかし、私は今、litleの問題があります。あなたが見ることができるように、私はすべての文字で3つのリストを作った。このプログラムを実行すると、kleinとgroot、nummersとsymbolsの条件が真であれば、 "uw wachtwoord is Sterk"と表示されません。どのように私はこれを修正するのですか?Pythonでリストの条件をチェックするにはどうすればいいですか?

btw私はisdigit、isnumericなどを使用できません。

ありがとうございます! listに対して:あなたは(文字列タイプstrの)パスワードを比較しているので、

print ("Check of uw wachtwoord veilig genoeg is in dit programma.") 
print ("Uw wachtwoord moet tussen minimaal 6 en maximaal 12 karakters 
bestaan") 

print ("U kunt gebruik maken van hoofdletters,getallen en symbolen 
(@,#,$,%)") 
ww = input("Voer uw wachtwoord in: ") 


klein = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 
'm','n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] 
groot = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 
'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] 
nummers = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'] 
symbolen= [' ', '!', '#', '$', '%', '&', '"', '(', ')', '*', '+', ',', '-', 
'.', '/', ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_', '`', 
'{', '|', '}', '~',"'"] 


if len(ww) < 6: 
    print ("uw wachtwoord is te kort, uw wachtwoord moet uit minimaal 6 en 
    maximaal 12 karakters bestaan!") 
elif len(ww) > 12: 
    print ("uw wachtwoord is te lang, uw wachtwoord moet uit minimaal 6 en 
    maximaal 12 karakters bestaan!") 
elif len(ww) >= 6 and len(ww)<= 12: 
    if ww == klein and ww == groot and ww == nummers and ww == symbolen: 
      print ("uw wachtwoord is Sterk") 

答えて

0

あなたのテストが動作することはできません。オブジェクトは非同程度であるので、結果は(彼らは同等であったとしてもそこここには平等はありませんが、空でない交差点をチェックするために)

だけFalseであるあなたは、少なくともがあることを各リストをチェックする必要がありますパスワードリストの1人のメンバー

anyを使用して(ラムダは多分あまりにも多くのだろう)リストの文字がパスワードであるかどうかを確認する補助関数を定義:

def ok(passwd,l): 
    return any(k in passwd for k in l) 

をその後、すべてのテスト012を使用してこの条件に対するあなたの4つのリスト:

elif len(ww) >= 6 and len(ww)<= 12: 
    sww = set(ww) 
    if all(ok(sww,l) for l in [klein,groot,nummers,symbolen]): 
     print ("uw wachtwoord is Sterk") 

注パスワード変換によって若干最適化(リストの一種であるので、O inオペレータのための(N))(inオペレータが方法速い存在するがある)文字のsetによる。さらに、セットは重複した文字を削除します。この例では完璧です。それほど難しいことではありませんAUX機能なし

よりコンパクト版と使用lambdaは、すべての後に理解する:

elif len(ww) >= 6 and len(ww)<= 12: 
    sww = set(ww) 
    if all(lambda l: any(k in sww for k in l) for l in [klein,groot,nummers,symbolen]): 
     print ("uw wachtwoord is Sterk") 
関連する問題