首页 > 代码库 > 【Time系列五】个性时钟与秒表升级版

【Time系列五】个性时钟与秒表升级版

    从昨天到现在,一直在研究这个看起来超级简单的时钟。界面非常简洁大方。

虽然是简单,可是这个对齐的问题还是把我整得一塌糊涂。谁叫作者不解释清楚的。

    参考: 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]]

    秒表的同理类似。这里就不再介绍了,直接附上代码。

【Time系列五】个性时钟与秒表升级版