编程语言
首页 > 编程语言> > 绘制七段数码管(python)

绘制七段数码管(python)

作者:互联网

        我们日常所见的霓虹灯很多都是由数码管所组成的,根据不同数码管的显色来显示不同的数字,那python语境下如何绘制数码管呢?

首先要明确数码管绘制的方式和方向:

 由此代码为:

#七段数码管的绘制

from turtle import *
from time import *

def Gap():  #预留数码管间隙
    pu()
    fd(6)
    
def Line(line): #绘制单段数码管
    pd() if line else pu()
    fd(40)
    Gap()
    right(90)
    
def Digit(digit):   #绘制七段数码管
    Line(True) if digit in [2,3,4,5,6,8,9] else Line(False)
    Line(True) if digit in [0,1,3,4,5,6,7,8,9] else Line(False)
    Line(True) if digit in [0,2,3,5,6,8,9] else Line(False)
    Line(True) if digit in [0,2,6,8] else Line(False)
    left(90)
    Line(True) if digit in [0,4,5,6,8,9] else Line(False)
    Line(True) if digit in [0,2,3,5,6,7,8,9] else Line(False)
    Line(True) if digit in [0,1,2,3,4,7,8,9] else Line(False)
    left(180)
    
    pu()    #为绘制后续数字确定位置
    fd(20)
    
def Date(date): #绘制日期
    
    for i in date:
        if i == '年':            
            write('年',font = ("楷体",22,"normal"))
            
            color("blue")
            fd(40)
        elif i == "月":            
            write('月',font = ("楷体",22,"normal"))
            
            color("orange")
            fd(40)
        elif i == "日":            
            write('日',font = ("楷体",22,"normal"))            
            ht()
            
        else:            
            Digit(eval(i))  #通过eval()将数字变为整数
            
def main():
    setup(800,300,20,20)    #设置画布
    
    pu()    #起笔位置
    fd(-310)
    
    pensize(6)
    color("red")
    Date(strftime("%Y年%m月%d日",gmtime()))    #获取当前日期
    done()
  
main()

效果图如下:

还可以通过微调笔的位置来调整文字的位置:

 

from turtle import *
from time import *

def Line(line):
    pd() if line else pu()
    fd(40)
    rt(90)

def Digit(digit):
    Line(True) if digit in [2,3,4,5,6,8,9] else Line(False)
    Line(True) if digit in [0,1,3,4,5,6,7,8,9] else Line(False)
    Line(True) if digit in [0,2,3,5,6,8,9] else Line(False)
    Line(True) if digit in [0,2,6,8] else Line(False)
    lt(90)
    Line(True) if digit in [0,4,5,6,8,9] else Line(False)
    Line(True) if digit in [0,2,3,5,6,7,8,9] else Line(False)
    Line(True) if digit in [0,1,2,3,4,7,8,9] else Line(False)
    lt(180)
    pu()
    fd(20)

def Date(date):
    for i in date:
        Digit(eval(i))

def main():
    setup(800,280)
    pu()
    fd(-320)
    
    width(6)
    
    color('red')
    Date(strftime('%Y',gmtime()))
    rt(90)
    fd(40)
    
    color('black')
    write('年',font=('宋体', 22, 'bold'))
    
    lt(90)
    fd(60)
    lt(90)
    fd(40)
    rt(90)
    
    color('red')
    Date(strftime('%m',gmtime()))
    rt(90)
    fd(40)
    
    color('blue')
    write('月',font=("宋体", 22, "bold"))

    lt(90)
    fd(60)
    lt(90)
    fd(40)
    rt(90)
    
    color('red')
    Date(strftime('%d',gmtime()))
    rt(90)
    fd(40)
    
    color('orange')
    write('日',font=("宋体", 22, "bold"))
    
    ht()
    done()
main()

效果图:

 

标签:digit,False,python,else,数码管,fd,Line,True,七段
来源: https://blog.csdn.net/iprobobo/article/details/122282565