所谓七段数码管,即如下图示
这样绘制数码管的思路便比较清晰,即依次绘制七段线。我们以海龟的起始位置为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()