美文网首页
day16-函数回顾与练习

day16-函数回顾与练习

作者: d4lx | 来源:发表于2018-09-10 20:52 被阅读0次

    01-函数回顾:

    1、文件操作

    a、操作流程:打开文件----操作文件----关闭文件
    with open() as 文件变量名
    文件操作

    open(文件路径、打开方式,encoding=编码)

    b、打开方式
    (r、br、rb):文件路径不存在会报错
    (w/bw/bw/a):文件路径不存在会自动创建

    c、编码方式
    文本编码:二进制不能去设置

    d、读(read)、写(write)

    e.json文件、json数据
    json数据的格式:只有一个数据,并且类型必须是json支持的数据类型。
    数据类型及其表现:数组、对象(字典)、数字、字符串、布尔、null
    [元素]、{key,value}、1,23、"abc"、true,false、None
    pythone对json的支持:
    load(文件对象):将json中的数据,并且转换成相应的python数据
    loads(json格式的字符串):将字符串转换成python数据
    dump():将python数据转换成json数据然后再写到json文件中。
    dumps():将python数据转换成json格式的字符串。

    f.数据本地化和持久化
    比如,将数据number的值做数据本地化
    先从本地去取值----对取出来的值进行处理------再将新的值存到本地。

    2、异常捕获

    try:
        需要捕获异常的代码
    except:
        异常发生
    finally:
        不管异常是否发生,都执行
    

    a.except:捕获所有异常
    b.except 类型名:捕获指定的异常(这个结构可以出现多次)
    c.except (类型名1,类型名2,...):

    抛出异常
    raise 异常类型

    异常类型:要求必须是Exception的子类

    3、类和对象

    1)概念
    类:具有相同功能和属性的对象的集合(抽象的)
    对象:类的实例(具体)

    2)类的声明
    class 类名(父类):
    类的说明文档
    类的内容

    3)创建对象
    a.格式对象 = 类名()
    b.通过调用构造方法创建对象的时候,会自动调用init方法对对象进行初始化。
    c.init方法的传参。

    4)、属性
    对象属性:
    a、init方法中声明,self.属性名 = 值
    b、通过对象去使用
    c、对象属性的增删(了解),获取对象属性的值和修改对象属性的值。----对象.属性。

    类的字段:
    a.直接声明在类中的变量。
    b、通过类去使用----类.字段

    私有化、保护类型(getter和setter)-----了解

    5)、方法
    对象方法:
    a.直接声明在类中的方法
    b.自带一个self参数(self不需要传参,指向当前对象)
    c.对象方法通过对象调用
    d.需要使用对象的属性采用对象方法

    类方法:
    a.@classmethod修饰
    b.自带一个cls参数(cls不需要传参,指向当前类)
    c.类方法通过类调用
    d.需要使用类的字段的使用类方法

    静态方法:
    a.声明方式@staticmethod修饰
    b.没有自带参数
    c.通过类来调用
    d.不需要对象属性的时候

    本质上,python中类可以调用类中所有的方法

    02-类的补充

    1、多继承
    python中的类支持多继承,但是不建议使用
    多继承继承的时候,子类可以拥有父类所有的方法和类的字段,但是只能继承第一个父类的对象属性。

    2、多态
    多态指的是一种事物有多种形态
    有继承就有多态:不同类继承自同一个类,其实就是对这个共同的父类的不同的形态。
    继承后对方法的重写也是多态的表现。

    3.封装、继承、多态
    封装:一个类可以通过不同的方法对不同的功能进行封装。通过属性对不同的数据进行封装。
    继承:通过继承可以让子类拥有父类的属性和方法。

    4.包
    将多个模块封装到一起,就是包。包就是有一个默认文件__init__.py的文件夹。

    1、import 包.模块
    2、from 包 import 模块
    3、from 包.模块 import 方法。变量。类

    5、raise 错误类型
    可以是程序主动崩溃。一般用于调试。
    raise:关键字
    错误类型:必须是一个类,并且这个类必须是Exception的子类。

    03-练习

    写一个类,其功能是:1.解析指定的歌词文件的内容 2.按时间显示歌词 提示:歌词文件的内容一般是按下面的格式进行存储的。歌词前面对应的是时间,在对应的时间点可以显示对应的歌词:

    [00:00.20]蓝莲花
    [00:00.80]没有什么能够阻挡
    [00:06.53]你对自由地向往
    [00:11.59]天马行空的生涯
    [00:16.53]你的心了无牵挂
    [02:11.27][01:50.22][00:21.95]穿过幽暗地岁月
    [02:16.51][01:55.46][00:26.83]也曾感到彷徨
    [02:21.81][02:00.60][00:32.30]当你低头地瞬间
    [02:26.79][02:05.72][00:37.16]才发觉脚下的路
    [02:32.17][00:42.69]心中那自由地世界
    [02:37.20][00:47.58]如此的清澈高远
    [02:42.32][00:52.72]盛开着永不凋零
    [02:47.83][00:57.47]蓝莲花

    class Lyric:
        def __init__(self, time, word):
            self.time = time
            self.word = word
    
        def __str__(self):
            return '%.2f %s' % (self.time, self.word)
    
        def __gt__(self, other):
            return self.time > other.time
    
    
    class LyricAnalysis:
        """歌词解析类"""
        # 创建解析器对象的时候告诉我这个解析器是要解析哪首歌
        def __init__(self, song_name):
            # 保证一个歌词解析器对象对应一首歌
            self.song_name = song_name
            # 一首歌对应一个容器
            self.all_lyric = []
            # 解析歌词
            self.__collect_lyric()
    
        def __get_time_word(self, content):
            """提取歌词和时间"""
            contents = content.split(']')
            # 词
            word = contents[-1]
            for time in contents[:-1]:
                # 将时间转换秒
                times = time[1:].split(':')
                fen = float(times[0])
                miao = float(times[1])
                new_time = fen*60 + miao
                # 根据时间和词创建歌词对象
                lyric = Lyric(new_time, word)
                # 保存歌词对象
                self.all_lyric.append(lyric)
    
        def __collect_lyric(self):
            """将时间和词提取出来"""
            # 读歌词文件中的内容
            try:
                with open('./files/%s.txt' % self.song_name, 'r', encoding='utf-8') as f:
                    # 一行一行的读
                    line = f.readline()
                    while line:
                        # 将每一行中的内容的词和时间弄出来
                        self.__get_time_word(line)
                        line = f.readline()
                    # 排序
                    self.all_lyric.sort(reverse=True)
    
                    # for lyric in self.all_lyric:
                    #     print(lyric)
    
            except FileNotFoundError:
                print('文件不存在')
    
        def get_word(self, time):
            """根据时间获取歌词"""
            for lyric in self.all_lyric:
                if lyric.time <= time:
                    return lyric.word
    
    
    an1 = LyricAnalysis('蓝莲花')
    print(an1.get_word(120))
    

    time.py

    
    class Time():
        def __init__(self, hour, minute, second):
            self.hour = hour
            self.minute = minute
            self.second = second
    
        def show_time(self):
            print('%d:%d:%d' % (self.hour, self.minute, self.second))
    
    class Date():
        def __init__(self, year, month, day):
            self.year = year
            self.month = month
            self.day = day
    
        def show_date(self):
            print('%d年-%d月-%d日' % (self.year, self.month, self.day))
    

    相关文章

      网友评论

          本文标题:day16-函数回顾与练习

          本文链接:https://www.haomeiwen.com/subject/jteegftx.html