给我一首歌的时间

阅读文本大概需要 6.6 分钟

写在前面

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

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

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

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

Python编程

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

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

01

代码块与笔记

运行歌词

1

思路简介

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

2

温馨提醒

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

选取歌词1

# 青花瓷

# 导入时间模块,之后会学
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 以行切割歌词

# 歌词按行切割成列表

musicLrcList = musicLrc.splitlines()

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

print(musicLrcList)

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

# 以字典存储结果,如{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将无序字典处理成“有序”的

# 以列表存储字典的键,并按照时间排序

allTimeList = []

for t in lrcDict:
    allTimeList.append(t)

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

allTimeList.sort()

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

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

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

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看来那是大家对自己的肯定与鼓励。未来,我们一起努力

原创不易,感谢分享

原文发布于微信公众号 - Python梦工厂(AzMark950831)

原文发表时间:2018-05-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏纯洁的微笑

设计模式是什么鬼?

921
来自专栏程序员的诗和远方

20180722_ARTS_week04

这题寻找两个已经排好序的数组的中值,一开始思路比较简单,两个数组合一起,然后排个序就很容易找到中值了。

1091
来自专栏编程一生

《阿里巴巴Java开发手册v1.2》解析(编程规约篇)

1113
来自专栏企鹅号快讯

C语言的前世今生,及其特点、利弊和入门须知三把斧

C语言的开展前史: ? 20世纪70年代初,贝尔实验室的Dennis Richie 等人在B语言基础上开发C语言,最初是作为UNIX的开发语言; 20世纪70年...

2266
来自专栏编程一生

一条项目中常用的linux命令引发的经典算法题

1283
来自专栏ml

编程之美----NIM游戏

: 博弈游戏·Nim游戏 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 今天我们要认识一对新朋友,Alice与Bob。 Alic...

4069
来自专栏智能算法

关于算法的那些神段子

据说在每一个互联网公司里,都有一个扫地的老太太。很偶然地,当她经过一个程序员的身边,扫一眼屏幕上的代码,会低声提醒对方说:小心,栈溢出了。 程序猿穿袜子 ——...

3806
来自专栏牛客网

京东广告搜索部 C++后台开发面经

各位老铁大家好,今天去京东世纪北辰世纪中心进行面试,本着牛客网好人一生平安的原则,特此奉上面经。 早上八点半说要面试,由于住的比较远,今天大清早的六点半起来就火...

4419
来自专栏高性能服务器开发

从“成都-go-戒炸鸡”的面试题开始说起

今天晚上“高性能服务器开发”QQ群(群号:49114021,有兴趣的读者可以加一下)里面一名叫“成都-go-戒炸鸡”的群友提出了他最近面试的一些面试题,面试题内...

2193
来自专栏恰童鞋骚年

[转] Agile Software Development 敏捷软件开发

  敏捷开发是一种软件开发方法,基于迭代和增量开发,通过自组织,跨团队,沟通协作完成开发工作。

1182

扫码关注云+社区

领取腾讯云代金券