人工智能学习联盟免费课程——案例六:判断密码强弱
2019-03-23 11:16
190 查看
目录
案例六 判断密码强弱
功能1.0 基础判断
识别密码是否满足:
- 8位
- 有数字
- 有字母
def check_num1(strings): for x in strings: if x.isnumeric(): return True return False def check_letter1(strings): for x in strings: if x.isalpha(): return True return False
def check_passwords1(): passwords = input('请输入密码:') strength_level = 0 #规则1 if len(passwords) >= 8: strength_level += 1 else: print('密码至少8位!') #规则2 if check_num1(passwords): strength_level += 1 else: print('密码至少包含一位数字!') #规则3 if check_letter1(passwords): strength_level += 1 else: print('密码至少包含一位字母!') if strength_level == 3: print('恭喜!密码强度合格!') else: print('对不起,您的密码强度过低,请再次输入!')
check_passwords1()
请输入密码:1234 密码至少8位! 密码至少包含一位字母! 对不起,您的密码强度过低,请再次输入!
功能2.0 限制输入次数
限制输入次数,并且提前终止
- break
- continue
for i in range(10): if i % 2 == 0: break print('如果是break,输出为:',i) #break终止整个循环,i第一个就是0,所以不打印直接终止整个循环,输出为空 for i in range(10): if i % 2 == 0: continue print('如果是continue,输出为:',i) #bcontinue终止当前循环,i如果是偶数,就结束这个循环,继续下一个循环,下一个循环i是奇数,所以输出i
如果是continue,输出为: 1 如果是continue,输出为: 3 如果是continue,输出为: 5 如果是continue,输出为: 7 如果是continue,输出为: 9
def check_num2(strings): has_number = False for x in strings: if x.isnumeric(): has_number = True break return has_number def check_letter2(strings): has_letter = False for x in strings: if x.isalpha(): has_letter = True break return has_letter
↑更改判断循环的输出结构,并且添加密码输入次数限制2次↓
- 自己写的
def check_passwords2(): passwords = input('请输入密码:') n = 1 while n <=3: strength_level = 0 #规则1 if len(passwords) >= 8: strength_level += 1 else: print('密码至少8位!') #规则2 if check_num2(passwords): strength_level += 1 else: print('密码至少包含一位数字!') #规则3 if check_letter2(passwords): strength_level += 1 else: print('密码至少包含一位字母!') if strength_level == 3: print('恭喜!密码强度合格!') break else: print('对不起您,的密码强度太低!') print('**************************************') n += 1 if n <= 2: passwords = input('请再次输入:') if n >= 3: print('您的输入次数已达上限,请稍后再试!')
- 老师写的(限制5次输入)
def check_passwords3(): times = 5 while times > 0: passwords = input('请输入密码:') strength_level = 0 #规则1 if len(passwords) >= 8: strength_level += 1 else: print('密码至少8位!') #规则2 if check_num2(passwords): strength_level += 1 else: print('密码至少包含一位数字!') #规则3 if check_letter2(passwords): strength_level += 1 else: print('密码至少包含一位字母!') if strength_level == 3: print('恭喜!密码强度合格!') break else: print('对不起您,的密码强度太低!') print('**************************************') times -= 1 if times <= 0: print('您的输入次数已达上限,请稍后再试!')
check_passwords3()
请输入密码:1234 密码至少8位! 密码至少包含一位字母! 对不起您,的密码强度太低! ************************************** 请输入密码:abcd 密码至少8位! 密码至少包含一位数字! 对不起您,的密码强度太低! ************************************** 请输入密码:1234abc 密码至少8位! 对不起您,的密码强度太低! ************************************** 请输入密码:12341234 密码至少包含一位字母! 对不起您,的密码强度太低! ************************************** 请输入密码:acdvfghjk 密码至少包含一位数字! 对不起您,的密码强度太低! ************************************** 您的输入次数已达上限,请稍后再试!
功能3.0 保存密码及强度
def check_passwords4(): times = 5 while times > 0: passwords = input('请输入密码:') strength_level = 0 #规则1 if len(passwords) >= 8: strength_level += 1 else: print('密码至少8位!') #规则2 if check_num2(passwords): strength_level += 1 else: print('密码至少包含一位数字!') #规则3 if check_letter2(passwords): strength_level += 1 else: print('密码至少包含一位字母!') #文件操作,在之前文件的基础上续写,如果没有该文件则直接创建新文件 f = open('passwords.txt','a') f.write('密码:{},强度:{}\n'.format(passwords,strength_level)) f.close() if strength_level == 3: print('恭喜!密码强度合格!') break else: print('对不起您,的密码强度太低!') print('**************************************') times -= 1 if times <= 0: print('您的输入次数已达上限,请稍后再试!')
check_passwords4()
请输入密码:12345ghjk 恭喜!密码强度合格!
功能4.0 文件读取
文件读取有几种方式:
- read 读取全部内容为一个字符串
- readline 按行读取,每次读取一行,返回下一行内容的字符串
- readlines 按行读取,一次读取所有行为一个列表,每一个元素是以换行符为结尾的一个字符串
遍历文件的方式:首先是f = open(‘filename’,‘r’)
- for line in f.readlines():
- for line in f:
还是习惯用pandas的读取存储。。。
功能5.0 判断函数的封装
面向对象(OPP,Object Oriented Programming)编程。
- 类的概念——对象的集合称为类(class) 类的属性——类本身的一些特征
- 类的方法——类所能实现的行为
class ClassName
init(self)构造函数:初始化类的属性
self代表类的实例
类的定义
本例中,是将密码判断的一系列函数都作为对象来处理的,这些函数抽象为一种处理工具,工具自身有两个属性,分别是密码和密码强度,其中密码需要输入实参,所以在初始化时,需要设定一个输入参数密码password,并且给密码强度一个初始值。
类里函数的定义:func(self,agrs)。如果函数内部需要的参数是类的属性值,则直接调用class.attr,不用在定义时写形参。
class PasswordTool: ''' 密码工具类 ''' #初始化 def __init__(self,password): #类的属性 self.password = password self.strength_level = 0 #类的方法 def process_password(self): #规则1 if len(self.password) >= 8: self.strength_level += 1 else: print('密码至少8位!') #规则2 if self.check_num3(): self.strength_level += 1 else: print('密码至少包含一位数字!') #规则3 if self.check_letter3(): self.strength_level += 1 else: print('密码至少包含一位字母!') def check_num3(self): has_number = False for x in self.password: if x.isnumeric(): has_number = True break return has_number def check_letter3(self): has_letter = False for x in self.password: if x.isalpha(): has_letter = True break return has_letter
类的调用
直接将类赋值给一个变量a,则其内部所有的函数func和变量arg都可以直接用a.func和a.arg来调用。
def check_passwords5(): times = 5 while times > 0: password = input('请输入密码:') #实例化密码工具对象 password_tool = PasswordTool(password) password_tool.process_password() #文件操作,在之前文件的基础上续写,如果没有该文件则直接创建新文件 f = open('passwords.txt','a') f.write('密码:{},强度:{}\n'.format(password,password_tool.strength_level)) f.close() if password_tool.strength_level == 3: print('恭喜!密码强度合格!') break else: print('对不起您,的密码强度太低!') print('**************************************') times -= 1 if times <= 0: print('您的输入次数已达上限,请稍后再试!')
check_passwords5()
请输入密码:123456 密码至少8位! 密码至少包含一位字母! 对不起您,的密码强度太低! ************************************** 请输入密码:abcd 密码至少8位! 密码至少包含一位数字! 对不起您,的密码强度太低! ************************************** 请输入密码:1234abcd 恭喜!密码强度合格!
功能6.0 文件函数的封装
类的定义
本例中,是将文件读取和写入函数作为对象来处理的,这些函数抽象为一种处理工具,工具自身有一个属性,就是文件路径,它需要输入实参,所以在初始化时,需要设定一个输入参数文件路径filepath。
class FileTool: ''' 文件工具类 ''' #初始化 def __init__(self,filepath): #类的属性 self.filepath = filepath #类的方法 def write_to_file(self,line): f = open(self.filepath,'a') f.write(line) f.close() def read_from_file(self): f = open(self.filepath,'r') lines = f.readlines() f.close() return lines
类的调用
def check_passwords6(): times = 5 filepath = 'passwords_6.txt' file_tool = FileTool(filepath) while times > 0: password = input('请输入密码:') #实例化密码工具对象 password_tool = PasswordTool(password) password_tool.process_password() #实例化文件工具对象 #写操作 line = '密码:{},强度:{}\n'.format(password,password_tool.strength_level) file_tool.write_to_file(line) if password_tool.strength_level == 3: print('恭喜!密码强度合格!') break else: print('对不起您,的密码强度太低!') print('**************************************') times -= 1 if times <= 0: print('您的输入次数已达上限,请稍后再试!') #读操作 lines = file_tool.read_from_file() for line in lines: print(line)
check_passwords6()
请输入密码:1234 密码至少8位! 密码至少包含一位字母! 对不起您,的密码强度太低! ************************************** 请输入密码:abcd 密码至少8位! 密码至少包含一位数字! 对不起您,的密码强度太低! ************************************** 请输入密码:1234abcd 恭喜!密码强度合格! 密码:1234,强度:1 密码:abcd,强度:1 密码:1234abcd,强度:3
课后思考
- 同时必须包含大小写
- 必须包含特殊符号,如:+、-、* 等
思考1很简单,只需要再写两个判断函数借助于is.upper和is.lower来判断即可。
思考2判断方法如下,求出字符串中特殊符号的个数,然后再判断是否为0,进而输出布尔值。就不写函数了。(这种方法不支持\符号的使用)
#定义一个判断是否含有特殊符号的函数 def check_special(): password = input('请输入密码:') special_list = r''' '";:[]{}.,><+-!@#$%^&*()=_\|/?~` ''' has_special = False for i in password: if i in special_list: has_special = True return has_special
相关文章推荐
- 人工智能学习联盟免费课程——案例八:城市空气质量指数计算
- 人工智能学习联盟免费课程——案例七:模拟掷骰子
- 《From Zero to Hero – 从1000个代码案例中学习人工智能和大数据》课程
- python语言学习笔记(二)------判断输入密码强弱
- 给iPhone应用开发的有志者的100个免费的课程和学习指南(100 Free Courses & Tutorials for Aspiring iPhone App Developers)
- 学习内容:KNN算法实现-阿里云人工智能课程笔记
- JS对密码强弱的判断
- 北美18名校的数据挖掘,数据分析,人工智能及机器学习课程汇总
- Windows Mobile 6 应用程序开发免费学习课程
- 从零入门人工智能+深度学习精华实践课程|人工智能视频教程
- 数据挖掘、数据分析、人工智能及机器学习课程资源
- 【干货每周壹分享】:关于CSDN的人工智能课程免费教学视频教程分享
- python案例学习密码设置强度
- 计算机专业相关课程学习资料大汇总 优质学习资料我的百度网盘免费下载
- 北美+德国18名校的数据挖掘、数据分析、人工智能及机器学习课程资源汇总
- 北美+德国18名校的数据挖掘、数据分析、人工智能及机器学习课程资源汇总
- 判断密码强弱
- 软件开发嵌入式方向+ ACM程序设计/C语言/算法与数据结构+ C++/C#语言+汇编语言+人工智能 学习资料免费下载
- 北美18名校的数据挖掘,数据分析,人工智能及机器学习课程汇总
- 10 大在线免费深度学习课程