python学习笔记(判断密码强弱)

每天30min学习python—判断密码强弱

目录

  1. 判断密码强弱1.0
  2. 判断密码强弱2.0
  3. 判断密码强弱3.0+4.0
  4. 判断密码强弱5.0+6.0
  5. 课后练习

1.0 实现功能

设置一个变量strength_level用于记录密码强度,初值为0,满足一个条件加1!

  • 条件1:密码长度(至少8位)
  • 条件2:包含字母
  • 条件3:包含数字
  • 如果strength_level等于3,则密码强度合格,小于3则不合格

知识点:

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

代码区:

"""
    作者:Troublemaker
    功能:判断密码强度
    版本:1.0
    日期:2019/11/2 20:25
    脚本:1.0.py
"""


def main():
    """
        主函数
    """
    strength_level = 0
    print("密码要求:长度至少8位,需要包含字母和数字")
    input_psd = input("请输入您的密码:")

    # 判断密码强度
    if input_psd.isnumeric():
        print("密码不能只包含数字")
    else:
        strength_level += 1

    if input_psd.isalpha():
        print("密码不能只包含字母")
    else:
        strength_level += 1

    if len(input_psd) < 8:
        print("密码不能少于八位")
    else:
        strength_level += 1

    if strength_level == 3:
        print("恭喜您,密码设置成功")

if __name__ == "__main__":
    main()

2.0 实现功能

  • 2.0增加功能:限制密码设置次数;循环终止

知识点:

  • break语句
    • 终止整个循环
  • continue语句
    • 只终止本次循环,而不终止整个循环(整个循环往往有很多轮循环组成,continue只终止其中的某一轮,然后继续下一个循环

代码区:

"""
    作者:Troublemaker
    功能:判断密码强度
    版本:1.0
    日期:2019/11/2 20:25
    脚本:1.0.py
"""


def main():
    """
        主函数
    """
    # 初始化参数
    strength_level = 0   # 密码强度
    times = 0            # 记录密码次数

    print("密码要求:长度至少8位,需要包含字母和数字")
    input_psd = input("请输入您的密码:")
    times += 1

    # 设置循环
    while times <= 5:
        # 判断密码强度
        if input_psd.isnumeric():
            print("密码不能只包含数字")
        else:
            strength_level += 1

        if input_psd.isalpha():
            print("密码不能只包含字母")
        else:
            strength_level += 1

        if len(input_psd) < 8:
            print("密码不能少于八位")
        else:
            strength_level += 1

        if strength_level == 3:
            print("恭喜您,密码设置成功")
            break       # 设置成功,直接跳出这个While循环
        else:
            input_psd = input("请输入您的密码:")
            times += 1

    # 友好的交互
    if strength_level != 3:
        print("密码设置次数过多,请稍后再试")

if __name__ == "__main__":
    main()

3.0+4.0 实现功能

  • 3.0新增:保存设置的密码及其对应的强度到文件中
  • 4.0新增:读取保存的密码

知识点:

  • 文件操作步骤:

    • 打开文件—>操作文件(读、写)—>关闭文件
  • 打开文件:建立文件与程序的关联

    • open(filename, mode)
      • filename:文件路径+文件名
      • mode:操作方式
  • 操作文件:

    打开模式含义
    “r”只读,当文件不存时,报错
    “w”只写,当文件不存在时,自动创建
    “a”在文件末尾附加
    “r+”读和写
  • 关闭文件:终止程序与文件的关联

    • close()
  • 可以用with结构操作文件,当你不需要操作时,自动关闭文件 。

示例:
with opne(filename, "r") as f:  
	# 对文件的操作
    # 就不需要用close()关闭文件了

代码区:

"""
    作者:Troublemaker
    功能:判断密码强度
    版本:3.0+4.0
    日期:2019/11/3 10:25
    脚本:3.0.py
"""


def main():
    """
        主函数
    """
    # 初始化的参数
    strength_level = 0   # 密码强度
    times = 0            # 记录密码次数

    print("密码要求:长度至少8位,需要包含字母和数字")
    input_psd = input("请输入您的密码:")
    times += 1

    # 设置循环
    while times <= 5:

        # 判断密码强度
        if input_psd.isnumeric():
            print("密码不能只包含数字")
        else:
            strength_level += 1

        if input_psd.isalpha():
            print("密码不能只包含字母")
        else:
            strength_level += 1

        if len(input_psd) < 8:
            print("密码不能少于八位")
        else:
            strength_level += 1

        # 写入到文件, 放这里会保存你所有尝试的密码
        file_path = "strength_level.txt"
        with open(file_path, 'a', encoding='utf-8') as f:
            # write()里面写入的必须是字符串str格式的
            f.write("密码: " + input_psd + " , 强度:" + str(strength_level) + "\n")

        if strength_level == 3:
            print("恭喜您,密码设置成功")
            break       # 设置成功,直接跳出这个While循环
        else:
            strength_level = 0     # 这句话是让每次尝试后强度重新为0,没有它会出现bug
            input_psd = input("请输入您的密码:")
            times += 1

    # 友好的交互
    if strength_level != 3:
        print("密码设置次数过多,请稍后再试")

    # if strength_level == 3:                     # 放这里的话,就只保存设置通过的密码
    #     # 写入文件,保存密码以及对应的强度
    #     file_path = "strength_level.txt"
    #     with open(file_path, 'a', encoding='utf-8') as f:
    #         # write()里面写入的必须是字符串str格式的
    #         f.write("密码: " + input_psd + " , 强度:" + str(strength_level) + "\n")

    # 读取保存的密码
    with open(file_path, 'r', encoding="utf-8") as f:
        txt = f.readline()            # 只读第一行
        print(txt)    
        contents = f.readlines()    # 返回一个列表,把每一行当成列表中的一个元素
    for content in contents:        # 遍历列表,把其中的值都打印出来
        print(content)
        
        
if __name__ == "__main__":
    main()

5.0+6.0 实现功能

  • 5.0新增:将相关方法封装成一个整体:面向对象编程
  • 6.0新增:将文件操作封装到一个类中

知识点:

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

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

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

  • 类的定义

    • class ClassName

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

      self代表类的实例

  • 封装

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

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

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

代码区:

"""
    作者:Troublemaker
    功能:判断密码强度
    版本:3.0+4.0
    日期:2019/11/3 10:25
    脚本:3.0.py
"""


class Read_Write:
    """
        读写操作类
    """
    def __init__(self, flie_path):
        """初始化属性"""
        self.flie_path = flie_path

    def write_in(self, content):
        """写文件的方法"""
        with open(self.flie_path, 'a', encoding='utf-8') as f:
            # write()里面写入的必须是字符串str格式的
            f.write(content)

    def read_in(self):
        """读文件的方法"""
        with open(self.flie_path, 'r', encoding="utf-8") as f:
            contents = f.readlines()  # 返回一个列表,把每一行当成列表中的一个元素
        for content in contents:  # 遍历列表,把其中的值都打印出来
            print(content)


class Password:
    """
    密码相关的类
    """

    def __init__(self, password):
        self.password = password
        self.strength_level = 0

    def check_password(self):
        """检测密码的过程"""
        if self.password.isnumeric():
            print("密码不能只包含数字")
        else:
            self.strength_level += 1

        if self.password.isalpha():
            print("密码不能只包含字母")
        else:
            self.strength_level += 1

        if len(self.password) < 8:
            print("密码不能少于八位")
        else:
            self.strength_level += 1


def main():
    """
        主函数
    """
    # 初始化的参数
    times = 0                             # 记录密码次数
    file_path = "strength_level.txt"     # 文件路径

    print("密码要求:长度至少8位,需要包含字母和数字")
    input_psd = input("请输入您的密码:")
    times += 1

    # 实例化类
    password_check = Password(input_psd)
    read_and_write = Read_Write(file_path)

    # 设置循环
    while times <= 5:

        # 判断密码强度
        password_check.check_password()
        # 写入到文件, 放这里会保存你所有尝试的密码
        content = "密码: " + input_psd + " , 强度:" + str(password_check.strength_level) + "\n"
        read_and_write.write_in(content)

        if password_check.strength_level == 3:
            print("恭喜您,密码设置成功")
            break       # 设置成功,直接跳出这个While循环
        else:
            password_check.strength_level = 0     # 这句话是让每次尝试后强度重新为0,没有它会出现bug
            input_psd = input("请输入您的密码:")
            password_check = Password(input_psd)
            times += 1

    # 友好的交互
    if password_check.strength_level != 3:
        print("密码设置次数过多,请稍后再试")

    # 读取文件
    read_and_write.read_in()


if __name__ == "__main__":
    main()

课后练习(这个代码在1.0的基础上修改)

  • question:同时包含大小写字母。
  • 必须包含特殊符号,比如+,-,*,¥等。
"""
    作者:Troublemaker
    功能:判断密码强度
    版本:1.0
    日期:2019/11/3 20:25
    脚本:1.0.py
"""


def main():
    """
        主函数
    """
    strength_level = 0
    print("密码要求:长度至少8位,需要包含大小写字母,需要包含数字,需要有特殊符号")
    input_psd = input("请输入您的密码:")

    # 判断密码强度
    if input_psd.isnumeric():
        print("密码不能只包含数字")
    else:
        strength_level += 1

    if input_psd.isalpha():
        print("密码不能只包含字母")
    else:
        if input_psd.islower() or input_psd.isupper():
            print("密码中的字母不能全为大写或者小写")
        else:
            strength_level += 1

    if len(input_psd) < 8:
        print("密码不能少于八位")
    else:
        strength_level += 1
        
    # 判断是否有特殊字符
    string = "~!@#$%^&*()_+-*/<>,.[]\/"
    for i in string:
        if i in input_psd:
            strength_level += 1
            break
    # 这边如果把else和上面if对齐,会打印很多次   
    else:
        print("密码中缺少特殊字符")

    if strength_level == 4:
        print("恭喜您,密码设置成功")


if __name__ == "__main__":
    main()

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值