【发布时间】:2019-02-18 10:29:38
【问题描述】:
我正在用 Python 编写一个简单的脚本,用于评估评分系统中密码的强度,该评分系统根据密码是否包含学校的大写或小写字母、数字和符号来给予和计分。
其中一个要求是它检查英国 QWERTY 键盘上从左到右连续的 3 个字母或数字,每个实例扣 5 分。例如,密码“qwer123”会因“qwe”、“wer”和“123”而损失 15 分。这怎么可能实现?下面是我当前的代码。
def check():
user_password_score=0
password_capitals=False
password_lowers=False
password_numbers=False
password_symbols=False
password_explanation_check=False
ascii_codes=[]
password_explanation=[]
print("The only characters allowed in the passwords are upper and lower case letters, numbers and these symbols; !, $, %, ^, &, *, (, ), _, -, = and +.\n")
user_password=str(input("Enter the password you would like to get checked: "))
print("")
if len(user_password)>24 or len(user_password)<8:
print("That password is not between 8 and 24 characters and so the Password Checker can't evaluate it.")
menu()
for i in user_password:
ascii_code=ord(i)
#print(ascii_code)
ascii_codes.append(ascii_code)
#print(ascii_codes)
for i in range(len(ascii_codes)):
if ascii_codes[i]>64 and ascii_codes[i]<90:
password_capitals=True
elif ascii_codes[i]>96 and ascii_codes[i]<123:
password_lowers=True
elif ascii_codes[i]>47 and ascii_codes[i]<58:
password_numbers=True
elif ascii_codes[i] in (33,36,37,94,38,42,40,41,45,95,61,43):
password_symbols=True
else:
print("Your password contains characters that aren't allowed.\n")
menu()
if password_capitals==True:
user_password_score+=5
if password_lowers==True:
user_password_score+=5
if password_numbers==True:
user_password_score+=5
if password_symbols==True:
user_password_score+=5
if password_capitals==True and password_lowers==True and password_numbers==True and password_symbols==True:
user_password_score+=10
if password_numbers==False and password_symbols==False:
user_password_score-=5
if password_capitals==False and password_lowers==False and password_symbols==False:
user_password_score-=5
if password_capitals==False and password_lowers==False and password_numbers==False:
user_password_score-=5
#print(user_password_score)
if user_password_score>20:
print("Your password is strong.\n")
else:
print("That password is weak.\n")
#don't forget you still need to add the thing that checks for 'qwe' and other stuff.
menu()
【问题讨论】:
-
欢迎来到 Stack Overflow。请阅读How to ask,看看您是否可以使您的代码-sn-p 的基本部分更加简洁。
-
您也可以在codereview.stackexchange.com 上发布您的代码。如果
x是布尔值,您可以将if x == True替换为if x,将if x == False替换为if not x。 -
你也可以写
contains_numbers = any(char.isdigit() for char in password)或contains_uppercase = any(char.isupper() for char in password)。