每天30min学习python—判断密码强弱
目录
1.0 实现功能
设置一个变量strength_level用于记录密码强度,初值为0,满足一个条件加1!
- 条件1:密码长度(至少8位)
- 条件2:包含字母
- 条件3:包含数字
- 如果strength_level等于3,则密码强度合格,小于3则不合格
知识点:
- Python 字符串
检测字符串是否只有数字组成 | is.isnumeric() |
---|---|
检测字符串是否只由字母组成 | is.isalpha() |
检测字符串中所有的字母是否都为小写 | is.islower() |
检测字符串中所有的字母是否都为大写 | is.isupper() |
代码区:
"""
作者:Troublemaker
功能:判断密码强度
版本:1.0
日期:2019/11/2 20:25
脚本:1.0.py
"""
def main():
"""
主函数
"""
strength_level = 0
print("密码要求:长度至少8位,需要包含字母和数字")
input_psd = input("请输入您的密码:")
# 判断密码强度
if input_psd.isnumeric():
print("密码不能只包含数字")
else:
strength_level += 1
if input_psd.isalpha():
print("密码不能只包含字母")
else:
strength_level += 1
if len(input_psd) < 8:
print("密码不能少于八位")
else:
strength_level += 1
if strength_level == 3:
print("恭喜您,密码设置成功")
if __name__ == "__main__":
main()
2.0 实现功能
- 2.0增加功能:限制密码设置次数;循环终止
知识点:
- break语句
- 终止整个循环
- continue语句
- 只终止本次循环,而不终止整个循环(整个循环往往有很多轮循环组成,continue只终止其中的某一轮,然后继续下一个循环)
代码区:
"""
作者:Troublemaker
功能:判断密码强度
版本:1.0
日期:2019/11/2 20:25
脚本:1.0.py
"""
def main():
"""
主函数
"""
# 初始化参数
strength_level = 0 # 密码强度
times = 0 # 记录密码次数
print("密码要求:长度至少8位,需要包含字母和数字")
input_psd = input("请输入您的密码:")
times += 1
# 设置循环
while times <= 5:
# 判断密码强度
if input_psd.isnumeric():
print("密码不能只包含数字")
else:
strength_level += 1
if input_psd.isalpha():
print("密码不能只包含字母")
else:
strength_level += 1
if len(input_psd) < 8:
print("密码不能少于八位")
else:
strength_level += 1
if strength_level == 3:
print("恭喜您,密码设置成功")
break # 设置成功,直接跳出这个While循环
else:
input_psd = input("请输入您的密码:")
times += 1
# 友好的交互
if strength_level != 3:
print("密码设置次数过多,请稍后再试")
if __name__ == "__main__":
main()
3.0+4.0 实现功能
- 3.0新增:保存设置的密码及其对应的强度到文件中
- 4.0新增:读取保存的密码
知识点:
-
文件操作步骤:
- 打开文件—>操作文件(读、写)—>关闭文件
-
打开文件:建立文件与程序的关联
- open(filename, mode)
- filename:文件路径+文件名
- mode:操作方式
- open(filename, mode)
-
操作文件:
打开模式 含义 “r” 只读,当文件不存时,报错 “w” 只写,当文件不存在时,自动创建 “a” 在文件末尾附加 “r+” 读和写 -
关闭文件:终止程序与文件的关联
- close()
-
可以用with结构操作文件,当你不需要操作时,自动关闭文件 。
示例:
with opne(filename, "r") as f:
# 对文件的操作
# 就不需要用close()关闭文件了
代码区:
"""
作者:Troublemaker
功能:判断密码强度
版本:3.0+4.0
日期:2019/11/3 10:25
脚本:3.0.py
"""
def main():
"""
主函数
"""
# 初始化的参数
strength_level = 0 # 密码强度
times = 0 # 记录密码次数
print("密码要求:长度至少8位,需要包含字母和数字")
input_psd = input("请输入您的密码:")
times += 1
# 设置循环
while times <= 5:
# 判断密码强度
if input_psd.isnumeric():
print("密码不能只包含数字")
else:
strength_level += 1
if input_psd.isalpha():
print("密码不能只包含字母")
else:
strength_level += 1
if len(input_psd) < 8:
print("密码不能少于八位")
else:
strength_level += 1
# 写入到文件, 放这里会保存你所有尝试的密码
file_path = "strength_level.txt"
with open(file_path, 'a', encoding='utf-8') as f:
# write()里面写入的必须是字符串str格式的
f.write("密码: " + input_psd + " , 强度:" + str(strength_level) + "\n")
if strength_level == 3:
print("恭喜您,密码设置成功")
break # 设置成功,直接跳出这个While循环
else:
strength_level = 0 # 这句话是让每次尝试后强度重新为0,没有它会出现bug
input_psd = input("请输入您的密码:")
times += 1
# 友好的交互
if strength_level != 3:
print("密码设置次数过多,请稍后再试")
# if strength_level == 3: # 放这里的话,就只保存设置通过的密码
# # 写入文件,保存密码以及对应的强度
# file_path = "strength_level.txt"
# with open(file_path, 'a', encoding='utf-8') as f:
# # write()里面写入的必须是字符串str格式的
# f.write("密码: " + input_psd + " , 强度:" + str(strength_level) + "\n")
# 读取保存的密码
with open(file_path, 'r', encoding="utf-8") as f:
txt = f.readline() # 只读第一行
print(txt)
contents = f.readlines() # 返回一个列表,把每一行当成列表中的一个元素
for content in contents: # 遍历列表,把其中的值都打印出来
print(content)
if __name__ == "__main__":
main()
5.0+6.0 实现功能
- 5.0新增:将相关方法封装成一个整体:面向对象编程
- 6.0新增:将文件操作封装到一个类中
知识点:
-
类(class):某种类型集合的描述
-
属性:类本身的一些特性
-
方法:类所能实现的行为
-
类的定义
-
class ClassName
-nit__(self) 构造函数:初始化对象的各属性
self代表类的实例
-
-
封装
- 将数据及相关操作打包在一起
- 支持代码复用
-
继承
- 子类(subclass)借用父类(superclass)的行为
- 避免重复操作,提升代码复用程度
- 定于class ClassName(SuperClassName)
-
多态
- 在不同情况下用一个函数启用不同方法
- 灵活性
代码区:
"""
作者:Troublemaker
功能:判断密码强度
版本:3.0+4.0
日期:2019/11/3 10:25
脚本:3.0.py
"""
class Read_Write:
"""
读写操作类
"""
def __init__(self, flie_path):
"""初始化属性"""
self.flie_path = flie_path
def write_in(self, content):
"""写文件的方法"""
with open(self.flie_path, 'a', encoding='utf-8') as f:
# write()里面写入的必须是字符串str格式的
f.write(content)
def read_in(self):
"""读文件的方法"""
with open(self.flie_path, 'r', encoding="utf-8") as f:
contents = f.readlines() # 返回一个列表,把每一行当成列表中的一个元素
for content in contents: # 遍历列表,把其中的值都打印出来
print(content)
class Password:
"""
密码相关的类
"""
def __init__(self, password):
self.password = password
self.strength_level = 0
def check_password(self):
"""检测密码的过程"""
if self.password.isnumeric():
print("密码不能只包含数字")
else:
self.strength_level += 1
if self.password.isalpha():
print("密码不能只包含字母")
else:
self.strength_level += 1
if len(self.password) < 8:
print("密码不能少于八位")
else:
self.strength_level += 1
def main():
"""
主函数
"""
# 初始化的参数
times = 0 # 记录密码次数
file_path = "strength_level.txt" # 文件路径
print("密码要求:长度至少8位,需要包含字母和数字")
input_psd = input("请输入您的密码:")
times += 1
# 实例化类
password_check = Password(input_psd)
read_and_write = Read_Write(file_path)
# 设置循环
while times <= 5:
# 判断密码强度
password_check.check_password()
# 写入到文件, 放这里会保存你所有尝试的密码
content = "密码: " + input_psd + " , 强度:" + str(password_check.strength_level) + "\n"
read_and_write.write_in(content)
if password_check.strength_level == 3:
print("恭喜您,密码设置成功")
break # 设置成功,直接跳出这个While循环
else:
password_check.strength_level = 0 # 这句话是让每次尝试后强度重新为0,没有它会出现bug
input_psd = input("请输入您的密码:")
password_check = Password(input_psd)
times += 1
# 友好的交互
if password_check.strength_level != 3:
print("密码设置次数过多,请稍后再试")
# 读取文件
read_and_write.read_in()
if __name__ == "__main__":
main()
课后练习(这个代码在1.0的基础上修改)
- question:同时包含大小写字母。
- 必须包含特殊符号,比如+,-,*,¥等。
"""
作者:Troublemaker
功能:判断密码强度
版本:1.0
日期:2019/11/3 20:25
脚本:1.0.py
"""
def main():
"""
主函数
"""
strength_level = 0
print("密码要求:长度至少8位,需要包含大小写字母,需要包含数字,需要有特殊符号")
input_psd = input("请输入您的密码:")
# 判断密码强度
if input_psd.isnumeric():
print("密码不能只包含数字")
else:
strength_level += 1
if input_psd.isalpha():
print("密码不能只包含字母")
else:
if input_psd.islower() or input_psd.isupper():
print("密码中的字母不能全为大写或者小写")
else:
strength_level += 1
if len(input_psd) < 8:
print("密码不能少于八位")
else:
strength_level += 1
# 判断是否有特殊字符
string = "~!@#$%^&*()_+-*/<>,.[]\/"
for i in string:
if i in input_psd:
strength_level += 1
break
# 这边如果把else和上面if对齐,会打印很多次
else:
print("密码中缺少特殊字符")
if strength_level == 4:
print("恭喜您,密码设置成功")
if __name__ == "__main__":
main()