Turtle绘图——七段数码管

一.效果图

Turtle绘图——七段数码管_第1张图片

二.程序分析

  • 用python作图就不得不提到turtle库,这是python的基本作图体系,非常适合新手入门,通过turtle库能够作出非常有趣的图形,我们一起试试看吧!
  • 七段数码管由7个基本线条组成 ,让不同数字显示不同的线条
    Turtle绘图——七段数码管_第2张图片
    首先需要通过import引用turtle库
import turtle #导入turtle库

想要绘制整个数字我们首先要能绘制一条线段,下面这个函数就是对一条线段进行绘制

def drawline(draw):
    drawgap() #每个线段之间的间隔
    turtle.pendown()  if draw else turtle.penup()
    turtle.fd(40) #每条线段长度为40
    drawgap()
    turtle.right(90) #每条线段画完毕就向右转,准备画下一步

通过分析可以发现每个数字都是由7段小线条构造而成,我们就选取上图的方向开始作画,所有数字都从1开始出发,不同的数字需要显示的线段是不同的,比如说2,它就需要6-7-1-4-3,其他数字同理。我们可以写一个根据数字画出不同位置的线段的函数,如果某个数字需要这条线段就在画布上画出它。否者就把画笔抬起跳过它。

def drawdigit(digit): #根据数字绘画线段
    drawline(True) if digit in [2,3,4,5,6,8,9] else drawline(False)#如果传入的数字与括号中的数字相匹配,就执行画画,否者就执行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) # 当执行完第四段,此时画笔朝向右,需要向左转90度才能继续执行第5段
    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): # 获得要输出的数字
    for i in date:
        drawdigit(eval(i)) #通过eval()函数将数字变为整数
def main(): #画布和画笔的基本设置
    turtle.pencolor('red') #画笔的颜色
    turtle.setup(800,300,200,200) #设置窗口大小和位置
    turtle.penup()
    turtle.fd(-300)   
    turtle.pensize(6) #设置画笔宽度
    drawdate('2020730')
    turtle.hideturtle()  #画图完毕后隐藏画笔
    turtle.done() #绘画完毕后保留画图窗口,否者窗口会自动消失

三.源代码

import turtle
def drawgap():
    turtle.penup()
    turtle.fd(6)
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):
    for i in date:
        drawdigit(eval(i))
def main():
    turtle.pencolor('red')
    turtle.setup(800,400,200,200)
    turtle.penup()
    turtle.fd(-300)
    turtle.pensize(6)
    drawdate('2020730')
    turtle.hideturtle()
    turtle.done()
main()

你可能感兴趣的:(Python)