python入门及日常应用_python的日常应用->入门篇08

今天继续来写一个有趣的小程序——二进制钟表

二进制钟表

前戏

开门见山,先给大家看个好玩的!

最近一段时间在倒腾 Manjaro系统,配置桌面时意外的发现了这个二进制钟表挂件。

第一次见这玩意的同学可能会一头雾水。

没关系,看完下面这张图之后你就明白它是干啥的了!

是不是很有趣?

今天我们就用Python来实现它!

实现

第一步 :创建脚本

名字依旧是随便写。

第二步:写出很烂的一坨代码。

import time # 引用 time 库

def main():

time_str = time.strftime("%H %M %S") # 将格式化时间存入变量

print(time_str)

time_str_split = time_str.split() # 将 time_str 用空格分割为列表

print(time_str_split)

for i in time_str_split:

print(f"{int(i[0]):04b}") # 输出数字的第一位,并转为二进制数,若不足 4 位则用 0 补全

print(f"{int(i[1]):04b}")

if __name__ == '__main__':

main()

输出结果

14 13 44

['14', '13', '44']

0001

0100

0001

0011

0100

0100

看这 3 - 8 行,有内味了吧!

只不过这输出怎么是横着的?

看来代码还得改!

import time # 引用 time 库

def main():

time_str = time.strftime("%H %M %S") # 将格式化时间存入变量

print(time_str)

time_str_split = time_str.split() # 将 time_str 用空格分割为列表

print(time_str_split)

l = [] # 定义一个列表 l

for i in time_str_split:

l.append(f"{int(i[0]):04b}") # 将生成的字符串存入列表 l

l.append(f"{int(i[1]):04b}")

print(l)

l = list(zip(*l)) # 使用 zip 函数将 l 重新排列

print(l)

for i in l:

print("".join(i)) # join 的作用是将列表或元组通过某字符串连接起来

if __name__ == '__main__':

main()

输出结果

14 29 40

['14', '29', '40']

['0001', '0100', '0010', '1001', '0100', '0000']

[('0', '0', '0', '1', '0', '0'), ('0', '1', '0', '0', '1', '0'), ('0', '0', '1', '0', '0', '0'), ('1', '0', '0', '1', '0', '0')]

000100

010010

001000

100100

这下 5 - 8 行顺序是没有问题了,而且也满足了二进制时钟的规则。这样子我们雏形就完成了!

但是因为篇幅原因,我们这一节就做到这, 暂时先不优化!

毕竟先实现后优化是我一直信奉的真理。啥都别怕动手去做!

总结

本节中用到的方法我来逐个说明。

time 库

import time,import 是引用库的语法,这个以后会经常用到,先记住

time.strftime("%H %M %S"),这是将当前的系统时间格式化输出。字符含义见下表:

举个例子:

import time

print(time.strftime("%Y-%m-%d%H:%M:%S"))

输出:

2020-04-05 14:45:05

split()

将字符串以某字符作为分隔符,将其分割为列表。默认使用空格作为分割符。

例子:

a = "1,2,3"

print(a.split(","))

b = "12345"

print(b.split("3"))

输出:

['1', '2', '3']

['12', '45']

f-string

在字符串的引号前加上 f 或 F 则说明改字符串使用了 python3.6 的新特性 —— f-string 。

该字符串中,被大括号 {} 所包裹的对象会将其运行所得的值替换直该字符串。

举例:

a = 123

print(f"a: {a}")

输出:

a: 123

这玩意还有更复杂的用法,后面的章节会单独说明。

zip()

zip()可以将多个可迭代对象中的对应元素打包成为一个个的元组。

举例:

# 例子1

a = [1,2,3]

b = [4,5,6]

print(list(zip(a, b)))

# 例子2

l = ["abc", "def"]

print(list(zip(*l)))

输出:

[(1, 4), (2, 5), (3, 6)]

[('a', 'd'), ('b', 'e'), ('c', 'f')]

因为 python3 中`zip()`返回的是一个对象,所以要用`list()`将其转化为列表

在 例子2 中,`l`是作为一个可变长参数传入的,所以在其前面加了一个`*`。关于什么是可变参数,后面也会做详细说明。

join()

字符串的内建方法。

可以使用该字符作为连接符,将一个列表或元组连接为一个字符串。

例子:

# 例子1

a = ["1", "2", "3"]

print(",".join(a))

# 例子2

b = ("a", "b", "c")

print("|".join(b))

输出:

1,2,3

a|b|c

本节的练习题在网上搜一下总结中所列举的方法,并尝试扩展其用途,写几行代码实验一下效果。

吐槽

最后吐槽一下,我本地写完之后直接发知乎,格式崩了。

又重新整理了一下格式。累死了!

如果喜欢我的文章记得点一下关注!您的关注是我最大的动力!

另外有兴趣的同学也可以关注一下我刚搭的博客,谢谢大家!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值