从昨天到现在,一直在研究这个看起来超级简单的时钟。界面非常简洁大方。
虽然是简单,可是这个对齐的问题还是把我整得一塌糊涂。谁叫作者不解释清楚的。
参考:http://bbs.fishc.com/thread-77638-1-1.html
接下来,我们一步步解决。
----------------------------------------------------------------------------------------------------------------
步骤1
注意。这里是换行打印才能打印出这种图形的,这个字典储存的是列表,为啥储存的是列表呢?因为待会
一个数字,我们是要分上中下三个部分打印的。
这里的元素要尽可能对齐,因为这个程序最麻烦的就是要整齐的输出。第一个/位置0元素的笔画统一居中。
以0为例,位置0(一横)除了1和4之外,在其它数字都是给包围起来的,所以两边的空格其实是留给竖的!!!
1 lcd = { 2 0: [" _ ", "| |", "|_|"], 3 1: [" ", " |", " |"], 4 2: [" _ ", " _|", "|_ "], 5 3: [" _ ", " _|", " _|"], 6 4: [" ", "|_|", " |"], 7 5: [" _ ", "|_ ", " _|"], 8 6: [" _ ", "|_ ", "|_|"], 9 7: [" _ ", " |", " |"], 10 8: [" _ ", "|_|", "|_|"], 11 9: [" _ ", "|_|", " _|"] 12 } 13 14 for num in lcd: 15 for i in lcd[num]: 16 print i
如果输出的是这种整整齐齐的数字的话(代码是纵向输出的),说明我们千辛万苦输入的列表元素是正确的。
步骤2
接上面的代码,完整版在下面。
1 # coding: utf-8 2 3 import time 4 5 # 分别把时,分,秒,拆分成上中下三个部分并 6 # 分别存储到一个空列表中(empty) 7 8 def num2lcd(time): 9 et = ["", "", ""] 10 shiwei = time / 10 11 gewei = time % 10 12 13 for i in range(0, 3): 14 et[i] = lcd[shiwei][i] + lcd[gewei][i] 15 16 return et 17 18 # time.localtime()是输出当前日期的元组 19 # t.tm_hour是时,t.tm_min是分钟 20 # 这个函数最关键的部分是把之前分开的时, 21 # 分,秒的列表元素集合到一个列表中,最后统一打印出来。 22 23 def clock(): 24 t = time.localtime() 25 h = num2lcd(t.tm_hour) 26 m = num2lcd(t.tm_min) 27 s = num2lcd(t.tm_sec) 28 29 output = [h[0] + m[0] + s[0], h[1] + m[1] + s[1], h[2] + m[2] + s[2]] 30 return output
注意,这里的时间显示能否对齐完全取决于lcd字典是否对齐,每个值前面和后面的空格数量一定要控制好
---------------------------------------------------------------------------------------------------------------------------
1 # coding: utf-8 2016/12/8 2 3 import os, time 4 5 # 这里在上面的基础上,每个列表的元素后面加 6 # 多一个空格,让数字之间显示更美观 7 8 lcd = { 9 0: [" _ ", "| | ", "|_| "], 10 1: [" ", " | ", " | "], 11 2: [" _ ", " _| ", "|_ "], 12 3: [" _ ", " _| ", " _| "], 13 4: [" ", "|_| ", " | "], 14 5: [" _ ", "|_ ", " _| "], 15 6: [" _ ", "|_ ", "|_| "], 16 7: [" _ ", " | ", " | "], 17 8: [" _ ", "|_| ", "|_| "], 18 9: [" _ ", "|_| ", " _| "], 19 } 20 21 # 分别把时,分,秒,拆分成上中下三个部分并 22 # 分别存储到一个空列表中(empty) 23 24 def num2lcd(time): 25 et = ["", "", ""] 26 shiwei = time / 10 27 gewei = time % 10 28 29 for i in range(0, 3): 30 et[i] = lcd[shiwei][i] + lcd[gewei][i] 31 32 return et 33 34 # time.localtime()是输出当前日期的元组 35 # t.tm_hour是时,t.tm_min是分钟 36 # 这个函数最关键的部分是把之前分开的时, 37 # 分,秒的列表元素集合到一个列表中,最后统一打印出来。 38 39 def clock(): 40 t = time.localtime() 41 h = num2lcd(t.tm_hour) 42 m = num2lcd(t.tm_min) 43 s = num2lcd(t.tm_sec) 44 45 output = [h[0] + " " + m[0] + " " + s[0], h[1] + "." + m[1] + "." + s[1], h[2] + "." + m[2] + "." + s[2]] 46 return output 47 48 49 while True: 50 for i in clock(): 51 print i 52 time.sleep(1) 53 os.system("cls")
时钟完整版
由于在时和分,分和秒之间加了冒号,而每个时h[0]和分m[0],分m[0]和秒s[0]之间距离是一定的,
由于冒号自身占用1个空格,所以后面的会变成这样。因此要在h[0]的m[0],m[0]和s[0]之间加上空格。
1 output = [h[0] + " " + m[0] + " " + s[0], h[1] + "." + m[1] + "." + s[1], h[2] + "." + m[2] + "." + s[2]]
秒表的同理类似。这里就不再介绍了,直接附上代码。