Python入门-30、31、32、33、34、35:字符串补充,跳出循环(break、continue),文件(写、读),面向对象的编程(类)

判断密码强弱1.0

案例描述

在这里插入图片描述

案例分析

在这里插入图片描述

字符串补充

在这里插入图片描述
Built-in Types — Python 3.7.2rc1 documentation https://docs.python.org/3/library/stdtypes.html#string-methods
在这里插入图片描述
在这里插入图片描述

程序及结果

'''
作者:张梦
版本:1.0
功能:判断密码强度
日期:2018.12.22
'''

'''判断是否有数字存在'''
def check_number_exist(password_str):
    for c in password_str:
        if c.isnumeric():
            return True
    return False
# for循环神奇特点:首先这个字符串遍历,如果没有跳出循环的语句,则会一直到字符串结束。但是这里有如果有数字,就会返回true,并且跳出这个子程序,所以字符串后面的也就不遍历了

'''判断是否有字母存在'''
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
    # 规则1:密码长度
    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('密码要求包含字母!')

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

if __name__ == '__main__':
    main()

在这里插入图片描述
在这里插入图片描述

Tips

程序如果遇到return,会提前终止程序,跳出这个程序,上面就利用这个写的子程序

思考

  • 限制密码设置次数,比如最多尝试5次
  • 一个函数里两个return不太规范,如何不用这样,也能终止循环?

判断密码强弱

案例描述2.0

在这里插入图片描述

案例分析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(部分结果)

程序及结果

'''
作者:张梦
版本:2.0
功能:判断密码强度
2.0增加功能:限制密码设置次数;循环的终止
日期:2018.12.22
'''

'''判断是否有数字存在'''
def check_number_exist(password_str):
    has_number = False
    for c in password_str:
        if c.isnumeric():
            has_number = True
            break
    return has_number
# for循环神奇特点:首先这个字符串遍历,如果没有跳出循环的语句,则会一直到字符串结束。但是这里有如果有数字,就会返回true,并且跳出这个子程序,所以字符串后面的也就不遍历了

'''判断是否有字母存在'''
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_time = 5
    while try_time > 0:
        password = input('请输入密码:')
        # 密码强度
        strength_level = 0
        # 规则1:密码长度
        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('密码要求包含字母!')

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

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

if __name__ == '__main__':
    main()

在这里插入图片描述
在这里插入图片描述

思考

保存设置的密码及强度到文件中

判断密码强弱

案例描述3.0

在这里插入图片描述

案例分析

文件

文件相关概念

在这里插入图片描述

打开(新建)文件

在这里插入图片描述
注意:w 是重新写入,不保存之前的内容!

写入操作

在这里插入图片描述
注意写入文件这段代码的位置,放在下面这里,结果会少一行,因为break所以成功的那个不会写入文件
在这里插入图片描述
正确程序:
在这里插入图片描述

程序及结果

'''
作者:张梦
版本:3.0
功能:判断密码强度
2.0增加功能:限制密码设置次数;循环的终止
3.0增加功能:保存密码及强度到文件中
日期:2018.12.22
'''

'''判断是否有数字存在'''
def check_number_exist(password_str):
    has_number = False
    for c in password_str:
        if c.isnumeric():
            has_number = True
            break
    return has_number
# for循环神奇特点:首先这个字符串遍历,如果没有跳出循环的语句,则会一直到字符串结束。但是这里有如果有数字,就会返回true,并且跳出这个子程序,所以字符串后面的也就不遍历了

'''判断是否有字母存在'''
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_time = 5
    while try_time > 0:
        password = input('请输入密码:')
        # 密码强度
        strength_level = 0
        # 规则1:密码长度
        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.write(password + '\n')
        f.close()

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


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

if __name__ == '__main__':
    main()

在这里插入图片描述
结果:
在这里插入图片描述
在这里插入图片描述
结果:
Python里面打不开,因为有中文
在这里插入图片描述
从路径里打开就能看到了
在这里插入图片描述

思考

读取保存文件

判断密码强弱

案例描述4.0

在这里插入图片描述

案例分析

文件

读取操作

在这里插入图片描述

  1. read()
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  2. readline()
    缺点:一行一行的读取,无法知道第几行才结束,无法遍历完
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  3. readlines()
    读出的是列表形式
    在这里插入图片描述
    在这里插入图片描述
  4. 文件的遍历
    一行一行的操作,整个文件都操作一遍
    (有三种写法)
    一:
    在这里插入图片描述
    二:
    在这里插入图片描述
    三:
    在这里插入图片描述
    结果:
    在这里插入图片描述

程序

'''
作者:张梦
版本:4.0
功能:判断密码强度
2.0增加功能:限制密码设置次数;循环的终止
3.0增加功能:保存密码及强度到文件中
4.0增加功能:读取保存的密码
日期:2018.12.23
'''

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

    # 读取文件
    f = open('password_3.1.txt', 'r')

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

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

    # # 3.readines()
    # line = f.readlines()
    # print(line)
    # f.close()

    # 4.文件的遍历
    for linea in f:
        print('read:{}'.format(linea))
    f.close()

if __name__ == '__main__':
    main()

思考

与密码操作相关的能否封装成一个整体?

判断密码强弱

案例描述5.0

在这里插入图片描述

案例分析

面向过程VS面向对象

在这里插入图片描述
在这里插入图片描述
注意:类名一般都是大写并且不加下划线!!
在这里插入图片描述
只要是在类里面定义的行数,参数都要加上self,这个是规范!所以上面的程序改为如下:
在这里插入图片描述
因为只要在类里定义了,下面的都可以用,所以也可改成如下:
在这里插入图片描述
类的调用:
在这里插入图片描述

程序及结果

'''
作者:张梦
版本:5.0
功能:判断密码强度
2.0增加功能:限制密码设置次数;循环的终止
3.0增加功能:保存密码及强度到文件中
4.0增加功能:读取保存的密码
4.0增加功能:将相关方法封装成一个整体:面向对象编程——定义一个password工具类
日期:2018.12.23
'''

'''密码工具类'''
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('密码长度要求至少8位!')
        # 规则2:包含数字
        if self.check_number_exist():
            self.strength_level += 1
        else:
            print('密码要求包含数字!')
        # 规则3:包含字母
        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_time = 5
    while try_time > 0:
        password = input('请输入密码:')
        # 实例化密码工具对象
        password_tool = PasswordTool(password)
        password_tool.process_password()

        # 写入文件
        f = open('password_3.1.txt', 'a')
        f.write('密码:{},强度:{}\n'.format(password, password_tool.strength_level))
        # f.write(password + '\n')
        f.close()

        if password_tool.strength_level == 3:
            print('恭喜!密码强度合格!')
            break
        else:
            print('抱歉!密码强度不合格!')
            try_time -= 1
        print()

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

if __name__ == '__main__':
    main()

在这里插入图片描述
在这里插入图片描述

判断密码强弱

案例描述6.0

在这里插入图片描述

案例分析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

面向对象的特点

在这里插入图片描述

程序及结果

'''
作者:张梦
版本:5.0
功能:判断密码强度
2.0增加功能:限制密码设置次数;循环的终止
3.0增加功能:保存密码及强度到文件中
4.0增加功能:读取保存的密码
5.0增加功能:将相关方法封装成一个整体:面向对象编程——定义一个password工具类
6.0增加功能:定义一个文件工具类,将文件封装到一个类中
日期:2018.12.27
'''

'''密码工具类'''
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('密码长度要求至少8位!')
        # 规则2:包含数字
        if self.check_number_exist():
            self.strength_level += 1
        else:
            print('密码要求包含数字!')
        # 规则3:包含字母
        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_time = 5
    filepath = 'password_6.0.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('尝试次数过多,密码设置失败!')

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

if __name__ == '__main__':
    main()

在这里插入图片描述
在这里插入图片描述

小结

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值