作为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 这个数字在数码管中我们可以用这几下步骤。
落笔向前走一段像素。向右转 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()很快,工作就全部完成了, 让我们来看看运行结果吧
