绘制一个时间的七段数码管
七段数码管:https://baike.baidu.com/item/七段数码管





思考:
1. 绘制一条线
2. 绘制七条线,同时规定每条线绘制的先后顺序
3. 根据不同的数字绘制这七条线中的某几条,构成一个数字
4. 传入一个时间,绘制多个数字
5. 获得系统时间,绘制多个数字
6. 获得系统时间,绘制多个数字,添加年月日、颜色等元素

  • 七段数码管是由七个基本线条构成的,所以首先要能够绘制这七个基本线条。可以看到七段数码管的七个线条是有固定顺序的,它构成了一个数字8的形状,我们可以从左边的一个位置开始,将它们逐一编号,形成一个行动的序列,这样的一个行动序列可以覆盖这七条线段。在这七段线条中不同的线条是否被绘制就能形成不同的数字。
  • 通过函数将功能做一个分割,定义一个函数drawLine,这个函数的作用就是画一条线。画一条线又分两种情况,是真实地画一条线,还是让海龟移飞过去并不画线,可以通过一个变量draw来控制,作为函数drawLine的参数。如果draw是真值,就让画笔落下,如果不是,就让画笔抬起来飞过去
  • 如果绘制中不加判断,调用drawLine,每一条线都会被绘制出来,绘制的结果就是一个数字8。可以设计一个函数drawDigit,根据参数digit来决定如何绘制对应的数字,digit取值范围为0~9的数字,判断当前给的整数是几,如果给出的数字是digit=8,那么每一条线段都要被真实绘制,如果给出的数字是digit=0,那么第一条线就不需要被真实绘制
  • 通过给出一个字符串时间,将字符串中的每个数字取出赋值给digit,让digit根据确定的规则绘制线段
# Drawdigit.py
import turtledef drawLine(draw):  # 绘制单段数码管turtle.pendown() if draw else turtle.penup()turtle.forward(40)turtle.right(90)def drawDigit(digit):  # 根据数字绘制七段数码管drawLine(True) if digit in [2, 3, 4, 5, 6, 8, 9] else drawLine(False)drawLine(True) if digit in [0, 1, 3, 4, 5, 6, 7, 8, 9] else drawLine(False)drawLine(True) if digit in [0, 2, 3, 5, 6, 8, 9] else drawLine(False)drawLine(True) if digit in [0, 2, 6, 8] else drawLine(False)turtle.left(90)drawLine(True) if digit in [0, 4, 5, 6, 8, 9] else drawLine(False)drawLine(True) if digit in [0, 2, 3, 5, 6, 7, 8, 9] else drawLine(False)drawLine(True) if digit in [0, 1, 2, 3, 4, 7, 8, 9] else drawLine(False)turtle.left(180)turtle.penup()  # 为绘制后续数字确定位置turtle.forward(30)  # 未确定后续数字确定位置def drawDate(date):  # 获得要输出的数字for i in date:drawDigit(eval(i))  # 通过eval将字符串编程整数def main():turtle.setup(800, 300, 200, 200)turtle.penup()turtle.forward(-300)turtle.pensize(8)drawDate("20181010")turtle.done()main()



# Drawdigit.py
import turtle, timedef drawGap():turtle.penup()turtle.forward(5)def drawLine(draw):  # 绘制单段数码管drawGap()turtle.pendown() if draw else turtle.penup()turtle.forward(40)drawGap()turtle.right(90)def drawDigit(digit):  # 根据数字绘制七段数码管drawLine(True) if digit in [2, 3, 4, 5, 6, 8, 9] else drawLine(False)drawLine(True) if digit in [0, 1, 3, 4, 5, 6, 7, 8, 9] else drawLine(False)drawLine(True) if digit in [0, 2, 3, 5, 6, 8, 9] else drawLine(False)drawLine(True) if digit in [0, 2, 6, 8] else drawLine(False)turtle.left(90)drawLine(True) if digit in [0, 4, 5, 6, 8, 9] else drawLine(False)drawLine(True) if digit in [0, 2, 3, 5, 6, 7, 8, 9] else drawLine(False)drawLine(True) if digit in [0, 1, 2, 3, 4, 7, 8, 9] else drawLine(False)turtle.left(180)turtle.penup()  # 为绘制后续数字确定位置turtle.forward(20)  # 未确定后续数字确定位置def drawDate(date):  # 获得要输出的数字turtle.pencolor("red")for i in date:if i == "-":turtle.write("年", font=("Arial", 30, "normal"))turtle.pencolor("green")turtle.forward(50)elif i == "=":turtle.write("月", font=("Arial", 30, "normal"))turtle.pencolor("blue")turtle.forward(50)elif i == "+":turtle.write("日", font=("Arial", 30, "normal"))else:drawDigit(eval(i))  # 通过eval将字符串编程整数def main():turtle.setup(900, 300, 200, 200)turtle.penup()turtle.forward(-300)turtle.pensize(8)drawDate(time.strftime("%Y-%m=%d+", time.gmtime()))turtle.done()main()



- 模块化思维:将一个大的功能分成一个个小的功能,确定了每一个模块的接口做好封装。七段数码管的绘制就是一个小的模块,其中的每个小线段的绘制也是一个小的模块,封装好之后,通过定义函数,就可以用函数的名字代表它的功能。定义好功能之后,就可以用这个功能来形成更多的功能。
- 规则化思维绘制七段数码管的时候,我们并没有根据不同的数据绘制一个具体的形状,而是让程序无论是什么样的数字都走了七条线,只是在走不同线的时候,用参数来控制是真实绘制还是飞过去并不绘制,用这样的方式抽象了绘制七段数码管的一个过程,将这种过程变为一种规则,在规则中用一些参数来控制它,并且由计算机来自动执行。

带刷新的时间倒计时效果:

# Drawdigit.py
import turtledef drawGap():turtle.penup()turtle.forward(10)def drawLine(draw):  # 绘制单段数码管drawGap()turtle.pendown() if draw else turtle.penup()turtle.forward(40)drawGap()turtle.right(90)def drawDigit(digit):  # 根据数字绘制七段数码管drawLine(True) if digit in [2, 3, 4, 5, 6, 8, 9] else drawLine(False)drawLine(True) if digit in [0, 1, 3, 4, 5, 6, 7, 8, 9] else drawLine(False)drawLine(True) if digit in [0, 2, 3, 5, 6, 8, 9] else drawLine(False)drawLine(True) if digit in [0, 2, 6, 8] else drawLine(False)turtle.left(90)drawLine(True) if digit in [0, 4, 5, 6, 8, 9] else drawLine(False)drawLine(True) if digit in [0, 2, 3, 5, 6, 7, 8, 9] else drawLine(False)drawLine(True) if digit in [0, 1, 2, 3, 4, 7, 8, 9] else drawLine(False)turtle.left(180)turtle.penup()  # 为绘制后续数字确定位置turtle.forward(20)  # 未确定后续数字确定位置def drawDate(date):  # 获得要输出的数字turtle.pencolor("red")for i in reversed(range(date)):nums = str(i)for num in nums:drawDigit(eval(num))  # 通过eval将字符串编程整数turtle.clear()width = len(nums)turtle.forward(-80 * width)# 画一段长度是40,左右各空10,画完之后前进20,做好准备画下一个数字,回退应退,80def main():turtle.setup(600, 300, 200, 200)turtle.penup()turtle.forward(-100)turtle.pensize(15)turtle.speed("fast")drawDate(12)turtle.done()turtle.hideturtle()main()


PS. source. python123.io

Python项目实践:绘制七段数码管相关推荐

  1. python七段数码管设计图案-Python绘制七段数码管实例代码

    七段数码管(seven-segmentindicator)由7段数码管拼接而成,每段有亮或不亮两种情况,改进型的七段数码管还包括一个小数点位置 绘制模式: input:输入当前日期的数字形式 proc ...

  2. python七段数码管的详解,Python入门基础:七段数码管绘制

    1.在学习Python的过程中,运用所学的一些基础知识,进行一些简单的编程,可以收获很多乐趣.在生活中,LED灯无处不在,荧幕显示的广告词,给我们呈现出动态的视觉效果.下面,则以最简单的显示日期为例, ...

  3. python七段数码管绘制秒表_Python绘制七段数码管实例代码

    七段数码管(seven-segmentindicator)由7段数码管拼接而成,每段有亮或不亮两种情况,改进型的七段数码管还包括一个小数点位置 绘制模式: input:输入当前日期的数字形式 proc ...

  4. #Python语言程序设计Demo - 七段数码管绘制

    Python设计七段数码管绘制 单个数码管效果: 设计总数码管效果: Pyhton 编程: #七段数码管绘制 import turtle as t import time as T def drawG ...

  5. python七段数码管创新_Python绘制七段数码管显示当前时间

    利用Python中的turtle图形库绘制七段数码管,显示当前时间 代码 # coding:utf-8 # 绘制七段数码管,显示当前时间 import time import turtle as tt ...

  6. python七段数码管绘制实验报告_Python绘制七段数码管实例代码

    七段数码管(seven-segmentindicator)由7段数码管拼接而成,每段有亮或不亮两种情况,改进型的七段数码管还包括一个小数点位置 绘制模式: input:输入当前日期的数字形式 proc ...

  7. Python之绘制七段数码管

    今天课上老师教我们如何运用Python来绘制七段数码管,首先我们要了解七段数码管是怎么组成的,如下图 我们知道七段数码是怎么组成后,就开始来绘制七段数码管了.  一,绘制单个数码管 代码如下: imp ...

  8. Python实例7:七段数码管绘制

    Python实例7:七段数码管绘制 基本思路: 绘制单个数字对应的数码管: 获得一串数字,绘制对应的数码管: 获取当前系统时间,绘制对应的数码管: 步骤: 七段数码管由7个基本线条组成:可以有固定顺序 ...

  9. python七段数码管绘制单个数字_#Python语言程序设计Demo - 七段数码管绘制

    #七段数码管绘制 importturtle as timporttime as Tdef drawGap(): #绘制数码管的间隔 t.penup() t.fd(5)def drawLine(draw ...

最新文章

  1. java 顺序栈_java用顺序栈实现数制转换 求完整程序!!
  2. 各色“独特的”数据中心安置法,藏太深了!
  3. (2)ARM Cortex-M3指令集
  4. 利用 Python 分析了某化妆品企业的销售情况,我得出的结论是?
  5. 在线生成大全(这里真的什么都有)
  6. 7-96 福到了 (15 分)
  7. SRAM6264(8K*8)
  8. Some Sites About .Net
  9. android 动态壁纸 例子,android 动态壁纸实例(1)【转】
  10. ORA12514问题
  11. win11在计算机管理中添加用户发现没有本地用户和组,命令方式添加用户以及查看用户
  12. 树莓派搭建LAMP和FTP服务器
  13. 名帖78 苏轼 小楷《金刚经》
  14. 多个containers 共用一个pvc_长兴PVC废料回收一斤多少钱,ps废料回收
  15. VC++ 利用CreateFile、ReadFile和WriteFile实现CopyFile
  16. 插座质检报告办理第三方检测
  17. GitChat · 软件工程 | 一小时教你学会 Maven 项目的构建与管理
  18. protobuf在网络编程中的应用思考
  19. 在 Oracle Enterprise Linux 和 iSCSI 上构建您自己的 Oracle RAC 11g 集群
  20. matlab仿真结果只显示5s时间,MATLAB仿真时间是怎么确定的啊?

热门文章

  1. LINUX 硬盘分区及文件系统
  2. Redis作为缓存服务器
  3. dynamic 找不到编译动态表达式所需的一种或多种类型。是否缺少引用?
  4. PAT 1012 数字分类 (20)
  5. pointers on c (day 1,chapter3)
  6. Cocos2d-x--开发参考资料
  7. POJ1887 DP水题儿
  8. postgreSQL源码分析——索引的建立与使用——各种索引类型的管理和操作(2)
  9. vue放大缩小div_vue 放大缩小 svg 图形(原理类似整个列表更新)
  10. python 仅保留数字_Python基本语法元素 | 语法元素分析