基于turtle库的七段数码管绘制
·文章结构
>样例及概览
>函数框架分析
>功能发展
·样例及概览
七段数码管,是信号灯、电子表等很多设备的显示形式。而利用python的turtle库,我们也可以模拟着写出一个动态生成的七段数码管,用来显示日期、时间等等任何可以通过数字展示的东西。
下面的例子展示了一个基本的日期显示功能。
# 日历(自定义日期、七段电子管实现)
import turtle as t
#前进步长
FORWARD = 40
#间隔步长
INTERVAL = 20
def drawLine(k):
t.pendown() if k else t.penup()
t.fd(FORWARD)
t.right(90)
return
def drawNum(k):
#观察各字符在数码管中的展现形式,一共七条线,而有些数字在其中某条线时不必绘制
drawLine(True) if k in [2,3,4,5,6,8,9] else drawLine(False)
drawLine(True) if k in [1,3,4,5,6,7,8,9,0] else drawLine(False)
drawLine(True) if k in [2,3,5,6,8,9,0] else drawLine(False)
drawLine(True) if k in [2,6,8,0] else drawLine(False)
t.left(90)
drawLine(True) if k in [4,5,6,8,9,0] else drawLine(False)
drawLine(True) if k in [2,3,5,6,7,8,9,0] else drawLine(False)
drawLine(True) if k in [1,2,3,4,7,8,9,0] else drawLine(False)
t.left(180)
t.penup()
t.fd(INTERVAL)
t.pendown()
return
def main():
inf = "20190413"
#init
t.setup(800,400,0,0)
t.pensize(10)
t.pencolor("red")
t.penup()
t.seth(180)
t.fd(320)
t.pendown()
t.seth(0)
#control color and show character
cnt = 0
for i in inf:
cnt += 1
drawNum(eval(i))
if cnt == 4:
#set character with color
t.pencolor("black")
t.write("年")
t.penup()
t.fd(INTERVAL)
t.pendown()
#recover and transform color
t.pencolor("green")
elif cnt == 6:
#set character with color
t.pencolor("black")
t.write("月")
t.penup()
t.fd(INTERVAL)
t.pendown()
#recover and transform color
t.pencolor("pink")
elif cnt == 8:
#set character with color
t.pencolor("black")
t.write("日")
t.done()
return main()
·函数框架分析
运用计算思维,我们很容易想出:只要能实现一个数字的七段数码管绘制,那么我们就可以通过代码复用将其扩展至任意个数的七段数码管绘制。
「此时,我们将总任务拆封成了两个小任务:1)单个数字七段数码管绘制。2)重复多次用以绘制多个数字。」
针对2),我们简单构想,只需要一个字符串用来存放数字,然后用循环来遍历它,并将current value穿到1)所对应的方法中去就好了
针对1),我们再次将问题分治。
「新1)画出七段数码管其中的一段,即一条线。新2)重复七次用以绘制七段数码管。」
针对新2),我们首先要把七段数码管按一定顺序分解为七笔。
针对新1),我们可以通过penup()、pendown()函数来控制是否画出这一笔。而在除了第四步后每画过一笔,我们就让其右转90度,为画下一笔作准备。
完成以上分析后,我们就已经解出了这个问题,只需要用代码实现它。
·发展
在主函数main()中,我们可以将预定义的字符串inf更改为一个自定义模块。
在主函数main()中,我们可已修改年、月、日为时、分、秒,用以显示时刻。
引入time库来实时获取日期及时间信息。
在主函数main()的for循环中设置了不同数字所对应的颜色,可以自由更改为其他的。
基于turtle库的七段数码管绘制的更多相关文章
- 使用Python的turtle库实现七段数码管绘制
七段数码管绘制:七段数码管是由7段数码管拼接而成,每段有亮或不亮两种情况,改进的七段数码管还包括一个小数点位置.七段数码管能形成2=128种状态,其中部分状态能够显示易于人们理解的数字或字母含义.因此 ...
- #Python语言程序设计Demo - 七段数码管绘制
Python设计七段数码管绘制 单个数码管效果: 设计总数码管效果: Pyhton 编程: #七段数码管绘制 import turtle as t import time as T def drawG ...
- 【Python】七段数码管绘制问题
问题分析: 绘制路径: 代码: import turtle #引入绘图库turtle def drawLine(draw): #绘制单段数码管 turtle.pendown() if draw els ...
- Python入门基础:七段数码管绘制
1.在学习Python的过程中,运用所学的一些基础知识,进行一些简单的编程,可以收获很多乐趣.在生活中,LED灯无处不在,荧幕显示的广告词,给我们呈现出动态的视觉效果.下面,则以最简单的显示日期为例, ...
- Python:turtle库的使用及图形绘制
目录 一.绘制一个八边形 二.绘制一个八角图形 三.简述问题 四.循环程序设计 五.绘制一个自己喜欢的图形 一.绘制一个八边形 使用turtle库,绘制一个八边形 代码: from turtle im ...
- Python学习之turtle库和蟒蛇绘制程序
Python的函数库 Python语言与C语言Java类似,可以大量使用外部函数库包含在安装包中的函数库:. 比如math, random, turtle等其他函数库,其他函数库用户根据代码需求自行安 ...
- python turtle库的几个小demo
一.先上图 一个同切圆和五角星 上代码 import turtle #同切圆 turtle.pensize(2) turtle.circle(10) turtle.circle(40) turtle. ...
- Python中turtle库的使用
Turtle图形库 Turtle库是Python内置的图形化模块,属于标准库之一,位于Python安装目录的lib文件夹下,常用函数有以下几种: 画笔控制函数 penup():抬起画笔: pendow ...
- python 利用turtle库绘制七段数码管的方式,绘制当前事件(时分秒00:00:00)
# coding:utf-8# 绘制七段数码管,显示当前时间import timeimport turtle as tt # 绘制间隔def drawGap(): tt.penup() tt.fd(3 ...
随机推荐
- 自定义实现字符串string的接口
用char*管理String类的内存,new动态分配,在析构函数中delete char*指向的new出来的内存,一个string类需要实现那些接口可参考标准库里的string: http://ww ...
- python基础实现tcp文件传输
准备工作,实现文件上传需要那些工具呢? socket(传输).open()(打开文件).os(读取文件信息),当然还有辅助类sys和json,下面我们开始吧 import socket,sys imp ...
- 带有headers的urllib库爬取
#请求头 #1.引入模块 from urllib import request #2.操作 #(1)定义目标url base_url = "http://www.langlang2017.c ...
- Linux系统ubuntu17安装jdk8并配置环境变量
上班多年,一直没有真正在Linux下开发过,没有捣鼓到Linux服务器,成为憾事.最近由于想学习Python,于是开始看书,学习Linux,学习shell编程. 选择Linux,先从最简单的ubunt ...
- 学习contiki需要知道的一些概念和注意事项
概念: 1.宏:所谓宏,就是一些命令组织在一起,作为一个单独命令完成一个特定任务.Microsoft Word中对宏定义为:“宏就是能组织到一起作为一独立的命令使用的一系列word命令,它能使日常工作 ...
- css怎么解决表格边框线重复问题
<ul> <li><a href="#">1</a></li> <li><a href="# ...
- xterm.js的深入学习
demo <template> <div id="app" class="app-box">Hello</div> < ...
- Linux 核心编译与管理
一般情况下,不需要重新编译核心,除非以下特有的用途 [root@localhost ~]# wget ftp://ftp.twaren.net/pub/Unix/Kernel/linux/kernel ...
- android中返回数据给上一个活动,可以用来回显数据
(一)who简介:没错,就是startActivityForResult()方法,这个方法用来在活动被销毁的时候返回数据给上一个方法.参数说明: startActivityForResult(inte ...
- 解析mysql慢日志
mysql慢日志太多,需要分析下具体有哪些慢日志 mysql可以直接记录所有慢日志,现在的问题是将日志文件sql进行去重 想了老半天该怎样将sql的查询字段去掉进行排序,没有get到重点.后来发现my ...