前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >给我一首歌的时间

给我一首歌的时间

作者头像
Python技术与生活认知的分享
发布2018-07-03 12:14:59
3490
发布2018-07-03 12:14:59
举报
文章被收录于专栏:AzMark

阅读文本大概需要 6.6 分钟

写在前面

公号出生有一段时间了,看着她一点一点的长大,感到满满的全是幸福。未来的我们都要为人父母,在我看来呵护公号就像父母呵护自己的孩子一般,只不过一个是智慧的结晶,一个是爱情的结晶。

当她刚出生时,激动、兴奋、幸福,你会感觉到全世界都是你的,小心翼翼地为她付出你全部的爱。慢慢的,更多的会变成责任与担当,你既希望她如钻石般耀眼优秀,却更希望她健康成长。

创办公号我有我的初心,利他才能利己。我希望她小而美,能给关注她的人真正带来技术上的提升和产生更多对于生活的思考与认知。也许这一路走来会很漫长,但我更希望她健康的成长,因为我相信时间会给自己想要的答案。

「技术和人生都是需要沉淀的,看得见的未来也许并不是你想要到达的彼岸」每日一思,分享给大家。

Python编程

接下来开始今天的学习,昨天分享了关于Python字典的知识,今天原本打算介绍函数的使用,但为了大家能更好地巩固之前的学习,我们今天做个练习,有点难度的哦!

希望大家在学完每一天的知识后都能勤加练习,学以致用,才能学有所成,切勿眼高手低。在这里也欢迎大家积极地留言打卡,练习有问题的可以私发我,同时想一起督促学习的,可以加我微信,日后一起交流指正,共同提升。

01

代码块与笔记

运行歌词

1

思路简介

  1. 选取歌词「青花瓷」
  2. 以行切割歌词
  3. 处理每行歌词,以字典存储结果
  4. 将无序字典处理成“有序”的
  5. 输入时间,输出对应歌词
  6. 运行歌词,让歌词跑起来

2

温馨提醒

  1. 思路简介的 5、6「水火不容」,运行 5 时请将 6 注释掉
  2. 看最终效果时,所有的 prin() 语句可以注释掉,Mark加上是为了让您更清楚每一步的结果

选取歌词1

代码语言:javascript
复制
# 青花瓷

# 导入时间模块,之后会学
import time

# 定义字典
lrcDict = {}

musicLrc = """[00:01.11]青花瓷
[03:36.49]
[00:21.39]素眉勾勒秋千话北风龙转丹 
[00:26.08]屏层鸟绘的牡丹一如你梳妆
[00:30.46]黯然腾香透过窗心事我了然 
[00:34.93]宣纸上皱边直尺各一半
[00:39.49]油色渲染侍女图因为被失藏 
[00:43.83]而你嫣然的一笑如含苞待放
[00:48.30]你的美一缕飘散 
[00:50.77]去到我去不了的地方
[02:23.97][00:55.77]
[03:01.92][02:25.63][00:56.90]天正在等烟雨 
[03:03.57][02:27.91][00:58.99]而我在等你 
[03:05.92][02:30.44][01:00.93]炊烟袅袅升起 
[03:07.76][02:32.25][01:03.49]隔江千万里

"""

2 以行切割歌词

代码语言:javascript
复制
# 歌词按行切割成列表

musicLrcList = musicLrc.splitlines()

# ['[00:01.11]青花瓷', '[03:36.49]', ...]

print(musicLrcList)

处理每行歌词,以字典存储结果3

代码语言:javascript
复制
# 以字典存储结果,如{1.11: '青花瓷'}

for lrcLine in musicLrcList:

    # 按照"]"切割每行歌词
    lrcLineList = lrcLine.split("]")

    # ['[00:01.11', '青花瓷']
    print(lrcLineList)


    # 遍历处理过的每行歌词

    # len(lrcLineList)-1 只抓取时间,不要歌词
    for index in range(len(lrcLineList) - 1):

        # [1:] 从第2个位置开始
        timeStr = lrcLineList[index][1:]

        # 00:01.11
        print(timeStr)

        timeList = timeStr.split(":")

        # ['00', '01.11']
        print(timeList)

        seconds = float(timeList[0]) * 60 + float(timeList[1])

        # 播放时间 1.11
        print(seconds)

        # 对应歌词 青花瓷
        print(lrcLineList[-1])

        lrcDict[seconds] = lrcLineList[-1]

# {1.11: '青花瓷'}
print(lrcDict)

4将无序字典处理成“有序”的

代码语言:javascript
复制
# 以列表存储字典的键,并按照时间排序

allTimeList = []

for t in lrcDict:
    allTimeList.append(t)

# 此时键是无序的
print(allTimeList)

allTimeList.sort()

# [1.11, ...]
print(allTimeList)

5输入时间,输出对应歌词

代码语言:javascript
复制
while 1:

    getTime = float(input("请您输入一个时间:"))

    for j in range(len(allTimeList)):

        tempTime = allTimeList[j]

        print(tempTime)

        if getTime < tempTime:
            break

    if j == 0:
        print("歌曲还没开始播放")

    else:
        print(lrcDict[allTimeList[j - 1]])

6运行结果(gif)

运行歌词,让歌词跑起来7

代码语言:javascript
复制
getTime = 20

while 1:

    for j in range(len(allTimeList)):

        tempTime = allTimeList[j]

        print(tempTime)

        # 输入的时间小于存储歌词时间时,返回前一句歌词
        if getTime < tempTime:
            break

    lrc = lrcDict[allTimeList[j - 1]]

    if lrc is None:
        pass
    else:
        print(lrc)

    time.sleep(1)

    getTime += 4

运行结果(gif)8

02

练习题

哈哈,这就是一首歌的时间能够做到的事情,是不是感觉到Python很Cool呢,可我要告诉你,这仅仅是个开始,未来我们能用Python玩更多更炫酷的东西,只有你想不到的,没有Python做不到的,心动不如行动,赶紧上车吧!明天我们将开始函数的学习,大家一起加油!

好了,今天的分享就到这了,觉得写得不错的,点赞转发支持下。

点赞转发、留言鼓励是对于原创作者最大的鼓励,您的一次点赞、留言也许在您看来没有什么,可是在Mark看来那是大家对自己的肯定与鼓励。未来,我们一起努力

原创不易,感谢分享

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-05-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python梦工厂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档