python 入门学习-判断密码强弱

2023-10-11 18:40

本文主要是介绍python 入门学习-判断密码强弱,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

注:本章节内容是看了小象学院视频教程之后的笔记整理。

本章节内容涉及到的 python 知识点:

1.python 字符串的判断函数 : str.isnumeric()           str.isalpha()          str.islower()     str.isupper()

更多关于isxxx()方法请参考  https://docs.python.org/3/library/stdtypes.html#string-methods

2.python 文件的操作  : 打开文件 -> 操作文件(读写等) -> 关闭文件

打开文件:建立文件与程序的关联

 open(filename, mode)        filename:文件名(包括路径)  mode:打开模式  

打开模式含义
r只读,文件不存在则报错
w只写,文件不存在则自动创建
a在文件末尾附加写入内容
r+读写

 

写入操作:

write() : 将文本写入文件中

writelines():将字符串列表写入到文件中

关闭文件:终止程序与文件的关联

close()

3.python 读取保存的文件

读取操作:从文件读取数据到计算机内存中

read():返回值为包含整个文件内容的一个字符串

readline():返回值为文件下一行的内容的字符串

readlines();返回值为整个文件内容的列表,每项是以换行符为结尾的一行字符串

4. python 文件遍历

以下是几种写法

    print('第一种方式')f = open('tmp.txt','r')for line in f.readlines():# 处理一行数据print(line)f.close()print('第二种方式')f = open('tmp.txt','r')for line in f :#处理一行数据print(line)f.close()print('第三种方式')f = open('tmp.txt','r')content = f.read()print(content)f.close()

5.python 将相关方法封装成一个整体 ;面向对象编程

  • 面向过程(pop):以程序执行过程问设计流程的编程思想
  • 面向对象(oop):以实物为中心的编程思想
  • 对象(object):  现实世界中的对象: 属性  +  行为

对象的例子;  a)波斯猫   , 属性:品种、颜色、大小;   行为;叫,捉老鼠

                     b)吉普车     ,属性: 类型,用途;       行为: 发动,行驶,停车, 载人

                      c)华为手机   属性:型号,配置,颜色    行为: 打电话, 关机,上网

  • 类(calss):某种类型集合的描述
  • 属性:类本身的一些特性
  • 方法:类所能实现的一些行为

类的定义:

calsss ClassName

 __init__(self ,...)           构造函数:初始化对象的个属性   self代表类的实例 , ... 表示传递的参数

注:调用之前必须实例化先

 如以下的用法 

class FileTool:def __init__ (self, filepath) :self.filepath = filepathdef 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
filepath = 'abc.txt'
line_temp = 'hello_test_20190730'# 实例化文件工具对象
file_tool = FileTool(filepath)# 调用类中的函数
read = file_tool.read_from_file()
print(read)file_tool.write_to_file(line_temp)

 

6.将文件操作封装到一个类中

  • 封装    : 将数据及相关操作打包在一起, 支持代码复用
  • 继承     :子类(subclass)继承父类(superclass)的行为 ; 避免重复操作,提升代码的复用程度 ;定义class ClassName(superClassName)
  • 多态  :在不同情况下用一个函数名启用不同方法; 灵活性

 

lesson_1:

案例描述:

密码强度,是指一个密码对抗猜测或时暴力破解的有效程度;一般是指一个未授权的访问者得到正确密码的凭据尝试次数。

本节使用简易版的规则:

1)密码长度至少8位

2)密码含有数字

3)密码含有字母

设置一个变量strength_level用于记录密码强度,初始为0.满足规则的一个条件对其加1 

长度判断:使用 len() 方法

包含数字判断:使用isnumeric()方法

包含字母判断:使用isalpha()方

strengh_level 等于 3 ,密码强度合格,否则不合格

本节使用到的代码及运行结果

"""
作者:
功能:判断密码的强弱
版本:v1.0
日期:20190729"""
def check_number_exist(password_str):"""判断字符串中是否含有数字:param password_str::return:"""for c in password_str:if c.isnumeric():return Truereturn Falsedef check_letter_exist(password_str):"""判断字符串中是否含有字母:param password_str::return:"""for c in password_str:if c.isalpha():return Truereturn Falsedef main():strength_level = 0password_str = input('请输入密码8位')if len(password_str) >= 8:strength_level += 1else :print('要求输入密码大于8位数')if check_number_exist(password_str):# print('has_number')strength_level += 1else:print('要求有数字')if check_letter_exist(password_str):# print('has letter')strength_level += 1else:print('要求有字母')if strength_level >= 3:print('密码强度合格')else:print('密码强度不合格')if __name__ == '__main__':main()

lesson_2

使用到的另外的知识点  for循环中的 break 语句和 continue 语句

break 终止整个循环

continue 只终止本次循环,而不终止整个循环的执行

如下代码

print('start test for + break')
for i in range(100):if i % 2 == 0:breakprint(i)
print('end test break')print('start test for + continue')
for j  in range(100):if j % 2==0:continueprint(j)
print('end test continue')

实验结果分析:

 for  break 后没有输出 任何信息 i =0  i%2==0 执行了 break 然后跳出了 for 循环  直接打印 print('end test break')

for  continue 后结束本次循环没有打印满足 i%2的  i值 但是打印了 1 3 5 7 .... 

lesson_3

本节的代码源码及执行结果:

"""
作者:
功能:判断密码的强弱
版本:v3.0
日期:20190729
v3.0 将密码保存到 文件"""
def check_number_exist(password_str):"""判断字符串中是否含有数字:param password_str::return:"""for c in password_str:if c.isnumeric():return Truereturn Falsedef check_letter_exist(password_str):"""判断字符串中是否含有字母:param password_str::return:"""for c in password_str:if c.isalpha():return Truereturn Falsedef main():strength_level = 0password_str = input('请输入密码8位')if len(password_str) >= 8:strength_level += 1else :print('要求输入密码大于8位数')if check_number_exist(password_str):# print('has_number')strength_level += 1else:print('要求有数字')if check_letter_exist(password_str):# print('has letter')strength_level += 1else:print('要求有字母')f = open('password_test3.0.txt','a')f.write('密码:{},强度:{},\n'.format(password_str,strength_level))f.close()if strength_level >= 3:print('密码强度合格')else:print('密码强度不合格')if __name__ == '__main__':main()

lesson_4

 

本节代码源码及运行结果:

"""作者:梁斌功能:判断密码强度版本:2.02.0新增功能:循环的终止3.0新增功能:保存密码及强度到文件中4.0新增功能:读取文件中的密码日期:09/09/2017
"""def check_number_exist(password_str):"""判断字符串中是否含有数字"""has_number = Falsefor c in password_str:if c.isnumeric():has_number = Truebreakreturn has_numberdef check_letter_exist(password_str):"""判断字符串中是否含有字母"""has_letter = Falsefor c in password_str:if c.isalpha():has_letter = Truebreakreturn has_letterdef main():"""主函数"""# try_times = 5## while try_times > 0:##     password = input('请输入密码:')##     # 密码强度#     strength_level = 0##     # 规则1:密码长度大于8#     if len(password) >= 8:#         strength_level += 1#     else:#         print('密码长度要求至少8位!')##     # 规则2:包含数字#     if check_number_exist(password):#         strength_level += 1#     else:#         print('密码要求包含数字!')##     # 规则3:包含字母#     if check_letter_exist(password):#         strength_level += 1#     else:#         print('密码要求包含字母!')##     f = open('password_3.0.txt', 'a')#     f.write('密码:{}, 强度:{}\n'.format(password, strength_level))#     f.close()##     if strength_level == 3:#         print('恭喜!密码强度合格!')#         break#     else:#         print('密码强度不合格!')#         try_times -= 1##     print()## if try_times <= 0:#     print('尝试次数过多,密码设置失败!')# 读取文件f = open('password_3.0.txt', 'r')# 1. read()# content = f.read()# print(content)# 2. readline()# line = f.readline()# print(line)# line = f.readline()# print(line)# 3. readlines()for line in f:print('read: {}'.format(line))f.close()if __name__ == '__main__':main()

lesson_5:

以下是本节的源代码和执行结果:

"""
作者:
功能:判断密码的强弱
版本:v3.0
日期:20190729
v5.0 定义一个password 工具类
"""class PasswordTool:"""密码工具类"""def __init__(self,password):# 类的属性self.password = passwordself.strlength_level = 0def process_password(self):# 规则1 密码长度大于 8if len(self.password) >= 8 :self.strlength_level += 1else:print('要求长度不能小于8')#规则2 密码包含数字if self.check_number_exist():self.strlength_level += 1else:print('要求有数字')#规则3 密码包含字母if self.check_letter_exist():self.strlength_level += 1else:print('要求有字母')"""类的方法"""def check_number_exist(self):"""判断字符串中含义数字"""has_number = Falsefor c in self.password:if c.isnumeric():has_number = Truebreakreturn has_numberdef check_letter_exist(self):"""判断字符串中含义数字"""has_letter = Falsefor c in self.password:if c.isalpha():has_letter = Truereturn has_letterdef main():try_time = 2while try_time > 0 :password = input('请输入密码8位')# 实例化密码工具对象password_toll = PasswordTool(password)password_toll.process_password()# f = open('password_test3.0.txt','a')# f.write('密码:{},强度:{},\n'.format(password_str,strength_level))# f.close()if password_toll.strlength_level >= 3:print('密码强度合格')breakelse:print('密码强度不合格')try_time -= 1if try_time <= 0:print('尝试次数过多,密码设置失败')if __name__ == '__main__':main()

 

lesson_6

以下是本节的练习源码和执行结果(将 file 函数封装,定义一个文件工具类)

输出结果有两种形式:一种是以文件列表方式 一种是输出全部的内容

"""
作者:
功能:判断密码的强弱
版本:v6.0
2.0新增功能:循环的终止
3.0新增功能:保存密码及强度到文件中
4.0新增功能:读取文件中的密码
5.0新增功能:定义一个password工具类
6.0新增功能:定义一个文件工具类
"""class PasswordTool:"""密码工具类"""def __init__(self,password):# 类的属性self.password = passwordself.strlength_level = 0def process_password(self):# 规则1 密码长度大于 8if len(self.password) >= 8 :self.strlength_level += 1else:print('要求长度不能小于8')#规则2 密码包含数字if self.check_number_exist():self.strlength_level += 1else:print('要求有数字')#规则3 密码包含字母if self.check_letter_exist():self.strlength_level += 1else:print('要求有字母')"""类的方法"""def check_number_exist(self):"""判断字符串中含义数字"""has_number = Falsefor c in self.password:if c.isnumeric():has_number = Truebreakreturn has_numberdef check_letter_exist(self):"""判断字符串中含义数字"""has_letter = Falsefor c in self.password:if c.isalpha():has_letter = Truereturn has_letterclass 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_lines(self):f = open(self.filepath, 'r')lines = f.readlines()f.close()return linesdef read_from_file(self):f = open(self.filepath,'r')line = f.read()f.close()return linedef main():try_time = 2filepath = 'abc.txt'neirong = '12346'#实例化文件工具对象file_toll = FileTool(filepath)while try_time > 0 :password = input('请输入密码8位')# 实例化密码工具对象password_toll = PasswordTool(password)password_toll.process_password()line = '密码:{} 强度:{} \n '.format(password, password_toll.strlength_level)# f = open('password_test3.0.txt','a')# f.write('密码:{},强度:{},\n'.format(password_str,strength_level))# f.close()file_toll.write_to_file(line)if password_toll.strlength_level >= 3:print('密码强度合格')breakelse:print('密码强度不合格')try_time -= 1if try_time <= 0:print('尝试次数过多,密码设置失败')read_lines = file_toll.read_from_file_lines()print(read_lines)read = file_toll.read_from_file()print(read)if __name__ == '__main__':main()

 

 

 

这篇关于python 入门学习-判断密码强弱的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/190073

相关文章

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

Python实现精确小数计算的完全指南

《Python实现精确小数计算的完全指南》在金融计算、科学实验和工程领域,浮点数精度问题一直是开发者面临的重大挑战,本文将深入解析Python精确小数计算技术体系,感兴趣的小伙伴可以了解一下... 目录引言:小数精度问题的核心挑战一、浮点数精度问题分析1.1 浮点数精度陷阱1.2 浮点数误差来源二、基础解决

MySQL8 密码强度评估与配置详解

《MySQL8密码强度评估与配置详解》MySQL8默认启用密码强度插件,实施MEDIUM策略(长度8、含数字/字母/特殊字符),支持动态调整与配置文件设置,推荐使用STRONG策略并定期更新密码以提... 目录一、mysql 8 密码强度评估机制1.核心插件:validate_password2.密码策略级

使用Python实现Word文档的自动化对比方案

《使用Python实现Word文档的自动化对比方案》我们经常需要比较两个Word文档的版本差异,无论是合同修订、论文修改还是代码文档更新,人工比对不仅效率低下,还容易遗漏关键改动,下面通过一个实际案例... 目录引言一、使用python-docx库解析文档结构二、使用difflib进行差异比对三、高级对比方

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达

从入门到精通详解Python虚拟环境完全指南

《从入门到精通详解Python虚拟环境完全指南》Python虚拟环境是一个独立的Python运行环境,它允许你为不同的项目创建隔离的Python环境,下面小编就来和大家详细介绍一下吧... 目录什么是python虚拟环境一、使用venv创建和管理虚拟环境1.1 创建虚拟环境1.2 激活虚拟环境1.3 验证虚

详解python pycharm与cmd中制表符不一样

《详解pythonpycharm与cmd中制表符不一样》本文主要介绍了pythonpycharm与cmd中制表符不一样,这个问题通常是因为PyCharm和命令行(CMD)使用的制表符(tab)的宽... 这个问题通常是因为PyCharm和命令行(CMD)使用的制表符(tab)的宽度不同导致的。在PyChar

如何通过try-catch判断数据库唯一键字段是否重复

《如何通过try-catch判断数据库唯一键字段是否重复》在MyBatis+MySQL中,通过try-catch捕获唯一约束异常可避免重复数据查询,优点是减少数据库交互、提升并发安全,缺点是异常处理开... 目录1、原理2、怎么理解“异常走的是数据库错误路径,开销比普通逻辑分支稍高”?1. 普通逻辑分支 v

Python中Json和其他类型相互转换的实现示例

《Python中Json和其他类型相互转换的实现示例》本文介绍了在Python中使用json模块实现json数据与dict、object之间的高效转换,包括loads(),load(),dumps()... 项目中经常会用到json格式转为object对象、dict字典格式等。在此做个记录,方便后续用到该方

从基础到高级详解Python数值格式化输出的完全指南

《从基础到高级详解Python数值格式化输出的完全指南》在数据分析、金融计算和科学报告领域,数值格式化是提升可读性和专业性的关键技术,本文将深入解析Python中数值格式化输出的相关方法,感兴趣的小伙... 目录引言:数值格式化的核心价值一、基础格式化方法1.1 三种核心格式化方式对比1.2 基础格式化示例