對於密碼測試,要檢查是否人物的任何在某一組:
any(c.islower() for c in password)
這隻會如果有至少1小寫字母是真實的。您可以and
結合這些測試(因爲沒有循環不使用all()
這裏,沒有點):
any(c.islower() for c in password) and any(c.isdigit() for c in password)
如果有至少一個小寫字符和密碼一個數字只會是真實的。
但是,將這些測試串在一起變得笨拙,快速。這是很容易創建一個單獨的功能,並且拼出每個密碼測試:
def is_valid(password):
if len(password) < 8:
return False
if not any(c in password for c in '[email protected]%/()=?+.-'):
return False
if not any(c.isdigit() for c in password):
return False
if not any(c.islower() for c in password):
return False
if not any(c.isupper() for c in password):
return False
return True
,然後只是推遲到功能,當你需要看,如果你的密碼長度至少爲8個字符,使用小寫和大寫字母,並且至少包含1個數字和1個「特殊」字符,例如:
if is_valid(password):
採用專用的功能遠更容易維護。
如果您的密碼檢查器仍然需要更靈活,您可以使用單獨的測試並按順序收集它們。只有然後是all()
功能有幫助,所有測試需要通過:
def password_contains_lowercase(password):
return any(c.is_lower() in password)
def password_contains_uppercase(password):
return any(c.is_upper() in password)
def password_contains_digit(password):
return any(c.is_digit() in password)
def password_min_length(length):
def password_length_test(password):
return len(password) >= min_length
return password_length_test
# etc.
policies = {
'mixed_case': (
password_min_length(8),
password_contains_lowercase,
password_contains_uppercase
),
'mixed_case_and_digits': (
password_min_length(8),
password_contains_lowercase,
password_contains_uppercase,
password_contains_digit
),
# ...
}
def is_valid_password(policy, password):
return all(test(password) for test in policies[policy])
檢查文檔... HTTPS://docs.python.org/3/library/functions.html#all –