怎样使用python完成一段小小的数码管的绘制
- 非常高兴可以第一次在上面完成我的第一个博客
- 数码管的绘制:任务功能拆分
- 所要引用的函数和使用方法
- 分析程序结构:单个数码管的绘制。
- 实例==8==的绘制
- 其他数码管的绘制
- 年月日的判断问题
- 开始绘制一段完整的数码管数字——主函数的定义
- 所有代码
- 结尾
非常高兴可以第一次在上面完成我的第一个博客
作为python初学者,我开始完成第一个有关于引用库的第一次练习
数码管的绘制:任务功能拆分
首先我们要对于这个任务进行功能拆分,怎样进行数码管绘制时间呢?
- 第一步 ,怎样绘制一段数码管。
- 第二部 ,数码管之间的间隔怎么解决?
- 怎样完成对于时间的引用。
- 编写程序。
所要引用的函数和使用方法
库名 turtlex
import turtle
turtle.speed(speed)#画笔速度
turtle.penup()#抬笔
turtle.pendown()#落笔
turtle.pensize(pensize)#画笔的粗细程度,可选,输入整数
turtle.fd(length)#画笔向前运行,距离为length
turtle.right(angele)#画笔转向(向右边转向),转向度数为:angle
turtle.pencolor(color)#改变画笔的颜色,在这里可以选择输入
turtle.hideturtle()#隐藏画笔,画笔实在是太丑了。。。
turtle.done()#停笔,但是不关闭窗口,少了这个代码执行完毕就会关闭turtle窗口
在这里我一般都把它设置为0,也就是最快
'''讲实话,python的绘图速度简直太慢了搞成0应该就可以在我睡觉之前运行完成了吧[doge]'''
库名 time
import time
time.strftime(tpl,ts)
#在这里面有两个参数,第一个参数:tpl. tpl是一段格式化的模板字符串参数,用来定义输出的效果。
#第二个参数 ts 这个是计算机可以识别的时间参数,我们利用time.time()函数来获取。这个函数我们可以这样去理解:我们在tpl这个模板字符串中按模板返回ts的值。
time.gmtime()#获取当前系统的时间,返回一段计算机可以识别的时间。
#返回实例 python idle 环境下操作
>>> time.gmtime()
time.struct_time(tm_year=2020, tm_mon=10, tm_mday=9, tm_hour=14, tm_min=20, tm_sec=41, tm_wday=4, tm_yday=283, tm_isdst=0)
分析程序结构:单个数码管的绘制。
实例8的绘制
我们按 8这个数字来分析
8 这个数字在数码管中我们可以用这几下步骤。
- 落笔
- 向前走一段像素。
- 向右转 90。
- 重复1~3三个步骤
- 重复1~3三个步骤
- 重复1~3三个步骤
- 向左转90。
- 重复1~3三个步骤
- 重复1~3三个步骤
- 重复1~3三个步骤
- 重复1~3三个步骤
#代码如下
def drowGap(): #设置一个一个数码管之间的间距
turtle.penup()
turtle.fd(5)
def drawLine(draw): #落笔向前走40 再右转
drowGap()
turtle.pendown() if draw else turtle.penup()
turtle.fd(40)
drowGap()
turtle.right(90)
drawLine(True)
drawLine(True)
drawLine(True)
drawLine(True)
turtle.left(90)
drawLine(True)
drawLine(True)
drawLine(True)
drawLine(True)
好了现在我们知道了怎样去完成8 的绘制,来看看怎样绘制其他的数码管呢?
其他数码管的绘制
如果说,绘制8的时候我们在所有的数码管上面都留下了痕迹,那么我们可以这样地理解,绘制9的时候,我们只需要在其中步骤4抬笔。
按照这个理念,我们将函数功能拆解。
每走一步,转向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) #向左边转向180度
turtle.penup() #抬笔
turtle.fd(20) #向前走20像素
这个函数完成了单个数码管数字的绘制。
注意:我们在最后 turtle.fd(20) 是为了使得数码管数字向右平移一段像素,接下来我们每绘制一个数码管数字就会向右平移一段像素,这样的话,我们就会输出十分美观的数码管数字了。
年月日的判断问题
对于年月日,我们可以这样来描述问题,当获得一段已经由 time.strftime() 函数填充完毕的模板字符串的时候,只需要找出其中的标识符,就可以完成对于年,月,日的判断,在这里,我们对于年月日分别用以下符号进行标识。
年 | “-” |
月 | “+” |
日 | “=” |
判断代码如下
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.pencolor()
turtle.write("月", font=("Arial", 18, "normal"))
turtle.fd(40)
elif i == "+": #如果出现标识符“+“,就会返回”日“汉字
turtle.write("日", font=("Arial", 18, "normal"))
turtle.pencolor('blue')
turtle.fd(40)
else: #对于其他的字符串中的元素,我们不做处理,对其进行去引号处理,也就是返回一段数码管。
drawDigit(eval(i))
开始绘制一段完整的数码管数字——主函数的定义
在这里我们对数码管进行集成化处理
def main():
turtle.setup(800, 350, 200, 200)#建立起来一个长为800像素,宽为350像素的海龟绘图框,它的位置相对于屏幕坐标为200,200
turtle.penup()
turtle.fd(-300)
turtle.pensize(5)
drawDate(time.strftime('%Y-%m=%d+', time.gmtime()))
turtle.hideturtle()
turtle.done()
所有代码
import turtle
import time #库的引用
turtle.speed(0)
def drowGap(): #设置一个一个数码管之间的间距
turtle.penup()
turtle.fd(5)
def drawLine(draw): #落笔向前走40 再右转
drowGap()
turtle.pendown() if draw else turtle.penup()
turtle.fd(40)
drowGap()
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) #向左边转向180度
turtle.penup() #抬笔
turtle.fd(20) #向前走20像素
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.pencolor()
turtle.write("月", font=("Arial", 18, "normal"))
turtle.fd(40)
elif i == "+": #如果出现标识符“+“,就会返回”日“汉字
turtle.write("日", font=("Arial", 18, "normal"))
turtle.pencolor('blue')
turtle.fd(40)
else: #对于其他的字符串中的元素,我们不做处理,对其进行去引号处理,也就是返回一段数码管。
drawDigit(eval(i))
def main():
turtle.setup(800, 350, 200, 200)#建立起来一个长为800像素,宽为350像素的海龟绘图框,它的位置相对于屏幕坐标为200,200
turtle.penup()
turtle.fd(-300)
turtle.pensize(5)
drawDate(time.strftime('%Y-%m=%d+', time.gmtime()))
turtle.hideturtle()
turtle.done()
main()
结尾
很快,工作就全部完成了,
让我们来看看运行结果吧