2014-10-03 82 views
0

我正在寫一個簡單的條件密碼檢測腳本的條件存在:Python的條件密碼編程

  • > 8個字符
  • < 24個字符
  • 沒有特殊字符
  • 至少兩個上大寫字母
  • 至少兩個小寫字母
  • 至少兩位數字

我已經輸入了所有的代碼,但它並不像我需要的那樣進行預成型。例如,如果我輸入「FunkyFunky56」,它會拋出必須包含兩個大寫字母的消息。但是,當我用兩個連續的大寫字母「FUnkyfunky56」輸入時,它會給我提供有效的密碼信息。任何人都可以幫助我瞭解我需要改變什麼嗎?

代碼:

import string 

def longPass(password): 
    'Password must be at least 8 characters' 
    return len(password) > 8 

def shortPass(password): 
    'Password cannot be more than 24 characters' 
    return len(password) < 24 

def lowerPass(password): 
    'Password must contain at least two lowercase letters' 
    return len(set(string.ascii_lowercase).intersection(password)) > 1 

def upperPass(password): 
    'Password must contain at least two uppercase letters' 
    return len(set(string.ascii_uppercase).intersection(password)) > 1 

def numPass(password): 
    'Password must contain at least two digits' 
    return len(set(string.digits).intersection(password)) > 1 

def specPass(password): 
    'Password must not contain any special characters' 
    return len(set(string.punctuation).intersection(password)) < 1 

def test_password(password, tests=[longPass, shortPass, lowerPass, upperPass, numPass, specPass]): 
    for test in tests: 
     if not test(password): 
      print(test.__doc__) 
      return False 
    return True 

def main(): 
    password = input('Please enter a password to be checked: ') 
    if test_password(password): 
     print('Valid password!') 

if __name__=="__main__": 
    main() 

回答

1

這是因爲,如果它包含兩個「F」 s時,集將只包含其中的一個呢。如現在所實施的,您至少需要兩個不同的大寫字符。

嘗試簡單地計算匹配字符而不是設置交集。

這將做大寫字符的正確計數,例如:sum(x.isupper() for x in password)

+0

謝謝!這正是我所期待的。 – Ben 2014-10-03 22:13:34