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
    评论
这是DS小龙哥编整理的,Python3入门指南.pdf,总共10章,可以当做入门书籍、平时的参考书籍,文中代码都可以复制粘贴。后续资源包会持续更新。 这是书籍的目录 编辑: DS小龙哥 1 Python3入门指南 1 一、 Python编程语言入门介绍 1 1.1 什么是Python? 1 1.2 Python与其他编程语言的比较 1 二、搭建Python开发环境 2 2.1 Python版本介绍 2 2.2 在windows下安装Python环境 2 2.3 在ubuntu18.04环境下安装Python环境 5 2.4 运行Python代码方式 8 2.4 编Python推荐的编辑器 9 2.5 windows下安装VSCode代码编辑器 11 2.6 ubuntu下安装VSCode代码编辑器 22 三、Python基础语法学习 30 3.1 编第一个Python程序 30 3.2 Python中单行与多行注释语法 31 3.3 python输出功能基本语法:print() 32 3.4 python输入功能基本语法:input() 34 3.5 Python标识符与关键字 34 3.6 Python代码缩进规则 35 3.7 文本编码 36 四、Python变量、数据类型 38 4.1 Python数据类型介绍 38 4.2 变量的概念与赋值方法 38 4.3 Python数字数据类型 41 4.4 Python字符串类型 42 4.5 Python字符串处理 44 4.6 Python列表数据类型 48 4.7 Python元组数据类型 56 4.8 Python字典数据类型 58 4.9 Python集合数据类型 66 五、Python运算符 73 5.1 运算符介绍 73 5.2 算术运算符 74 5.3 比较运算符 75 5.4 赋值运算符 77 5.5 位运算符 79 5.6 逻辑运算符 81 5.7 成员运算符 82 5.8 身份运算符 84 5.9 运算符优先级 86 六、Python判断语句与循环语句 87 6.1 if判断语句 87 6.2 while循环语句 89 6.3 for循环语句 92 6.4 break循环控制语句 98 6.5 continue循环控制语句 99 6.6 assert语句 100 七、Python函数 100 7.1 调用函数 101 7.2 定义一个函数 102 7.3 函数参数传递 103 7.4 匿名函数 106 7.5 return语句 107 7.6 关于函数形参可更改与不可更改对象 108 7.7 局部变量与全局变量 109 7.8 局部函数 111 八、Python模块 111 8.1 python中的模块是什么? 112 8.2 导入模块: 学习import语句 112 8.3 编自定义模块 115 8.4 模块的搜索路径 117 8.5 Python的包 123 8.6 Python第三方库(模块)下载 128 九、文件IO编程 130 9.1 Python文件操作函数介绍 130 9.2 操作文件的一般顺序 130 9.3 Python内置的open函数 131 9.4 操作文件常用的方法 133 9.5 调用操作系统提供的接口函数操作文件 140 9.6 os.path模块常见函数用法 144 9.7 fnmatch模块:用于文件名的匹配 145 9.8 tempfile模块: 生成临时文件和临时目录 146 十、面向对象编程 147 10.1 面向对象程序设计思想 147 10.2 面向对象相关术语 148 10.3 类与对象的基本使用 148 10.4 类封装机制 156 10.5 类继承机制 157 10.6 父类方法重 159

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值