日期"/>
python数码管显示日期
Hello,大家好,今年这个暑假大家全国各地时不时还爆发着疫情,也不敢出去玩,呆在家里就是surfing the Internet。鉴于大一刚刚结束,上课期间也学习了C语言,就想着暑假自学Python,这也就是题图上的那个小代码的诞生历程。y1s1,这个看上去是不是有点炫酷的亚子。
狠人话不多,先上一个动态的视频,看看效果~知乎视频www.zhihu
是不是挺好玩的呀~(不要你觉得,我觉得好玩就行♪(^∀^●)ノ
咳咳~言归正传,现在就来讲一波这个代码的实现过程吧
在开始写代码之前,我们要先来分析一下这个问题需要用到的知识,当思路清晰之后,我们再去写代码,可以做到事半功倍的效果。
我们可以把这个工作分成两个大的模块:为了能在屏幕中画出来数码管的形式,我们需要引入绘图标准库——turtle库
在实现绘图功能之后,我们还需要能够获得系统的时间
我们接下来写代码就从这两方面下手
import turtle
import time
这两行相信即使是编程小白也是可以看懂的,就是引入了两个模块,分别是turtle海龟库和时间库。
Python语言中我们要在开始引入我们需要用到的标准库的时候的语法是:
import
def drawGap():
turtle.penup()
turtle.fd(5)
这里定义了一个函数,Python语言中定义函数的格式是:
def ():
我们这个函数是为了绘制数码管之间的间隙,所以命名是drawGap()
在这里先介绍几个turtle库中的常用函数:
turtle.setup(650,350,200,200)
#启动窗口的大小和位置(注意这里参数的数值是指像素)
#(参数:窗口宽度,窗口高度(窗口大小参数),x坐标,y坐标(位置))
turtle.penup()
#海龟飞行 画笔抬起。将海龟从画布上抬起,接下来画笔的移动轨迹不会不会画在画布上
turtle.pendown()
#海龟爬行 画笔放下。将飞起的海龟重新放回画布,这样移动轨迹就留在了画布上
(上面这两个函数是一对函数,分别是抬起和放下,我们要绘制移动轨迹,就要turtle是在画布上爬行,要是不绘制轨迹,就要turtle飞起哦~~~
turtle.fd(k)
#海龟直线前进k个像素
turtle.circle(r,angle)
#海龟从当前位置以半径为r,行走一个angle角度的弧线,其中angle为正数则逆时针行走,负数则顺时针行走
turtle.pensize(d) =turtle.width(d)
#海龟腰围 画笔的宽度为d个像素
ps:与函数width()功能完全一样
turtle.pencolor("purple")
#海龟变色 画笔颜色
'''
pencolor()
参数可以有三种形式
1.颜色字符串 "purple"
2.RGB小数值 0.63,0.13.0.94
3.RGB的元组值 (0.63,0.13.0.94)
系统默认使用0-1的小数值来刻画RGB
.colormode(mode)可以改变小数值或整数值来表示RGB
1.0代表小数值模式
255代表整数值模式
'''
turtle.seth(-40)
#方向控制函数
seth()将海龟当前方向转变成绝对坐标下的角度(就按照我们的平面直角坐标系看就可以了)
此外还有两种海龟坐标转向的方法分别是:
turtlre.left(angle)
turtle.right(angle)
他们的作用就是看着在海龟当前行进方向下左转或右转一个角度。
这三个函数我们可以想象生活中的实例,seth()就像是我们知道的东南西北,不管我们人想那个方向走,这四个方向是不会变的。然后left()和right()就是我们自己行走过程的←和→,这方向是随着我们发生变化的。
好啦,turtle的函数就介绍到这里喽~
我们来看一下数码管怎么画:
首先要会绘制一条线,一条线包括两端的Gap()段和中间的实线段
def drawLine(draw):
drawGap()
turtle.pendown() if draw else turtle.penup()
turtle.fd(40)
drawGap()
turtle.right(90)
这里就是画线段的函数drawLine()
其中 turtle.pendown() if draw else turtle.penup()是而语句分支结构的紧凑形式,
表达的就是如果draw是True,我们就将turtle放到画布上,如果是False,我们将turtle抬起,那么我们走的路径就不会出现在画布上。
到这一步我们就可以实现七段数码管的任意段数的绘制,下面我们就画各种数字(0-9):
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)
这个地方需要我们对着各个数字,按照上面那个图片的1-7的顺序来绘制每个数字。
经过上面的三个函数,我们就实现了数字的绘制,我们的第一个任务就完成了,到这可以小小庆祝一波,我们已经完成了50%的工作♪(^∀^●)ノ
今天先到这里了有点小累,明天再继续,我先把源代码奉上:
import turtle
import time
def drawGap():
turtle.penup()
turtle.fd(5)
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 drawDate(date):
turtle.pencolor("gold") if date[-1]=='@' else turtle.pencolor("red")
for i in date:
if i=='-':
turtle.right(90)
turtle.fd(18)
turtle.left(90)
turtle.write('年',font=("Arial",18,"normal"))
turtle.pencolor("green")
turtle.left(90)
turtle.fd(18)
turtle.right(90)
turtle.fd(40)
elif i=='=':
turtle.right(90)
turtle.fd(18)
turtle.left(90)
turtle.write('月',font=("Arial",18,"normal"))
turtle.pencolor("blue")
turtle.left(90)
turtle.fd(18)
turtle.right(90)
turtle.fd(40)
elif i== '+':
turtle.right(90)
turtle.fd(18)
turtle.left(90)
turtle.write('日',font=("Arial",18,"normal"))
turtle.pencolor("brown")
turtle.left(90)
turtle.fd(18)
turtle.right(90)
turtle.fd(40)
elif i== '
turtle.right(90)
turtle.fd(18)
turtle.left(90)
turtle.write('时',font=("Arial",18,"normal"))
turtle.pencolor("purple")
turtle.left(90)
turtle.fd(18)
turtle.right(90)
turtle.fd(40)
elif i== '>':
turtle.right(90)
turtle.fd(18)
turtle.left(90)
turtle.write('分',font=("Arial",18,"normal"))
turtle.left(90)
turtle.fd(18)
turtle.right(90)
turtle.fd(40)
elif i== '@':
turtle.pencolor("gold")
turtle.right(90)
turtle.fd(18)
turtle.left(90)
turtle.write('秒',font=("Arial",18,"normal"))
turtle.left(90)
turtle.fd(18)
turtle.right(90)
else:
drawDigit(eval(i))
def main():
turtle.setup(1600,350,200,200)
turtle.speed("fastest")
turtle.penup()
turtle.fd(-600)
turtle.pensize(5)
drawDate(time.strftime('%Y-%m=%d+%H',time.localtime()))
drawDate(time.strftime('%S@',time.localtime()))
turtle.hideturtle()
turtle.done()
main()
你的赞同和喜欢可以留下一个嘛 (≧▽≦)
更多推荐
python数码管显示日期
发布评论