2016-04-23 79 views
0

我必須建立一個你輸入密碼的程序。密碼必須至少包含8個字符,以字母開頭,包含大小寫字母,無空格和至少兩位數字。如何檢查一個字符串是否至少包含2位數字並且沒有空格?

我擁有一切下來除了最後2

我使用for循環,看看是否有空格或數字嘗試過,但如果整個密碼由空格或數字只會工作。如果有一個數字或一個空格,如果在錯誤消息中打印出密碼中包含的字符數量,而不僅僅是多少個數字或空格。我知道這是因爲for循環發生的,但我堅持如何解決它。

這是我到目前爲止有:

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

而且,你的檢查:

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 password.isupper(): 

檢查所有字符是否都是大寫。要檢查是否任何字符被大寫,您可以使用:

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

如果map(lambda x:x.isdigit(),password).count(True)<2'改爲'if sum(map(lambda x:x.isdigit(),password))> = 2' - 它適用於Python 2和Python 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 
相關問題