“七段数码管绘制”实例详解
“七段数码管”问题分析:
我们在小的时候可以通过火柴进行一定从而出现新的数字,火柴摆放所形成的样式我们称之为数码管,如何通过计算机进行数码管的绘制呢?我们的思路如下:
基本思路:
步骤一:绘制单个数字对应的数码管
步骤二:获得一串数字,绘制对应的数码管
步骤三:获得当前系统时间,绘制对应的数码管。
我们按照步骤进行一步步的详细进行。
步骤一:绘制单个数字对应的数码管
当我们绘制一个8的数码管的时候,我们需要七段数码管,而七段数码管由七个基本线条组成,这七段数码管可以有固定顺序,不同数字需要的数码管也不相同。我们根据函数去实现单个数字的数码管的绘制.
代码如下所示:
import turtle def drawLine(draw): #绘制单段数码管turtle.pendown() if draw else turtle.pendown()turtle.fd(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.fd(20)
以上代码里面,我们首先根据drawLine绘制了一条数码管,之后调用这个函数,进行数码管的绘制,他的起点为八数码管的左边中间连接点。海龟绘图时,调用drawLine函数,绘制一条数码管后,进行右转,即为1,之后按方向再画再右转,进行相同操作四次后,画出了八的半个,此时海龟的头在第四次画完后进行了右转,此时方向为开始方向,即向右,为了继续调用drawLine函数,我们需要将海龟的头左转,然后画出一条线后再进行右转,然后调用三次后,即画出8,然后再左转180度,即回到初始前进方向。
其中的digit函数为由于在画数码管的时候,每个字所经过的边数不同,所以我们在绘制时可以判断该数字的数码管是否经过该边再选择进行调用。根据参数digit来决定如何绘制,对应的数字取值范围为0~9.
步骤二:获得一串数字,绘制对应的数码管
移动起点,绘制第二个
代码示例如下:
import turtle #调用turtle库 def drawLine(draw): #这段函数实现的是画一个数码管turtle.pendown() if draw else turtle.penup() #如果这个数码管画了则落下,否则抬起。turtle.fd(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.fd(20) def drawDate(date): #设置时间函数,将时间进行逐一遍历输出。for i in date: #将一串字符串拆分成一个个字符的函数drawDigit(eval(i)) #用评估函数去掉字符串,获得整数。即将数字变成整数, def main():turtle.setup(800,350,200,200) #当前画布的大小turtle.penup()turtle.fd(-300) #当前画笔初始绘制所在的位置turtle.pensize(5)drawDate('20181010') #调用drawDate参数,给他赋予一个参数。turtle.hideturtle()turtle.done() main()
运行界面如下:
步骤三:获得当前系统时间,绘制对应的数码管。
使用time库获得系统当前时间
增加年月日标记
年月日颜色不同。
代码示例如下:
import time import turtle #调用turtle库 def drawLine(draw): #这段函数实现的是画一个数码管drawGap()turtle.pendown() if draw else turtle.penup() #如果这个数码管画了则落下,否则抬起。turtle.fd(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.fd(20) def drawGap():turtle.penup()turtle.fd(5) def drawDate(date): #设置时间函数,将时间进行逐一遍历输出。turtle.pencolor("red") #设置画笔颜色。for i in date:if i =='-':turtle.write('年',font=("Arial",18,"normal"))turtle.pencolor("green")turtle.fd(40)elif i=='=':turtle.write('月', font=("Arial", 18, "normal"))turtle.pencolor("blue")turtle.fd(40)elif i == '+':turtle.write('日', font=("Arial", 18, "normal"))turtle.pencolor("red")turtle.fd(40)else :drawDigit(eval(i)) def main():turtle.setup(800,350,200,200) #当前画布的大小turtle.penup()turtle.fd(-300) #当前画笔初始绘制所在的位置turtle.pensize(5)drawDate(time.strftime('%Y-%m=%d+',time.gmtime())) #调用drawDate参数,给他赋予一个参数。其中gmtime为获取当前系统时间#time.strftime为时间的格式化进行输出,用来定义输出效果。turtle.hideturtle()turtle.done() main()
运行界面如下:
整体思路如下所示:
我们通过这个示例回顾一下,首先我们将画一个数码管的函数drawLine编写出来,之后我们又设立了一个函数drawDigit进行多段数码管的绘制,在这个函数drawDigit里面进行调用drawLine,而且通过对数码管的边的需求的分析,我们通过参数digit去判断所绘制的数码管需要哪段数码管。
之后当绘制出一个独立的数码管后,我们进行绘制给定时间的数码管,我们定义了drawDate函数,通过for循环去遍历该字符串的每一个数字进行调用drawDigit函数去绘制每段数码管。而且由于要进行实际运行,我们编写了主函数,确定了画布大小与画笔宽度,同时在主函数里面进行了drawDate函数的调用。主函数里面调用了drawDate函数,而drawDate函数里面又调用了drawDigit函数,而drawDidit函数里面又调用了drawLine函数,使代码成功运行起来。
之后我们进行获取当前系统时间的数码管的输出,这时,我们进行修改了drawDate函数,我们通过对循环遍历得到的反馈的不同,通过使用if-elif结构进行输出不同格式的数码管。与此同时,我们在主函数里面确定了系统时间的获取方法即输出格式。进行代码的调用,使程序成功运行起来。
举一反三:
理解方法思维:
模块化思维:确定模块接口,封装功能
规则化思维:抽象过程为规则,计算机自动执行
化繁为简:将大功能变为小功能组合,分而治之
应用问题的扩展:
绘制带小数点的七段数码管
带刷新的时间倒计时效果
绘制高级的数码管
“七段数码管绘制”实例详解相关推荐
- python:七段数码管绘制数字详解
python:七段数码管绘制数字详解 七段数码管由七段数码管拼接而成,每段有亮或不亮两种情况.这里,先给出程序的全部代码,如下所示. 定义了drawDigit()函数,该函数根据输入的数字绘制七段数码 ...
- python画椭圆-python opencv圆、椭圆与任意多边形的绘制实例详解
圆形的绘制 : OpenCV中使用circle(img,center,radius,color,thickness=None,lineType=None,shift=None)函数来绘制圆形 impo ...
- 10 实例:七段数码管绘制
1.问题分析 可以用turtle画图体系进行画图,让特定的数码管的横杠亮就可以表示不同的数字. 2.绘制结果分析 3.七段数码管绘制实例 3.1 基本思路 3.2 步骤 步骤1 import turt ...
- 用python绘制漂亮的图形-用python绘制图形的实例详解
1.环境系统:windows10 python版本:python3.6.1 使用的库:matplotlib,numpy 2.numpy库产生随机数几种方法import numpy as npnumpy ...
- python画直方图成绩分析-python plotly绘制直方图实例详解
计算数值出现的次数 import cufflinks as cf cf.go_offline() import numpy as np import pandas as pd set_slippage ...
- python如何做散点图-matplotlib在python上绘制3D散点图实例详解
大家可以先参考官方演示文档: 效果图: ''' ============== 3D scatterplot ============== Demonstration of a basic scatte ...
- python画三维温度散点图-matplotlib在python上绘制3D散点图实例详解
大家可以先参考官方演示文档: 效果图: ''' ============== 3D scatterplot ============== Demonstration of a basic scatte ...
- python绘制散点图-matplotlib在python上绘制3D散点图实例详解
大家可以先参考官方演示文档: 效果图: ''' ============== 3D scatterplot ============== Demonstration of a basic scatte ...
- python绘制3d坐标轴_matplotlib在python上绘制3D散点图实例详解
大家可以先参考官方演示文档: 效果图: ''' ============== 3D scatterplot ============== Demonstration of a basic scatte ...
最新文章
- 虫趣:BAD POOL CALLER (par1: 0x20)
- 华南理工专科计算机随堂联系,华南理工大学网络教育计算机基础随堂练习第三章...
- conda deactivate python3_conda进行python环境隔离
- windows安装多个maven_全网最容易理解的Maven安装、配置、集成演示
- 一篇真正教会你开发移动端页面的文章
- 基环树DP(bzoj 1040: [ZJOI2008]骑士)
- Mac电脑:调整 VMware中Windows10 屏幕分辨率(解决win10与Mac界面切换后,分辨率改变问题)
- 纽微特荒唐事:都知道是找人顶罪,竟没人敢指正
- 据说这些基础知识90%的人都回答错了,你呢?
- 关于idea中运行maven项目报错显示找不到包或符号的问题——终极方案
- clion连接mysql,使用 CLion 调试 mysql 源码
- android webview 魅族,魅族 Flyme 系统出现大面积应用闪退问题,提供临时解决方法...
- R语言 正态性检验 Q-Q plot shapiro test
- webpack随笔04-webpack5压缩jscss
- android华为隐藏底部虚拟按键,沉浸式状态栏/华为虚拟按键隐藏
- 【论文笔记】面向机载应用的多传感器图像融合技术综述
- Matlab 读取欧空局*.N1卫星遥感图像
- MySQL主从同步的原理
- android Retrofit下载图片
- 罗雪娟(Luo Xuejuan)