【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]]

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

时间: 2024-10-21 02:24:57

【Time系列五】个性时钟与秒表升级版的相关文章

S5PV210开发系列五_sd卡驱动实现

S5PV210开发系列五 sd卡驱动实现 象棋小子    1048272975 SD卡(Secure Digital Memory Card)具有体积小.容量大.数据传输快.可插拔.安全性好等优点,被广泛应用于便携式设备上.例如作为数码相机的存储卡,作为手机.平板多媒体扩展卡用的TF卡(micro sd).笔者此处就S5PV210的 sd卡驱动实现作一个简单的介绍. 1. sd卡概述 sd卡技术是在MMC卡的基础上发展起来的,其尺寸与MMC卡一样,只是比MMC卡厚了0.7mm,因此sd设备可以识

Apache Kafka系列(五) Kafka Connect及FileConnector示例

Apache Kafka系列(一) 起步 Apache Kafka系列(二) 命令行工具(CLI) Apache Kafka系列(三) Java API使用 Apache Kafka系列(四) 多线程Consumer方案 Apache Kafka系列(五) Kafka Connect及FileConnector示例 一. Kafka Connect简介 Kafka是一个使用越来越广的消息系统,尤其是在大数据开发中(实时数据处理和分析).为何集成其他系统和解耦应用,经常使用Producer来发送消

RX系列五 | Schedulers线程控制

RX系列五 | Schedulers线程控制 在我们上一篇文章中的,我们的小例子里有这么一段代码 //网络访问 .observeOn(Schedulers.io()) 事实上,我们在使用网络操作的时候,便可以控制其运行在哪个线程中,而Schedulers类,有四个方法,分别是 Schedulers.immediate(); Schedulers.newthread(); Schedulers.io(); Schedulers.computation(); 以及RxAndroid中的Android

MyBatis 系列五 之 关联映射

MyBatis 系列五 之 关联映射 一对多的关联映射 一对多关联查询多表数据 1.1在MyBatis映射文件中做如下配置 <!--一对多单向的连接两表的查询--> <resultMap type="Dept" id="deptMapper"> <id property="deptNo" column="deptNo"/> <result property="deptName

C语言快速入门系列(五)

C语言快速入门系列(五) C语言指针初涉                                           ------转载请注明出处:coder-pig 本节引言: 上一节我们对C语言复合数据类型中的数组进行了解析,在本节中,我们会对C语言复合数据类型中的 重点,C语言的灵魂-----指针进行学习!使用指针的好处:利用指针可以表示与使用复杂的数据结构; 更加方便地使用我们的数组与字符串;可以像汇编语言一样直接处理内存单元地址;可以动态地进行内存空间 分配,C语言指针是重点,同

互联网金融的前世、今生和未来-系列五(今生):互联网金融的有效监管

互联网金融的前世.今生和未来--系列一:山雨欲来 互联网金融的前世.今生和未来-系列二(前世):金融与技术的首次亲密接触之金融电子化 互联网金融的前世.今生和未来-系列三(今生):一场跨界的战争 互联网金融的前世.今生和未来-系列四(今生):百花齐放的互联网金融业态 今生:金融与互联网的深度融合--互联网金融 金融行业作为现代经济的核心,对国民经济的平稳运行至关重要.为防止出现金融市场失灵的情况,如内幕交易.信息不对称.信托责任.监管套利.系统性风险及羊群效应等,世界各国政府普遍会基于本国的金融

Maven 系列 五 :使用Nexus搭建Maven私服

1 . 私服简介 私服是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构件.有了私服之后,当 Maven 需要下载构件时,直接请求私服,私服上存在则下载到本地仓库:否则,私服请求外部的远程仓库,将构件下载到私服,再提供给本地仓库下载.                                                  我们可以使用专门的 Maven 仓库管理软件来搭建私服,比如:Apache Archiva,Artifactory,Sonatype Nexus.这

SQL Server 2008空间数据应用系列五:数据表中使用空间数据类型

原文:SQL Server 2008空间数据应用系列五:数据表中使用空间数据类型 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 R2调测. 2.具备 Transact-SQL 编程经验和使用 SQL Server Management Studio 的经验. 3.熟悉或了解Microsoft SQL Server 2008中的空间数据类型. 4.具备相应(比如OGC)的GIS专业理论知识. 5.其他相关知识. 通过前面几篇文章介绍了

【C++自我精讲】基础系列五 隐式转换和显示转换

0 前言 1)C++的类型转换分为两种,一种为隐式转换,另一种为显式转换. 2)C++中应该尽量不要使用转换,尽量使用显式转换来代替隐式转换. 1 隐式转换 定义:隐式转换是系统跟据程序的需要而自动转换的. 1)C++类型(char,int,float,long,double等)的隐式转换: 算术表达式隐式转换顺序为: 1.char - int - long - double 2.float - double //1)算术表达式 int m = 10; double n = m;//n = 10