python 七段数码管 实现显示当前时间

所谓七段数码管,即如下图示

python 七段数码管 实现显示当前时间_第1张图片这样绘制数码管的思路便比较清晰,即依次绘制七段线。我们以海龟的起始位置为g段的左端点,通过turtle.fd(40)让海龟前进40个像素即可绘制g段。接下来,通过turtle.right(90);turtle.fd(40)让海龟右转90度后,前进40个像素即绘制c段,同理依次绘制d段、e段、f段、a段、b段。

def drawline(draw):
    draw_gap()		#每次绘制一小段后,留一个空隙,比较美观
    turtle.pendown() if draw else turtle.penup()
    turtle.fd(40)
    turtle.right(90)
def draw_gap():
    turtle.up()
    turtle.fd(5)

但是,并不是每一个数字都需要这七段,因此我们可以通过<表达式1> if <条件> else <表达式2>函数来遍历选择。

def draw_choice(i):
    drawline(True) if i in [2, 3, 4, 5, 6, 8, 9] else drawline(False)	#2,3,4,5,6,8,9均需要g段,所以调用上面的drawling函数,绘制线段
    drawline(True) if i in [0, 1, 3, 4, 5, 6, 7, 8, 9] else drawline(False)
    drawline(True) if i in [0, 2, 3, 5, 6, 8] else drawline(False)
    drawline(True) if i in [0, 2, 6, 8] else drawline(False)
    turtle.left(90)	#绘制完e段后,使海龟左转90段,使其绘制剩余的f段、a段、b段。
    drawline(True) if i in [0, 4, 5, 6, 8, 9] else drawline(False)
    drawline(True) if i in [0, 2, 3, 5, 7, 8, 9] else drawline(False)
    drawline(True) if i in [0, 1, 2, 3, 4, 7, 8, 9] else drawline(False)
    turtle.left(180)	#绘制完b段后,使海龟左转或右转180度,回到原始方向,以便绘制下一个数字。
    turtle.up()	#抬起画笔
    turtle.fd(20)		#前进20个像素,到达绘制下一个数字的位置

为了更加美观,我们在时间的后面分别加上时、分、秒

def draw_date(date):    #date为日期,格式为"%Y-%m=%d+"
    for i in (date):
        if i == "-":
            turtle.pencolor("red")
            turtle.write("点",move=False,font=('arial',18,'normal'))
            turtle.up()
            turtle.fd(40)
        elif i == "=":
            turtle.pencolor("blue")
            turtle.write("分", move=False, font=('arial',18, 'normal'))
            turtle.penup()
            turtle.fd(40)
        elif i == "+":
            turtle.color("green")
            turtle.write("秒", move=False, font=('arial',18, 'normal'))
            turtle.penup()
            turtle.fd(40)
        else:
            draw_choice(eval(i))	#如未遍历到上述符号,则绘制数字

画线段函数,怎么画的函数都准备好了,接下来就是任务是获取当前时间,从而利用上面两个函数,绘制出当前时间

def main():
    turtle.setup(800,350,200,200)	#设置窗口
    turtle.penup()
    turtle.bk(300)
    turtle.pensize(5)
    draw_date(time.strftime("%H-%M=%S+",time.localtime()))	#获取本地时间,转化为%H-%M=%S+格式
    turtle.hideturtle()	#隐藏海龟
    turtle.done()		#绘制完毕后,使窗口停留
main()	#调用main()函数

完整代码如下:

import turtle
import time
def draw_gap():
    turtle.up()
    turtle.fd(5)
def drawline(draw):
    draw_gap()
    turtle.pendown() if draw else turtle.penup()
    turtle.fd(40)
    turtle.right(90)
 def draw_choice(i):
    drawline(True) if i in [2, 3, 4, 5, 6, 8, 9] else drawline(False)
    drawline(True) if i in [0, 1, 3, 4, 5, 6, 7, 8, 9] else drawline(False)
    drawline(True) if i in [0, 2, 3, 5, 6, 8] else drawline(False)
    drawline(True) if i in [0, 2, 6, 8] else drawline(False)
    turtle.left(90)
    drawline(True) if i in [0, 4, 5, 6, 8, 9] else drawline(False)
    drawline(True) if i in [0, 2, 3, 5, 7, 8, 9] else drawline(False)
    drawline(True) if i in [0, 1, 2, 3, 4, 7, 8, 9] else drawline(False)
    turtle.left(180)
    turtle.up()
    turtle.fd(20)
 def draw_date(date):    #date为日期,格式为"%Y-%m=%d+"
    for i in (date):
        if i == "-":
            turtle.pencolor("red")
            turtle.write("点",move=False,font=('arial',18,'normal'))
            turtle.up()
            turtle.fd(40)
        elif i == "=":
            turtle.pencolor("blue")
            turtle.write("分", move=False, font=('arial',18, 'normal'))
            turtle.penup()
            turtle.fd(40)
        elif i == "+":
            turtle.color("green")
            turtle.write("秒", move=False, font=('arial',18, 'normal'))
            turtle.penup()
            turtle.fd(40)
        else:
            draw_choice(eval(i))
 def main():
    turtle.setup(800,350,200,200)
    turtle.penup()
    turtle.bk(300)
    turtle.pensize(5)
    draw_date(time.strftime("%H-%M=%S+",time.localtime()))
    turtle.hideturtle()
    turtle.done()
main()

程序运行结果如下:
python 七段数码管 实现显示当前时间_第2张图片

你可能感兴趣的:(python 七段数码管 实现显示当前时间)