python歌词解析器函数封装

'''
歌词解析器:把歌词按照时间节点进行显示。
1.把歌词进行解析切片处理,把时间转成对应的浮点数
2.使用字典将时间与歌词进行存储{时间:歌词}
3.循环自动打印歌词【结束循环的条件,key为None的时候】
'''
musicLrc = '''[00:03.50]传奇
[00:19.10]作词:刘兵 作曲:李健
[00:20.60]演唱:王菲
[00:26.60]    
[04:40.75][02:39.90][00:36.25]只是因为在人群中多看了你一眼
[04:49.00]
[02:47.44][00:43.69]再也没能忘掉你容颜
[02:54.83][00:51.24]梦想着偶然能有一天再相见
[03:02.32][00:58.75]从此我开始孤单思念
[03:08.15][01:04.30]
[03:09.35][01:05.50]想你时你在天边
[03:16.90][01:13.13]想你时你在眼前
[03:24.42][01:20.92]想你时你在脑海
[03:31.85][01:28.44]想你时你在心田
[03:38.67][01:35.05]
[04:09.96][03:39.87][01:36.25]宁愿相信我们前世有约
[04:16.37][03:46.38][01:42.47]今生的爱情故事 不会再改变
[04:24.82][03:54.83][01:51.18]宁愿用这一生等你发现
[04:31.38][04:01.40][01:57.43]我一直在你身旁 从未走远
[04:39.55][04:09.00][02:07.85]
'''
'''
思路:1.创建一个空字典,用来保存时间key ,歌词value.
     2.把歌词切割成一行一行的字符
     3.由对应的key 取出value.
'''
import time

def getMusicDict(musicLrc):
    dictMusic = {}#创建一个空字典
    listLine = musicLrc.splitlines()#拆分每一行为一个元素的列表
    #print(listLine)
    for i in listLine:#把每一行元素遍历出来,准备切割
        listLine2 = i.split("]")#以]为切割符
        #print(listLine2)
        value = listLine2[-1]#遍历出每一个列表的最后一个元素(歌词)
        #print(value)
        for j in range(len(listLine2)-1):#遍历出时间字符串
            keyMusic = listLine2[j][1:]#根据索引值取出除[的所有字符
            #print(keyMusic)
            keyTime = keyMusic.split(":")#对遍历的时间字符串以冒号切割
            # print(keyTime)
            musicTime = float(keyTime[0])*60+float(keyTime[1])#计算每个时间的总秒数
            # print(musicTime)
            key = musicTime#把时间赋给字典的key值
            dictMusic[key] = value#按照时间的key,把歌词value写进字典
    return dictMusic
# print(dictMusic)

def printMusic(dictMusic,times):
    listMusicTime = []#创建空列表,把字典的key写进去,对其升序排列
    for key2 in dictMusic.keys():#强制给字典添加下标值,对其遍历
        listMusicTime.append(key2)#遍历出来的值追加到空列表
    # print(listMusic)
    listMusicTime.sort()#默认对列表进行升序
    # print(listMusicTime)
    time.sleep(listMusicTime[0]/times)#对打印的歌词按照睡眠时间的times倍数打印
    for index in range(len(listMusicTime)):
        if index>0:
            time.sleep((listMusicTime[index]-listMusicTime[index-1])/times)#两段歌词之间的时间
            print(dictMusic.get(listMusicTime[index]))#对列表里面的key值下标遍历,进而用get取字典的value

times = int(input("请输入你要播放的倍数:"))
dictMusic = getMusicDict(musicLrc)
printMusic(dictMusic,times)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值