python实现数码管绘制的自我练习

    科技2026-04-09  6

    怎样使用python完成一段小小的数码管的绘制

    非常高兴可以第一次在csdn上面完成我的第一个博客数码管的绘制:任务功能拆分所要引用的函数和使用方法 分析程序结构:单个数码管的绘制。实例==8==的绘制其他数码管的绘制年月日的判断问题 开始绘制一段完整的数码管数字——主函数的定义所有代码结尾

    非常高兴可以第一次在csdn上面完成我的第一个博客

    作为python初学者,我开始完成第一个有关于引用库的第一次练习

    数码管的绘制:任务功能拆分

    首先我们要对于这个任务进行功能拆分,怎样进行数码管绘制时间呢?

    第一步 ,怎样绘制一段数码管。第二部 ,数码管之间的间隔怎么解决?怎样完成对于时间的引用。编写程序。

    所要引用的函数和使用方法

    库名 turtle

    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()

    结尾

    很快,工作就全部完成了, 让我们来看看运行结果吧

    Processed: 0.009, SQL: 9