歌词解析题 python基础阶段 经典练习题 拾英札记(4)

# 歌词解析 #  你给一个时间,我给一句对应的歌词

该题的应用,涵盖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)
模拟卡拉OK效果

用字典来存放歌词信息,键为浮点时间,值为歌词
因为只要有对应的关系,并且健是唯一的,就要用字典数据类型来处理.

原文地址:https://www.cnblogs.com/miumiu2017/p/7857791.html