Python:lec07-判断密码强弱

概述 :

Python:lec07-判断密码强弱_第1张图片

一、v1.0

  1. 案例分析
  • 设置一个变量strength_level用于记录密码的强度,初始为0。满足一个条件,对其加1。
  • 长度判断:使用len()方法
  • 包含数字判断:使用isnumeric()方法
  • 包含字母判断:使用isalpha()方法
  • 如果strength_level等于3,密码强度合格,否则不合格

    2、关于Python字符串

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

二、v2.0

  • 新增功能:限制密码设置次数(while);循环终止(break)

 

  Python:lec07-判断密码强弱_第2张图片

 三、v3.0

  • 新增功能:保存设置的密码及其对应强度到文件中
  1. 文件的基础
  • 文件:存储在外部介质(如:硬盘)上的数据或信息的集合
  • 文件文本:一般指只有字符编码存储的文件,能够被最简单的文本编辑器直接读取
  • 编码:信息从一种形式转换为另一种形式的过程
  • 多行文本,用\n表示换行

     2、文件的操作

  • 步骤:打开文件->操作文件(读、写等)->关闭文件

(1). 打开文件:建立文件与程序的关联   open(filename,mode)

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

    Python:lec07-判断密码强弱_第3张图片

(2). 操作文件:写入、读取等

  • 写入操作:从计算机内存向文件写入数据
  • write():将文本数据写入文件
  • writelines():将字符串列表写入文件中

(3).关闭文件 

  •  close() :终止程序与文件的关联,关闭后的文件不能再进行读写操作, 否则会触发 ValueError 错误。

v1.0+v2.0+v3.0代码:



"""
v1.0:根据输入密码,判定密码强度
v2.0新增:限制密码设置次数(while);循环终止(break)
v3.0新增:保存设置的密码及其对应强度到文件中
"""


def check_num_exist(password):
    # 判断是否存在数字
    has_number = False
    for n in password:
        #  isnumeric()检测字符串是否只由数字组成
        if n.isnumeric():
            has_number = True
            break
    return has_number


def check_letter_exist(password):
    # 判断是否存在字母
    has_letter = False
    for l in password:
        # isalpha()检测字符串是否只由字母组成
        if l.isalpha():
            has_letter = True
            # 终止整个循环
            break
    return has_letter


def main():
    """
    主函数
    """
    try_times = 5
    while try_times >= 1:
        password = input("请输入密码: ")
        strength_level = 0
        if len(password) >= 8:
            strength_level += 1
        else:
            print("密码长度不足八位!")
        if check_letter_exist(password):
            strength_level += 1
        else:
            print("密码中应包含字母!")
        if check_num_exist(password):
            strength_level += 1
        else:
            print("密码中应包含数字!")
        f = open("password_3.0", 'a')
        f.write("密码:{},强度:{}\n".format(password, strength_level))
        f.close()
        if strength_level == 3:
            print("恭喜,密码强度合格!")
            break
        else:
            print("抱歉!密码强度不合格!")
            try_times -= 1


if __name__ == '__main__':
    main()

四、v4.0

  •  读取文件
  1. 读取操作:从文件中读取数据到计算机内存中
  • read():返回值为包含整个文件内容的一个字符串
  • readline():返回值为文件下一行内容的字符串
  • readlines():返回值为整个文件内容的列表,每项都是以换行符为结尾的一行字符串
  • 文件的遍历

Python:lec07-判断密码强弱_第4张图片

v4.0版本代码:

def main():

    """
    主函数
    """
    # 打开文件
    f = open('password_1.0.txt', 'r')
    # 1、read
    # content = f.read()
    # f.close()
    # print(content)
    # 2、readline
    # line1 = f.readline()
    # line2 = f.readline()
    # 3、readlines
    for line in f.readlines():
        print('read:{}'.format(line))
    f.close()


if __name__ == '__main__':
    main()

结果

 Python:lec07-判断密码强弱_第5张图片

 v5.0

  • 新增功能:将相关方法封装成一个整体,面向对象编程

1、关于类

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

             class  ClassName

              __int__(self)构造函数:初始化对象的各属性

              self 代表类的实例

Python:lec07-判断密码强弱_第6张图片 

2、面向对象编程的特点

(1)封装

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

(2)继承

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

(3)多态

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

v6.0

  • 新增功能:将文件操作封装到一个类中

Python:lec07-判断密码强弱_第7张图片

v5.0+v6.0代码:

"""
根据输入密码,判定密码强度
5.0:定义一个password 工具类
6.0:定义一个文件工具类
"""


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("密码长度不足八位!")
        # 规则2:判断是否存在字符
        if self.check_letter_exist():
            self.strength_level += 1
        else:
            print("密码中应包含字母!")
        # 规则3:判断是否存在数字
        if self.check_num_exist():
            self.strength_level += 1
        else:
            print("密码中应包含数字!")

    def check_num_exist(self):
        # 判断是否存在数字
        has_number = False
        for n in self.password:
            if n.isnumeric():
                has_number = True
                break
        return has_number

    def check_letter_exist(self):
        # 判断是否存在字母
        has_letter = False
        for l in self.password:
            if l.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
    filepath = 'password_6.0.txt'
    # 实例化文件工具类
    file_tool = FileTool(filepath)
    while try_times >= 1:
        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("抱歉!密码强度不合格!")
            try_times -= 1
        # 读文件
        lines = file_tool.read_from_file()
        print(lines)


if __name__ == '__main__':
    main()

 

 

你可能感兴趣的:(Python)