# 歌词解析 # 你给一个时间,我给一句对应的歌词
该题的应用,涵盖python基础数据类型的操作,也较好的体现了面向功能编程的思想.
1 geci = '''[ti:蓝莲花] 2 [ar:许巍] 3 [al:留声十年绝版青春北京演唱会] 4 [00:-01.70]蓝莲花 5 [00:-00.70]演唱:许巍 6 [00:00.00] 7 [00:00.70]没有什么能够阻挡 8 [00:06.01]你对自由的向往 9 [00:11.43]天马行空的生涯 10 [00:16.99]你的心了无牵挂 11 [00:21.20] 12 [02:11.55][01:50.60][00:22.63]穿过幽暗的岁月 13 [02:16.93][01:55.60][00:27.81]也曾感到彷徨 14 [02:22.21][02:01.09][00:33.13]当你低头的瞬间 15 [02:27.62][02:06.33][00:38.32]才发觉脚下的路 16 [02:31.64][02:10.23][00:42.37] 17 [02:32.97][00:43.79]心中那自由的世界 18 [02:38.23][00:49.50]如此的清澈高远 19 [02:43.30][00:54.31]盛开着永不凋零 20 [02:47.70][00:58.50]蓝莲花 21 [02:53.95][03:00.06][01:05.41] 22 ''' 23 24 # 搞一个字典,用来存放歌词信息,键为浮点时间,值为歌词 25 lrc_dict = {} 26 string_list = geci.splitlines() 27 # 遍历这个列表,列表中存放的是每一行歌词信息 28 for string in string_list: 29 # 如果不是以 [0 开头的,跳过即可 30 if not string.startswith('[0'): 31 continue 32 # 只要走到这里,那么肯定是需要解析的歌词 33 # [02:11.55][01:50.60][00:22.63]穿过幽暗的岁月 34 # 将歌词按照 ] 进行切割 35 info_list = string.split(']') 36 # print(info_list) 37 # 提取歌词 38 lrc_string = info_list[-1] 39 # print(lrc_string) 40 # 提取时间列表 41 time_list = info_list[:-1] 42 # print(time_list) 43 # 解析时间列表 44 # ['[02:11.55', '[01:50.60', '[00:22.63'] 45 for time_string in time_list: 46 # [02:11.55 02:11.55 47 # 重新赋值,方便理解 48 time_string = time_string.lstrip('[') 49 # print(time_string) 50 # 将时间字符串按照:进行切割 51 time_info_list = time_string.split(':') 52 # print(time_info_list) 53 # 提取分钟字符串和秒字符串 54 minute_string = time_info_list[0] 55 second_string = time_info_list[-1] 56 # 根据分钟字符串和秒字符串计算时间 57 time_info = float(minute_string)*60 + float(second_string) 58 # 将键和值存放到对应的字典中 59 # 构建键值对数据结构 60 lrc_dict[time_info] = lrc_string 61 62 # 解析完毕 63 # print(lrc_dict) 64 # 将字典中的键(时间) 全部拿出来存放到一个列表中 65 # dict.keys()是<class 'dict_keys'>类型 66 time_sort = list(lrc_dict.keys()) 67 # 将列表直接排序 倒序排列,.sort()改变原列表 68 time_sort.sort(reverse=1) 69 70 # print(time_sort) 71 time_gei = float(input('请给我一个时间:')) 72 # 遍历时间列表,找到第一个比给的时间小的那个时间 73 # 遍历是个好设施啊,请准确理解模型 74 for x in time_sort: 75 if time_gei >= x: 76 print(lrc_dict[x]) 77 # 对应一条就行,break 78 break
#来实现卡拉OK效果.
1 #接line68 2 import time 3 import os 4 # 计数器 5 i = 0 6 while 1: 7 i += 0.5 8 for x in time_sort: 9 if i >= x: 10 # 清屏并打印,实现按时打印的一句化显示. 11 os.system('cls') 12 print(lrc_dict[x]) 13 break 14 time.sleep(0.5)
用字典来存放歌词信息,键为浮点时间,值为歌词
因为只要有对应的关系,并且健是唯一的,就要用字典数据类型来处理.