小言_互联网的博客

判断密码强弱

272人阅读  评论(0)

python 字符串

str.isnumeric() 检测字符串是否只由数字组成
str.isalpha() 检测字符串是否只由字母组成
str.islower() 检测字符串中的字母是否都为小写
str.isupper 检测字符串中所有的字母是否都为大写

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

循环的终止

  • break 语句
    终止整个循环
    例如:0除以2的余数为0,break 语句,终止整个循环,因此无输出
  • continue 语句
    只终止本次循环,而不终止整个循环的执行
    例如:0除以2的余数为0,本次循环终止,但不终止整个循环的执行;
    1除以2的余数不为0,循环不终止,继续运行,执行print()语句;
    ······

    文件的基础
  • 文件:存储在外部介质(如:硬盘)上的数据或信息的集合
  • 文本文件:一般只有字符编码储存的文件,能够被最简单的文本编辑器直接读取
  • 编码:信息从一种形式转换为另一种形式的过程
  • 常用的编码:ASCLL,Unicode,UTF-8…
  • 多行文本,用\n 表示换行

文件的操作

  • 步骤:打开文件 —>操作文件(读、写等)—> 关闭文件
  • 1.打开文件:建立文件与程序的关联
    open (filename, mode)
    filename : 文件名(包括路径名);
    mmode : 打开模式
打开模式 含义
r 只读,文件不存在则报错
w 只写,文件不存在则自动创建
a 在文件末尾附加
r+ 读写
  • 2.操作文件:写入,读取,等

    • 写入操作:将计算机内存向文件写入数据
    • write() :将文本数据写入文件中
    • writelines() : 将字符串列表写入文件中
  • 3.关闭文件:终止程序与文件的关联

    • close()
  • 4.读取操作:从文件中读取数据到计算机内存中

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

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

  • readlines() :返回值为整个文件内容的列表,么想是以换行符为结尾的一行字符串

  • 文件的遍历

f = open ('tmp.txt','r')
for line in f.readlines() :
	#处理一行数据
	pass
f.close()
f = open ('tmp.txt','r')
for line in f:
	#处理一行数据
	pass
f.close()

面向过程VS面向对象

  • 面向过程(POP):以程序执行过程为设计流程的编程思想(例:流程图)

  • 面向对象(OOP)以事务为中心的编程思想

  • 什么是对象(Object)?

  • 现实世界找那个的对象:属性、行为

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

  • 类(class):某种类型集合的描述

  • 属性:类本身的一种特性

  • 方法:类所能实现的行为

  • 类的定义:
    class ClassName
    __init __(self)构造函数 : 初始化对象的各属性
    self代表的类的实例
    类到对象,是一个实例化的过程
    对象到类,是一个抽象的过程
    面向对象特点

  • 封装
    将数据及相关操作打包在一起
    支持代码复用

  • 继承
    子类(subclass)借用父类(superclass)
    避免重复操作,提升代码复用程度
    定义 class ClassName (SuperClassName)

  • 多态
    在不同情况下用同一个函数名启用不同方法
    灵活性

版本:1.0

"""
    作者:陈洁
    功能:判断密码强度
    版本:1.0
    日期:08/10/2019
"""


def check_number_exist(password_str):
    """
        判断字符中是否含有数字
    """
    for c in password_str:
        if c.isnumeric():
            #当函数在运行中,遇到return语句会提前终止函数,跳出函数
            return True
    return False


def check_letter_exist(password_str):
    """
    判断字符中是否含有字母
    """
    for c in password_str:
        if c.isalpha():
            return True
    return False


def main():
    """
    主函数
    """
    password = input('请输入密码:')

    #密码强度
    strength_level = 0

    #规则一:密码强度大于8
    if len(password) >= 8:
        strength_level += 1
    else:
        print('密码强度要求至少8位!')

    #规则二:包含数字
    if check_number_exist(password):
        strength_level += 1
    else:
        print('密码要求包含数字!')

    #规则三:包含字母
    if check_letter_exist(password):
        strength_level += 1
    else:
        print('密码要求包含字母!')

    if strength_level == 3:
        print('恭喜!密码强度合格!')
    else:
        print('抱歉!密码强度不合格!')


if __name__ =='__main__':
    main()

版本2.0
新增功能:限制尝次数,循环的终止
新使用知识点:循环的暂停和终止

"""
    作者:陈洁
    功能:判断密码强度
    版本:2.0
    日期:08/10/2019
    2.0新增功能:限制尝次数,循环的终止
"""
def check_number_exist(password_str):
    """
     判断字符中是否含有数字
    """
    has_number = False

    for c in password_str:
        if c.isnumeric():
            has_number = True
            break
    return has_number

def check_letter_exist(password_str):
    """
    判断字符中是否含有字母
    """
    has_letter = False
    for c in password_str:
        if c.isalpha():
            has_letter = True
            break
    return has_letter

def main():
    """
    主函数
    """
    try_times = 5

    while try_times >0:
        password = input('请输入密码:')

        #密码强度
        strength_level = 0

        #规则一:密码强度大于8
        if len(password) >= 8:
            strength_level += 1
        else:
            print('密码强度要求至少8位!')

        #规则二:包含数字
        if check_number_exist(password):
            strength_level += 1
        else:
            print('密码要求包含数字!')

        #规则三:包含字母
        if check_letter_exist(password):
            strength_level += 1
        else:
            print('密码要求包含字母!')

        if strength_level == 3:
            print('恭喜!密码强度合格!')
            break
        else:
            print('抱歉!密码强度不合格!')
            try_times -= 1
        print()
    if try_times <= 0:
        print('尝试次数过多,密码设置失败!')

if __name__ =='__main__':
    main()

版本3.0
新增功能:保存密码及强度到文件中
新使用知识点:文件的读写操作

"""
    作者:陈洁
    功能:判断密码强度
    版本:2.0
    日期:08/10/2019
    2.0新增功能:限制尝次数,循环的终止
    3.0新增功能:保存密码及强度到文件中
"""

def check_number_exist(password_str):
    """
     判断字符中是否含有数字
    """
    has_number = False

    for c in password_str:
        if c.isnumeric():
            has_number = True
            break

    return has_number

def check_letter_exist(password_str):
    """
    判断字符中是否含有字母
    """
    has_letter = False
    for c in password_str:
        if c.isalpha():
            has_letter = True
            break
    return has_letter

def main():
    """
    主函数
    """

    try_times = 5

    while try_times >0:
        password = input('请输入密码:')

        #密码强度
        strength_level = 0

        #规则一:密码强度大于8
        if len(password) >= 8:
            strength_level += 1
        else:
            print('密码强度要求至少8位!')

        #规则二:包含数字
        if check_number_exist(password):
            strength_level += 1
        else:
            print('密码要求包含数字!')

        #规则三:包含字母
        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('尝试次数过多,密码设置失败!')
        
if __name__ =='__main__':
    main()

版本4.0
新增功能:读取文件中的密码
新使用知识点:读取文件

"""
    作者:陈洁
    功能:判断密码强度
    版本:2.0
    日期:09/10/2019
    2.0新增功能:限制尝次数,循环的终止
    3.0新增功能:保存密码及强度到文件中
    4.0新增功能:读取文件中的密码
"""


def check_number_exist(password_str):
    """
     判断字符中是否含有数字
    """
    has_number = False

    for c in password_str:
        if c.isnumeric():
            has_number = True
            break

    return has_number


def check_letter_exist(password_str):
    """
    判断字符中是否含有字母
    """
    has_letter = False
    for c in password_str:
        if c.isalpha():
            has_letter = True
            break
    return has_letter


def main():
    """
    主函数
    """

    #1.read()
    # content = f.read()
    # print(content)

    #2.readline()
    # line = f.readline()
    # print(line)
    # line = f.readline()
    # print(line)

    #3.readlines()
    lines = f.readlines()
    print(lines)

    f = open('tmp.txt', 'r')
    for line in f.readlines():
        print('read: {}'.format(line))

    f.close()
if __name__ =='__main__':
    main()

版本5.0
新增功能:定义一个password工具类
新式样知识点:面向对象

"""
    作者:陈洁
    功能:判断密码强度
    版本:2.0
    日期:09/10/2019
    2.0新增功能:限制尝次数,循环的终止
    3.0新增功能:保存密码及强度到文件中
    4.0新增功能:读取文件中的密码
    5.0新增功能:定义一个password工具类
"""

class PasswordTool:
    """
        密码工具类
    """
    def __init__(self, password):
        #类的属性
        self.password = password
        self.strength_level = 0

    def process_password(self):
        # 规则一:密码强度大于8
        if len(self.password) >= 8:
            self.strength_level += 1
        else:
            print('密码强度要求至少8位!')

        # 规则二:包含数字
        if self.check_number_exist():
            self.strength_level += 1
        else:
            print('密码要求包含数字!')

        # 规则三:包含字母
        if self.check_letter_exist():
            self.strength_level += 1
        else:
            print('密码要求包含字母!')

    #类的方法
    def check_number_exist(self):
        """
         判断字符中是否含有数字
        """
        has_number = False

        for c in self.password:
            if c.isnumeric():
                has_number = True
                break

        return has_number

    def check_letter_exist(self):
        """
        判断字符中是否含有字母
        """
        has_letter = False
        for c in self.password:
            if c.isalpha():
                has_letter = True
                break
        return has_letter

def main():
    """
    主函数
    """

    try_times = 5

    while try_times >0:
        password = input('请输入密码:')
        #实例化密码工具对象
        password_toll = PasswordTool(password)
        password_toll.process_password()
        
        f = open('password_5.0.txt', 'a')
        f.write('密码:{},强度:{}\n '.format(password ,password_toll.strength_level))
        f.close()

        if password_toll.strength_level == 3:
            print('恭喜!密码强度合格!')

            break
        else:
            print('抱歉!密码强度不合格!')
            try_times -= 1
        print()

    if try_times <= 0:
        print('尝试次数过多,密码设置失败!')

if __name__ =='__main__':
    main()

版本6.0
新增功能:定义一个文件工具类

"""
    作者:陈洁
    功能:判断密码强度
    版本:2.0
    日期:10/10/2019
    2.0新增功能:限制尝次数,循环的终止
    3.0新增功能:保存密码及强度到文件中
    4.0新增功能:读取文件中的密码
    5.0新增功能:定义一个password工具类
    6.0新增功能:定义一个文件工具类
"""


class PasswordTool:
    """
        密码工具类
    """
    def __init__(self, password):
        #类的属性
        self.password = password
        self.strength_level = 0

    def process_password(self):
        # 规则一:密码强度大于8
        if len(self.password) >= 8:
            self.strength_level += 1
        else:
            print('密码强度要求至少8位!')

        # 规则二:包含数字
        if self.check_number_exist():
            self.strength_level += 1
        else:
            print('密码要求包含数字!')

        # 规则三:包含字母
        if self.check_letter_exist():
            self.strength_level += 1
        else:
            print('密码要求包含字母!')


    #类的方法
    def check_number_exist(self):
        """
         判断字符中是否含有数字
        """
        has_number = False

        for c in self.password:
            if c.isnumeric():
                has_number = True
                break

        return has_number


    def check_letter_exist(self):
        """
        判断字符中是否含有字母
        """
        has_letter = False
        for c in self.password:
            if c.isalpha():
                has_letter = True
                break
        return has_letter

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 main():
    """
    主函数
    """

    try_times = 5
    file_path = 'password_6.0.txt'
    # 实例化文件工具对象
    file_tool = FileTool(file_path)

    while try_times >0:
        password = input('请输入密码:')
        #实例化密码工具对象
        password_toll = PasswordTool(password)
        password_toll.process_password()

        line = '密码:{},强度:{}\n '.format(password, password_toll.strength_level)

        #写操作
        file_tool.write_to_file(line)

        #写文件
        f = open('password_5.0.txt', 'a')
        f.write('密码:{},强度:{}\n '.format(password ,password_toll.strength_level))
        f.close()

        if password_toll.strength_level == 3:
            print('恭喜!密码强度合格!')

            break
        else:
            print('抱歉!密码强度不合格!')
            try_times -= 1
        print()

    if try_times <= 0:
        print('尝试次数过多,密码设置失败!')

    #读操作
    lines = file_tool.read_from_file
    print(lines)


if __name__ =='__main__':
    main()

转载:https://blog.csdn.net/weixin_45454638/article/details/102389434
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场