Python 之亮闪闪的七段数码管

导读:本篇文章讲解 Python 之亮闪闪的七段数码管,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

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

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

Python 之亮闪闪的七段数码管

         由此代码为:

#七段数码管的绘制

from turtle import *
from time import *

def Gap():  #预留数码管间隙
    pu()
    fd(4)
    
def Line(line): #绘制单段数码管
    Gap()
    pd() if line else pu()
    fd(40)
    Gap()
    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:
        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)
    
    width(6)
    color('red')
    Date(strftime('%Y年%m月%d日',gmtime()))    #获取当前日期
    done()
  
main()

        效果图如下:

Python 之亮闪闪的七段数码管

 

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

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('green')
    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('tomato')
    Date(strftime('%d',gmtime()))
    rt(90)
    fd(40)
    
    color('orange')
    write('日',font=('宋体', 22, 'bold'))
    
    ht()
    done()
main()

        效果图:

Python 之亮闪闪的七段数码管

 

        对于为 turtle 复位而重复出现的代码,可以通过定义函数以实现代码复用,如 Gap() re()

from turtle import *
from time import *

def Gap():
    pu()
    fd(4)
    
def Line(line):
    Gap()
    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)
    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 re():    #实现turtle复位
    lt(90)
    fd(60)
    lt(90)
    fd(40)
    rt(90)

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/106993.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!