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

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

参考: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. while True:
  49. for i in clock():
  50. print i
  51. time.sleep(1)
  52. 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]]

----------------------------------------------------------------------------------------------------------------------------

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

  1. # coding: utf-8
  2.  
  3. import os, sys, time
  4.  
  5. lcd = {
  6. 0: [" _ ", "| | ", "|_| "],
  7. 1: [" ", " | ", " | "],
  8. 2: [" _ ", " _| ", "|_ "],
  9. 3: [" _ ", " _| ", " _| "],
  10. 4: [" ", "|_| ", " | "],
  11. 5: [" _ ", "|_ ", " _| "],
  12. 6: [" _ ", "|_ ", "|_| "],
  13. 7: [" _ ", " | ", " | "],
  14. 8: [" _ ", "|_| ", "|_| "],
  15. 9: [" _ ", "|_| ", " _| "]
  16. }
  17.  
  18. def num2lcd(time):
  19. et = ["", "", ""]
  20. shiwei = time / 10
  21. gewei = time % 10
  22.  
  23. for i in range(0, 3):
  24. et[i] = lcd[shiwei][i] + lcd[gewei][i]
  25.  
  26. return et
  27.  
  28. def clock(minute, second):
  29. m = num2lcd(minute)
  30. s = num2lcd(second)
  31.  
  32. output = [m[0] + " " + s[0], m[1] + "." + s[1], m[2] + "." + s[2]]
  33.  
  34. return output
  35.  
  36. sec = 0
  37. while True:
  38. sec += 1
  39. m = sec / 60
  40. s = sec % 60
  41.  
  42. for i in clock(m, s):
  43. print i
  44.  
  45. time.sleep(1)
  46. os.system("cls")

一般来说,当需要输出时间时,用求余符号%来求出分和秒是比较简便的。或者大家也可

以看看下面这一种。是用for循环在1和60之间循环递增的。择自己喜欢的一种即可。

  1. # coding: utf-8
  2.  
  3. import os, sys, time
  4.  
  5. lcd = {
  6. 0: [" _ ", "| | ", "|_| "],
  7. 1: [" ", " | ", " | "],
  8. 2: [" _ ", " _| ", "|_ "],
  9. 3: [" _ ", " _| ", " _| "],
  10. 4: [" ", "|_| ", " | "],
  11. 5: [" _ ", "|_ ", " _| "],
  12. 6: [" _ ", "|_ ", "|_| "],
  13. 7: [" _ ", " | ", " | "],
  14. 8: [" _ ", "|_| ", "|_| "],
  15. 9: [" _ ", "|_| ", " _| "]
  16. }
  17.  
  18. def num2lcd(time):
  19. et = ["", "", ""]
  20. shiwei = time / 10
  21. gewei = time % 10
  22.  
  23. for i in range(0, 3):
  24. et[i] = lcd[shiwei][i] + lcd[gewei][i]
  25.  
  26. return et
  27.  
  28. def clock(minute, second):
  29. m = num2lcd(minute)
  30. s = num2lcd(second)
  31.  
  32. output = [m[0] + " " + s[0], m[1] + "." + s[1], m[2] + "." + s[2]]
  33.  
  34. return output
  35.  
  36. minute = 0
  37. while True:
  38. for sec in range(1, 61):
  39. if sec == 60:
  40. sec = 0 # 记得到了第60秒时秒要清零哦
  41. minute += 1 # 同时分钟要 +1
  42.  
  43. for i in clock(minute, sec):
  44. print i
  45.  
  46. time.sleep(1)
  47. os.system("cls")

lcd秒表

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

  1. Keil MDK STM32系列(五) 使用STM32CubeMX创建项目基础结构

    Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...

  2. CSS 魔法系列:纯 CSS 绘制各种图形《系列五》

    我们的网页因为 CSS 而呈现千变万化的风格.这一看似简单的样式语言在使用中非常灵活,只要你发挥创意就能实现很多比人想象不到的效果.特别是随着 CSS3 的广泛使用,更多新奇的 CSS 作品涌现出来. ...

  3. Netty4.x中文教程系列(五)编解码器Codec

    Netty4.x中文教程系列(五)编解码器Codec 上一篇文章详细解释了ChannelHandler的相关构架设计,版本和设计逻辑变更等等. 这篇文章主要在于讲述Handler里面的Codec,也就 ...

  4. WCF编程系列(五)元数据

    WCF编程系列(五)元数据   示例一中我们使用了scvutil命令自动生成了服务的客户端代理类: svcutil http://localhost:8000/?wsdl /o:FirstServic ...

  5. JVM系列五:JVM监测&工具

    JVM系列五:JVM监测&工具[整理中]  http://www.cnblogs.com/redcreen/archive/2011/05/09/2040977.html 前几篇篇文章介绍了介 ...

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

    原文:SQL Server 2008空间数据应用系列五:数据表中使用空间数据类型 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 R2调测 ...

  7. VSTO之旅系列(五):创建Outlook解决方案

    原文:VSTO之旅系列(五):创建Outlook解决方案 本专题概要 引言 Outlook对象模型 自定义Outlook窗体 小结 一.引言 在上一个专题中,为大家简单介绍了下如何创建Word解决方案 ...

  8. 系列五AnkhSvn

    原文:系列五AnkhSvn AnkhSvn介绍 AnkhSVN是一款在VS中管理Subversion的插件,您可以在VS中轻松的提交.更新.添加文件,而不用在命令行或资源管理器中提交.而且该插件属于开 ...

  9. java多线程系列(五)---synchronized ReentrantLock volatile Atomic 原理分析

    java多线程系列(五)---synchronized ReentrantLock volatile Atomic 原理分析 前言:如有不正确的地方,还望指正. 目录 认识cpu.核心与线程 java ...

随机推荐

  1. cvs vss svn和git比较

    cvs vss svn和git比较 特征 CVS Git Mercurial Subversion 是否原子提交 CVS: 没有. CVS提交不是原子的 Git: 是的. 提交都是原子的 Mercur ...

  2. 浅谈PHP在各系统平台下的换行符

    <?php echo 'aaa\n';//用于linux.unix平台C的换行也是如此 echo 'bbb\r';//用于mac平台 echo 'ccc\r\n';//用于windows平台 / ...

  3. 《剑指Offer》面试题-从头到尾打印链表

    题目描述: 输入一个链表,从尾到头打印链表每个节点的值. 输入: 每个输入文件仅包含一组测试样例.每一组测试案例包含多行,每行一个大于0的整数,代表一个链表的节点.第一行是链表第一个节点的值,依次类推 ...

  4. Python多线程的创建,相关函数和守护线程的理解

    一:多线程的创建 threading库创建线程有两种方式,函数式和继承式    1)函数式 def func(): print 'Starting' print 'Ending' t=threadin ...

  5. C# 求精简用一行代码完成的多项判断 重复赋值

    C# 求精简用一行代码完成的多项判断 重复赋值 哈哈,说实话,个人看着这么长的三元操作也麻烦,但是我也只想到了这样三元判断句中执行方法体能够写到一行,追求的终极目的是,用一行实现这个过程,而且简单,由 ...

  6. 人工智能搜索算法(深度优先、迭代加深、一致代价、A*搜索)

    搜索算法问题求解 一.需求分析 分别用深度优先.迭代加深.一致代价.A*搜索算法得到从起始点Arad到目标点Bucharest的一条路径,即为罗马尼亚问题的一个解,在求解的过程中记录每种算法得到的解, ...

  7. ORM查询语言(OQL)简介高级篇

    ORM查询语言(OQL)简介--高级篇:脱胎换骨 在写本文之前,一直在想文章的标题应怎么取.在写了<ORM查询语言(OQL)简介--概念篇>.<ORM查询语言(OQL)简介--实例篇 ...

  8. TOGAF架构内容框架之概述及架构工作产品分类

    TOGAF架构内容框架之概述及架构工作产品分类 在TOGAF 9之前的版本中,TOGAF的重点主要集中在企业架构开发方法方面,用于指导其使用者如何在各自的组织中对企业架构进行创建和维护,而对于企业架构 ...

  9. aix上使用裸设备安装oracle10g数据库

    一.检查系统信息 [root@aix222 /]# oslevel -r 5300-08 [root@aix222 /]# prtconf | grep -i mem Memory Size: 190 ...

  10. PHP之语言基础01 By ACReaper

    1.PHP中的变量是不需要声明类型的,由$标识变量,变量的命名规则也是字母或者下划线开头,接着任意字符或者下划线. $PI = 3.14; $radius = 5; $cir = $PI * 2 * ...