day16_python_歌词作业讲解

歌词解析

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

an1 = LyricAnalysis('蓝莲花')
将蓝莲花输入 song_name = '蓝莲花' self.all_lyric = []
调用 .__collect_lyric() .打开蓝莲花TXT .逐行读取.
第一行进入__get_time_word
content.split(']') 分割 .将词存入 word .将时间 换算成秒.
新得到的秒数和 词 进入 class Lyric.返回'时间+歌词'的Lyric类的对象.加人到self.all_lyric中.
第二行进入__get_time_word . an1.all_lyric中加人第二个
直到读完.用all_lyric.sort将元素倒序
完成

an1.get_word(120)
将120 输入get_word time=120
将self.all_lyric中的每一个'时间+歌词'的Lyric类的对象取出
判断 如果有一个对象的时间性质小于等于120.立即输入它的词

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容