用户设置密码后,判断密码强度是否合格,判断规则:1.密码长度不小于8;2.密码中必须包含字母;3.密码中必须包含数字。
1.0:isnumeric()函数可以判断字符串中是否只含有数字,若字符串中只含数字,返回True;isalpha()函数可以判断字符串字符串中是否只含有字母,若字符串中只包含字母,返回True。初始化密码强度strength_level为0,每满足一个判断规则就加1。判断密码强度时,只要含有字母(不是只含有字母)即可,因此对输入的密码字符串进行遍历,遇到字母后停止遍历,如果密码中含有字母,strength_level+1。对数字的判断同样处理。当密码强度为3时,给用户提示:密码强度合格,否则说明不合格原因。
"""
判断密码强度
1.0:密码长度大于8
包含数字
包含字母
"""
def check_number_exit(password):
"""
判断是否含有数字
"""
for x in password:
if x.isnumeric():
return True
return False
def check_letter_exit(password):
"""
判断是否含有字母
"""
for x in password:
if x.isalpha():
return True
return False
def main():
"""
主函数
"""
password_str = input("请输入密码:")
strength_level = 0
#规则1:密码长度大于8
if len(password_str) >= 8:
strength_level += 1
else:
print("抱歉!密码长度应不小于8位!")
#规则2:包含数字
if check_number_exit(password_str):
strength_level +=1
else:
print("抱歉!密码中应包含数字!")
#规则3:包含数字
if check_letter_exit(password_str):
strength_level +=1
else:
print("抱歉!密码中应包含字母!")
if strength_level ==3:
print("您的密码强度合格!")
else:
print("您设置的密码强度不合格!")
if __name__=="__main__":
main()
2.0:主要是终止循环(break)的用法。对判断是否含有字母和数字的函数进行了优化,同时改进主函数,使用户可以多次设置密码。设置输入密码次数 times=5,用户输入密码不合格时,提醒用户重新输入,同时times-1,若用户输入的密码合格,则直接跳出循环。当用户输入5 次后密码仍然不合格时,提醒用户输入次数过多。
"""
判断密码强度
2.0: 终止循环,限定输入密码的次数
"""
def check_number_exit(password):
"""
判断是否含有数字
"""
number = False
for x in password:
if x.isnumeric():
number = True
break
return number
def check_letter_exit(password):
"""
判断是否含有字母
"""
letter = False
for x in password:
if x.isalpha():
letter = True
break
return letter
def main():
"""
主函数
"""
times = 5
while(times >0 ):
password_str = input("请输入密码:")
strength_level = 0
#规则1:密码长度大于8
if len(password_str) >= 8:
strength_level += 1
else:
print("抱歉!密码长度应不小于8位!")
#规则2:包含数字
if check_number_exit(password_str):
strength_level +=1
else:
print("抱歉!密码中应包含数字!")
#规则3:包含数字
if check_letter_exit(password_str):
strength_level +=1
else:
print("抱歉!密码中应包含字母!")
if strength_level ==3:
print("您的密码强度合格!")
break
else:
print("您设置的密码强度不合格!")
times -= 1
print()
if times == 0:
print("您输入密码次数超过已5次,暂不可用!")
if __name__=="__main__":
main()
3.0:将设置的密码及对应的强度以及强度级别保存到文件中。定义密码强度级别,1:弱;2:中;2:强。文件的操作:f = open(),括号中输入文件路径以及打开方式(r:只读,文件不存在时报错;w:只写,文件不存在时自动新建文件;r+:可读可写;a:可以持续性输入,保留原来的输入结果)。f.write()写入内容。f.close()关闭文件。文件打开要在判断密码强度是否合格之前,否则只能保存合格的密码。
"""
判断密码强度
3.0:将设置的密码以及对应的强度保存到文件中
"""
def check_number_exit(password):
"""
判断是否含有数字
"""
number = False
for x in password:
if x.isnumeric():
number = True
break
return number
def check_letter_exit(password):
"""
判断是否含有字母
"""
letter = False
for x in password:
if x.isalpha():
letter = True
break
return letter
def main():
times = 5
while(times >0 ):
password_str = input("请输入密码:")
strength_level = 0
#规则1:密码长度大于8
if len(password_str) >= 8:
strength_level += 1
else:
print("抱歉!密码长度应不小于8位!")
#规则2:包含数字
if check_number_exit(password_str):
strength_level +=1
else:
print("抱歉!密码中应包含数字!")
#规则3:包含数字
if check_letter_exit(password_str):
strength_level +=1
else:
print("抱歉!密码中应包含字母!")
if strength_level == 1:
level = "弱"
elif strength_level == 2:
level = "中"
else:
level = "强"
f = open("password.3.0.txt","a")
f.write("密码:{}\t强度:{}\t级别:{}\n".format(password_str,strength_level,level))
f.close()
if strength_level ==3:
print("您的密码强度合格!")
break
else:
print("您设置的密码强度不合格!")
times -= 1
print()
if times == 0:
print("您输入密码次数超过已5次,暂不可用!")
if __name__=="__main__":
main()
4.0:读取文件中的密码(只截取读取文件的代码)。以只读的方式打开文件,g.read():读取所有的文件信息,返回一个包含所有文件信息的字符串;g.readline()返回值为文件下一行内容的字符串;g.readlines():返回值为整个文件内容的列表,每项是以换行为结尾的一行字符串。关于文件信息的遍历有两种方式:(1)for line in g (2)for line in g.readlines()
g = open("password.3.0.txt", "r")
#read = g.read()
#print(read)
#line = g.readline()
#print(line)
#lines = g.readlines()
#print(lines)
#for line in g:
# print(line)
for line in g.readlines():
print(line)
5.0:面向对象,定义一个密码工具类,首先定义密码属性,然后写入判断是否含有字母和数字的函数,最后写入计算密码强度的函数。
"""
判断密码强度
5.0:面向对象,定义一个密码工具类
"""
class PasswordTool:
#自身属性
def __init__(self,password):
self.password = password
self.strength_level = 0
self.level = ""
def check_number_exit(self):
number = False
for x in self.password:
if x.isnumeric():
number = True
break
return number
def check_letter_exit(self):
letter = False
for x in self.password:
if x.isalpha():
letter = True
break
return letter
def password_tool(self):
if len(self.password) >= 8:
self.strength_level += 1
else:
print("抱歉!密码长度应不小于8位!")
if self.check_number_exit():
self.strength_level += 1
else:
print("抱歉!密码中应包含数字!")
if self.check_letter_exit():
self.strength_level += 1
else:
print("抱歉!密码中应包含字母!")
if self.strength_level == 1:
self.level = "弱"
elif self.strength_level == 2:
self.level = "中"
else:
self.level = "强"
def main():
times = 5
while(times >0 ):
password_str = input("请输入密码:")
example = PasswordTool(password_str)
example.password_tool()
f = open("password.5.0.txt","a")
f.write("密码:{}\t强度:{}\t级别:{}\n".format(example.password,example.strength_level,example.level))
f.close()
if example.strength_level ==3:
print("您的密码强度合格!")
break
else:
print("您设置的密码强度不合格!")
times -= 1
print()
if times == 0:
print("您输入密码次数超过已5次,暂不可用!")
if __name__=="__main__":
main()
6.0:定义一个文件操作类。将关于文件读写操作的函数写入类中。
"""
判断密码强度
6.0:面向对象,定义一个文件操作类
"""
class Filetool:
def __init__(self,filepath):
self.filepath = filepath
def read_from_file(self):
f = open(self.filepath,"r")
lines = f.readlines()
f.close()
return lines
def write_to_file(self,line):
f = open(self.filepath,"a")
f.write(line)
f.close()
class PasswordTool:
#自身属性
def __init__(self,password):
self.password = password
self.strength_level = 0
self.level = ""
def check_number_exit(self):
number = False
for x in self.password:
if x.isnumeric():
number = True
break
return number
def check_letter_exit(self):
letter = False
for x in self.password:
if x.isalpha():
letter = True
break
return letter
def password_tool(self):
if len(self.password) >= 8:
self.strength_level += 1
else:
print("抱歉!密码长度应不小于8位!")
if self.check_number_exit():
self.strength_level += 1
else:
print("抱歉!密码中应包含数字!")
if self.check_letter_exit():
self.strength_level += 1
else:
print("抱歉!密码中应包含字母!")
if self.strength_level == 1:
self.level = "弱"
elif self.strength_level == 2:
self.level = "中"
else:
self.level = "强"
def main():
times = 5
path = "pwd_level6.0.txt"
f = Filetool(path)
while(times >0 ):
password_str = input("请输入密码:")
example = PasswordTool(password_str)
example.password_tool()
line = "密码:{}\t强度:{}\t级别:{}\n".format(example.password,example.strength_level,example.level)
f.write_to_file(line)
if example.strength_level ==3:
print("您的密码强度合格!")
break
else:
print("您设置的密码强度不合格!")
times -= 1
print()
if times == 0:
print("您输入密码次数超过已5次,暂不可用!")
word = f.read_from_file()
print(word)
if __name__=="__main__":
main()