'''
歌词解析器:把歌词按照时间节点进行显示。
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)