Python判断密码不以数字开头 python判断密码字符串强度_封装

判断密码强弱 1.0

Python判断密码不以数字开头 python判断密码字符串强度_Python判断密码不以数字开头_02


Python判断密码不以数字开头 python判断密码字符串强度_封装_03

Python字符串

Python判断密码不以数字开头 python判断密码字符串强度_封装_04


更多isxxx()方法请参考:

https://docs.python.org/3/library/stdtypes.html#string-methods注意:

直接判断是判断字符串是否只由字母/数字组成:

Python判断密码不以数字开头 python判断密码字符串强度_密码强度_05


想要判断字符串是否包含字母/数字,要写循环一个一个字符判断

(print处修改就可以判断了):

Python判断密码不以数字开头 python判断密码字符串强度_主函数_06

关于Python console 多行命令执行:两个回车键

v_1.0代码如下:

"""
    作者:xpt
    功能:判断密码强弱
    版本:1.0
    日期:21/11/2018
"""


def check_number_exist(password_str):
    """
    判断密码是否包含数字
    """
    for x in password_str:
        if x.isnumeric():
            return True
    return False


def check_alpha_exist(password_str):
    """
    判断密码是否包含数字
    """
    for x in password_str:
        if x.isalpha():
            return True
    return False


def main():
    """
    主函数
    """
    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_alpha_exist(password):
        strength_level += 1
    else:
        print('密码要求包含字母!')

    # 字符强度是否满足要求
    if strength_level == 3:
        print("密码强度合格!")
    else:
        print("密码强度不合格!")


if __name__ == '__main__':
    main()

Python判断密码不以数字开头 python判断密码字符串强度_封装_07

• 限制密码设置次数,比如最多尝试设置5次
• 如何终止循环?

判断密码强弱 2.0–增加功能:限制密码设置次数;循环的终止

Python判断密码不以数字开头 python判断密码字符串强度_密码强度_08


Python判断密码不以数字开头 python判断密码字符串强度_密码强度_09

循环的终止-break&continue

Python判断密码不以数字开头 python判断密码字符串强度_主函数_10


Python判断密码不以数字开头 python判断密码字符串强度_主函数_11


Python判断密码不以数字开头 python判断密码字符串强度_Python判断密码不以数字开头_12


Python判断密码不以数字开头 python判断密码字符串强度_封装_13


v_2.0代码如下:

使用break修改函数:

Python判断密码不以数字开头 python判断密码字符串强度_封装_14

"""
    作者:xpt
    功能:判断密码强弱
    版本:2.0
    日期:21/11/2018
    2.0增加功能:限制密码设置次数;循环的终止
"""


def check_number_exist(password_str):
    """
    判断密码是否包含数字
    """
    has_number = False
    for x in password_str:
        if x.isnumeric():
            has_number = True
            break
    return has_number


def check_alpha_exist(password_str):
    """
    判断密码是否包含数字
    """
    has_alpha = False
    for x in password_str:
        if x.isalpha():
            has_alpha = True
            break
    return has_alpha


def main():
    """
    主函数
    """
    try_time = 3  # 设置密码尝试次数
    while try_time > 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_alpha_exist(password):
            strength_level += 1
        else:
            print('密码要求包含字母!')

        # 字符强度是否满足要求
        if strength_level == 3:
            print("恭喜,密码强度合格!")
            break
        else:
            print("密码强度不合格!")
            try_time -= 1
        print()
    if try_time <= 0:
        print()
        print('尝试次数过多,密码设置失败!')


if __name__ == '__main__':
    main()

Python判断密码不以数字开头 python判断密码字符串强度_主函数_15


Python判断密码不以数字开头 python判断密码字符串强度_封装_16

• 保存设置的密码及其对应的强度到文件中

判断密码强弱 3.0–增加功能:保存设置的密码及其对应的强度到文件中

Python判断密码不以数字开头 python判断密码字符串强度_密码强度_17

文件

Python判断密码不以数字开头 python判断密码字符串强度_封装_18


Python判断密码不以数字开头 python判断密码字符串强度_封装_19

文件写操作

Python判断密码不以数字开头 python判断密码字符串强度_Python判断密码不以数字开头_20


文件操作注意点:

文件名要加引号!文件操作模式也要加引号!

Python判断密码不以数字开头 python判断密码字符串强度_Python判断密码不以数字开头_21


Python判断密码不以数字开头 python判断密码字符串强度_密码强度_22


open函数打开文件之后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的。

v_3.0代码如下:

"""
    作者:xpt
    功能:判断密码强弱
    版本:3.0
    日期:21/11/2018
    2.0增加功能:限制密码设置次数;循环的终止
    3.0增加功能:保存设置的密码及其对应的强度到文件中
"""


def check_number_exist(password_str):
    """
    判断密码是否包含数字
    """
    has_number = False
    for x in password_str:
        if x.isnumeric():
            has_number = True
            break
    return has_number


def check_alpha_exist(password_str):
    """
    判断密码是否包含数字
    """
    has_alpha = False
    for x in password_str:
        if x.isalpha():
            has_alpha = True
            break
    return has_alpha


def main():
    """
    主函数
    """
    try_time = 3  # 设置密码尝试次数
    while try_time > 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_alpha_exist(password):
            strength_level += 1
        else:
            print('密码要求包含字母!')

        f = open('password.txt', 'a')
        f.write('密码:{},强度:{}\n'.format(password,strength_level))
        f.close()

        # 字符强度是否满足要求
        if strength_level == 3:
            print("恭喜,密码强度合格!")
            break
        else:
            print("密码强度不合格!")
            try_time -= 1
        print()

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


if __name__ == '__main__':
    main()

Python判断密码不以数字开头 python判断密码字符串强度_密码强度_23


Python判断密码不以数字开头 python判断密码字符串强度_密码强度_24

• 读取保存的文件

判断密码强弱 4.0–增加功能:读取保存的密码

Python判断密码不以数字开头 python判断密码字符串强度_Python判断密码不以数字开头_25

文件读操作

Python判断密码不以数字开头 python判断密码字符串强度_Python判断密码不以数字开头_26


read():

Python判断密码不以数字开头 python判断密码字符串强度_封装_27


Python判断密码不以数字开头 python判断密码字符串强度_Python判断密码不以数字开头_28


readline(): 一行一行读(不缺点不知道多少行就没办法遍历完)

Python判断密码不以数字开头 python判断密码字符串强度_密码强度_29


Python判断密码不以数字开头 python判断密码字符串强度_封装_30


Python判断密码不以数字开头 python判断密码字符串强度_Python判断密码不以数字开头_31


readlines(): 返回一个列表

Python判断密码不以数字开头 python判断密码字符串强度_密码强度_32


Python判断密码不以数字开头 python判断密码字符串强度_密码强度_33


想要读取则:

Python判断密码不以数字开头 python判断密码字符串强度_密码强度_34


或者

Python判断密码不以数字开头 python判断密码字符串强度_密码强度_35


输出结果为:

Python判断密码不以数字开头 python判断密码字符串强度_密码强度_36


v_4.0代码如下:

"""
    作者:xpt
    功能:判断密码强弱
    版本:4.0
    日期:21/11/2018
    2.0增加功能:限制密码设置次数;循环的终止
    3.0增加功能:保存设置的密码及其对应的强度到文件中
    4.0增加功能:读取保存的密码
"""


def main():
    """
    主函数
    """
    # 读取文件
    f = open('password.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()

• 这些方法都是与“密码操作”相关的,能否将这些方法封装成一个整体?

判断密码强弱 5.0–增加功能:将相关方法封装成一个整体:面向对象编程

Python判断密码不以数字开头 python判断密码字符串强度_主函数_37


面向过程vs面向对象

Python判断密码不以数字开头 python判断密码字符串强度_主函数_38


Python判断密码不以数字开头 python判断密码字符串强度_主函数_39

类的定义

一般大写来命名类,且不加下划线

password是需要传进来的参数

Python判断密码不以数字开头 python判断密码字符串强度_Python判断密码不以数字开头_40


类的属性:

Python判断密码不以数字开头 python判断密码字符串强度_密码强度_41


类的方法:

Python判断密码不以数字开头 python判断密码字符串强度_主函数_42


参数password_str,可以不要,因为password已经传进self.password了,直接换成self.password就可以了:

Python判断密码不以数字开头 python判断密码字符串强度_主函数_43


把处理字符串三个规则放进类中:

Python判断密码不以数字开头 python判断密码字符串强度_Python判断密码不以数字开头_44


上图需要修改:

1、改成self.password

2、改成self.strength_level

3、函数现在已经在类里了,调用类里的函数需要加self.

4、不需要传password了,直接用self.password

修改之后如下:

Python判断密码不以数字开头 python判断密码字符串强度_Python判断密码不以数字开头_45


综上,类的结构如下:

Python判断密码不以数字开头 python判断密码字符串强度_密码强度_46

类的调用

Python判断密码不以数字开头 python判断密码字符串强度_Python判断密码不以数字开头_47


其他:

类中定义方法时可以传入非初始属性的参数。

v_5.0代码如下:

"""
    作者:xpt
    功能:判断密码强弱
    版本:5.0
    日期:24/11/2018
    2.0增加功能:限制密码设置次数;循环的终止
    3.0增加功能:保存设置的密码及其对应的强度到文件中
    4.0增加功能:读取保存的密码
    5.0增加功能:将相关方法封装成一个整体:面向对象编程
"""


class PasswordTool:
    """
     密码工具类
    """
    def __init__(self,password):
        # 类的属性
        self.password = password  # 类中的password,等于外面传进来的password
        self.strength_level = 0 # 密码强度

    # 类的方法(一般来说要加个self)
    def check_number_exist(self):
        """
        判断密码是否包含数字
        """
        has_number = False
        for x in self.password:
            if x.isnumeric():
                has_number = True
                break
        return has_number

    def check_alpha_exist(self):
        """
        判断密码是否包含数字
        """
        has_alpha = False
        for x in self.password:
            if x.isalpha():
                has_alpha = True
                break
        return has_alpha

    def process_password(self):
        # 规则1:密码长度大于8
        if len(self.password) >= 8:
            self.strength_level += 1
        else:
            print('密码长度要求至少8位!')
        # 规则2:要求密码包含数字
        if self.check_number_exist():
            self.strength_level += 1
        else:
            print('密码要求包含数字!')
        # 规则3:要求密码包含字母
        if self.check_alpha_exist():
            self.strength_level += 1
        else:
            print('密码要求包含字母!')


def main():
    """
    主函数
    """
    try_time = 3  # 设置密码尝试次数
    while try_time > 0:
        password = input('请输入密码:')

        # 实例化密码工具对象
        password_tool = PasswordTool(password)
        password_tool.process_password()

        f = open('password.txt', 'a')
        f.write('密码:{},强度:{}\n'.format(password, password_tool.strength_level))
        f.close()

        # 字符强度是否满足要求
        if password_tool.strength_level == 3:
            print("恭喜,密码强度合格!")
            break
        else:
            print("密码强度不合格!")
            try_time -= 1
        print()

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


if __name__ == '__main__':
    main()

Python判断密码不以数字开头 python判断密码字符串强度_密码强度_48


Python判断密码不以数字开头 python判断密码字符串强度_封装_49

单步调试debug

Python判断密码不以数字开头 python判断密码字符串强度_主函数_50


step into 跳进类中: (发现其跳到了类中初始化函数里了)

Python判断密码不以数字开头 python判断密码字符串强度_主函数_51


Python判断密码不以数字开头 python判断密码字符串强度_封装_52


step over往下走:

Python判断密码不以数字开头 python判断密码字符串强度_封装_53


Python判断密码不以数字开头 python判断密码字符串强度_封装_54


step over再往下走:(发现跳出去了,PasswordTool初始化完成了)

Python判断密码不以数字开头 python判断密码字符串强度_封装_55


step over继续往下:

Python判断密码不以数字开头 python判断密码字符串强度_主函数_56


step into跳进类里的方法:

Python判断密码不以数字开头 python判断密码字符串强度_Python判断密码不以数字开头_57


然后一直往下就OK了,可以看到具体的一些过程。

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

判断密码强弱 6.0–增加功能:将文件操作封装到一个类中

Python判断密码不以数字开头 python判断密码字符串强度_密码强度_58


1、文件类初始化

需要传入的就是文件的路径

2、属性方法

3、实例化

v_6.0.1代码如下:
(文件读操作)

"""
    作者:xpt
    功能:判断密码强弱
    版本:6.0
    日期:26/11/2018
    2.0增加功能:限制密码设置次数;循环的终止
    3.0增加功能:保存设置的密码及其对应的强度到文件中
    4.0增加功能:读取保存的密码
    5.0增加功能:将相关方法封装成一个整体:面向对象编程
    6.0增加功能:将文件操作封装到一个类中
"""


class PasswordTool:
    """
     密码工具类
    """
    def __init__(self,password):
        # 类的属性
        self.password = password  # 类中的password,等于外面传进来的password
        self.strength_level = 0 # 密码强度

    # 类的方法(一般来说要加个self)
    def check_number_exist(self):
        """
        判断密码是否包含数字
        """
        has_number = False
        for x in self.password:
            if x.isnumeric():
                has_number = True
                break
        return has_number

    def check_alpha_exist(self):
        """
        判断密码是否包含数字
        """
        has_alpha = False
        for x in self.password:
            if x.isalpha():
                has_alpha = True
                break
        return has_alpha

    def process_password(self):
        # 规则1:密码长度大于8
        if len(self.password) >= 8:
            self.strength_level += 1
        else:
            print('密码长度要求至少8位!')
        # 规则2:要求密码包含数字
        if self.check_number_exist():
            self.strength_level += 1
        else:
            print('密码要求包含数字!')
        # 规则3:要求密码包含字母
        if self.check_alpha_exist():
            self.strength_level += 1
        else:
            print('密码要求包含字母!')

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_time = 3  # 设置密码尝试次数
    filepath = 'password.txt'

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

        # 实例化密码工具对象
        password_tool = PasswordTool(password)
        password_tool.process_password()

        # 实例化文件工具对象
        file_tool = FileTool(filepath)
        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_time -= 1
        print()

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


if __name__ == '__main__':
    main()

Python判断密码不以数字开头 python判断密码字符串强度_主函数_59


Python判断密码不以数字开头 python判断密码字符串强度_主函数_60


v_6.0.2代码如下:
(文件读操作,在循环后面加上读操作,需要把实例化文件工具对象拿到循环外面去)

"""
    作者:xpt
    功能:判断密码强弱
    版本:6.0
    日期:26/11/2018
    2.0增加功能:限制密码设置次数;循环的终止
    3.0增加功能:保存设置的密码及其对应的强度到文件中
    4.0增加功能:读取保存的密码
    5.0增加功能:将相关方法封装成一个整体:面向对象编程
    6.0增加功能:将文件操作封装到一个类中
"""


class PasswordTool:
    """
     密码工具类
    """
    def __init__(self,password):
        # 类的属性
        self.password = password  # 类中的password,等于外面传进来的password
        self.strength_level = 0 # 密码强度

    # 类的方法(一般来说要加个self)
    def check_number_exist(self):
        """
        判断密码是否包含数字
        """
        has_number = False
        for x in self.password:
            if x.isnumeric():
                has_number = True
                break
        return has_number

    def check_alpha_exist(self):
        """
        判断密码是否包含数字
        """
        has_alpha = False
        for x in self.password:
            if x.isalpha():
                has_alpha = True
                break
        return has_alpha

    def process_password(self):
        # 规则1:密码长度大于8
        if len(self.password) >= 8:
            self.strength_level += 1
        else:
            print('密码长度要求至少8位!')
        # 规则2:要求密码包含数字
        if self.check_number_exist():
            self.strength_level += 1
        else:
            print('密码要求包含数字!')
        # 规则3:要求密码包含字母
        if self.check_alpha_exist():
            self.strength_level += 1
        else:
            print('密码要求包含字母!')


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_time = 3  # 设置密码尝试次数
    filepath = 'password.txt'

    # 实例化文件工具对象
    file_tool = FileTool(filepath)

    while try_time > 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("密码强度不合格!")
            try_time -= 1
        print()

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

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


if __name__ == '__main__':
    main()

Python判断密码不以数字开头 python判断密码字符串强度_密码强度_61


Python判断密码不以数字开头 python判断密码字符串强度_主函数_62

面向对象的特点

  • 封装
  • 继承
  • 多态

课后练习
• 加入更复杂的密码设置规则:

  1. 同时包含大小写字母
  2. 必须包含特殊符号,如:+, -, *, 等

Next?
• 随机数的生成
• 数据可视化
• 科学计算入门