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 = 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
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 True
    return False

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

def main():
    strength_level = 0

    password_str = input('请输入密码8位')

    if len(password_str) >= 8:
        strength_level += 1
    else :
        print('要求输入密码大于8位数')

    if check_number_exist(password_str):
        # print('has_number')
        strength_level += 1
    else:
        print('要求有数字')

    if check_letter_exist(password_str):
        # print('has letter')
        strength_level += 1
    else:
        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:
        break
    print(i)
print('end test break')

print('start test for + continue')
for j  in range(100):
    if j % 2==0:
        continue
    print(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 True
    return False

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

def main():
    strength_level = 0

    password_str = input('请输入密码8位')

    if len(password_str) >= 8:
        strength_level += 1
    else :
        print('要求输入密码大于8位数')

    if check_number_exist(password_str):
        # print('has_number')
        strength_level += 1
    else:
        print('要求有数字')

    if check_letter_exist(password_str):
        # print('has letter')
        strength_level += 1
    else:
        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.0
    2.0新增功能:循环的终止
    3.0新增功能:保存密码及强度到文件中
    4.0新增功能:读取文件中的密码
    日期:09/09/2017
"""


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
    #
    #     # 规则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 = password
        self.strlength_level = 0

    def process_password(self):
    # 规则1 密码长度大于 8
        if len(self.password) >= 8 :
            self.strlength_level += 1
        else:
            print('要求长度不能小于8')
    #规则2 密码包含数字
        if self.check_number_exist():
            self.strlength_level += 1
        else:
            print('要求有数字')

    #规则3 密码包含字母
        if self.check_letter_exist():
            self.strlength_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

        return has_letter

def main():
    try_time = 2

    while 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('密码强度合格')
            break
        else:
            print('密码强度不合格')
            try_time -= 1

    if 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 = password
        self.strlength_level = 0

    def process_password(self):
    # 规则1 密码长度大于 8
        if len(self.password) >= 8 :
            self.strlength_level += 1
        else:
            print('要求长度不能小于8')
    #规则2 密码包含数字
        if self.check_number_exist():
            self.strlength_level += 1
        else:
            print('要求有数字')

    #规则3 密码包含字母
        if self.check_letter_exist():
            self.strlength_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

        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_lines(self):
        f = open(self.filepath, 'r')
        lines = f.readlines()
        f.close()
        return lines
    def read_from_file(self):
        f = open(self.filepath,'r')
        line = f.read()
        f.close()
        return line


def main():
    try_time = 2
    filepath = '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('密码强度合格')
            break
        else:
            print('密码强度不合格')
            try_time -= 1

    if 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()

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值