zoukankan      html  css  js  c++  java
  • 歌词解析题 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效果

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

  • 相关阅读:
    使用 IntraWeb (15)
    使用 IntraWeb (10)
    使用 IntraWeb (8)
    Oralce问题之Oracle ORA-28001:某用户密码过期
    Oralce问题之ORA-12560:TNS协议适配器错误
    JS中数组初始化以及赋值
    EasyUI中取的DataGrid中选中行数据
    反编译DLL并修改DLL中的内容
    在SqlServer和Oralce中创建索引
    SQL中左连接on and条件和where条件执行先后顺序
  • 原文地址:https://www.cnblogs.com/miumiu2017/p/7857791.html
Copyright © 2011-2022 走看看