2016-04-23 23 views
0

パスワードを入力するプログラムを作成する必要があります。パスワードは8文字以上、英字で始まり、大文字と小文字の両方を含み、スペースと少なくとも2桁の数字を含む必要があります。文字列に2桁以上の空白が含まれていないかどうかを確認するにはどうすればよいですか?

私は、スペースや数字があるかどうかを確認するためにforループを使用してみましたが、全体パスワードが空白または数字で構成されている場合、それはのみ動作します、最後の2

を除く他のすべてのダウンを持っています。数字またはスペースがある場合、いくつの数字またはスペースがあるのか​​だけでなく、パスワードに数文字のエラーメッセージが表示されます。私はこれがforループのために起こっていることを知っていますが、私はそれを修正する方法に固執しています。ここで

は、私がこれまで持っているものです。

again = 'y' 
while again == 'y': 
minimum_characters = 8 
error = 0 
print('Password must contain 8 characters, start with a letter,') 
print(' have no blanks, at least one uppercase and lowercase letter,') 
print(' and must contain at least 2 digits.') 
password = input('Enter a password: ') 
passlength = len(password) 

#validity checks for errors 
if passlength < minimum_characters: 
    error += 1 
    print (error, '- Not a valid password. Must contain AT LEAST 8 characters. PW entered has', passlength, '.') 

if not password[0].isalpha(): 
    error += 1 
    print(error, '- The password must begin with a letter.') 

if password.isalpha(): 
    error += 1 
    print(error, '- The password must contain at least 2 digits.') 

if password.isupper(): 
    error += 1 
    print(error, '- You need at least one lower case letter.') 

if password.islower(): 
    error += 1 
    print(error,'- You need at least one upper case letter.') 


again = input('Test another password? (Y or N): ') 
again = again.lower() 
+0

また、良いパスワードについては、必須の[XKCD](https://xkcd.com/936/)も必要なもの(例の桁とスペース)に置き換えてください。本当に大文字、数字、空白を必要としないかどうか検討してください。 –

答えて

1
if " " in password: 
    error += 1 
    print(error, '- Not a valid password. It contains spaces.') 

if len([x for x in pwd if x.isdigit()]) < 2: 
    error += 1 
    print(error, '- The password must contain at least 2 digits.') 
1

文字列は、使用することができます未満2桁含まれている場合にエラーを報告するには:また

if sum(map(str.isdigit, password)) < 2: 

を、あなたのチェックのために大文字と小文字が正しくない:

if password.isupper(): 

は、すべての文字が大文字であるかどうかをチェックします。任意の文字が大文字かどうかを確認するには、使用することができます。

any(map(str.isupper, password)) 
+0

もしmap(lambda x:x.isdigit()、password))= 2の場合、map(lambda x:x.isdigit()、password).count(True) - それはPython 2と3の両方で動作しますが、あなたのバージョンはPython 3では動作しません – MaxU

+0

ありがとうございます。 –

0

「(...)はスペースと、少なくとも2桁の数字を持っていません」

任意の文字/数字の出現回数をカウントするためのいくつかのオプションがあります。

if any([x for x in password if x == " "]): 
    # 1 or more spaces in password 

if password.count(" ") > 0: 
    # 1 or more spaces in password 

if len([x for x in password if x.isdigit()]) < 2: 
    # less than 2 digits 
関連する問題