用Turtle绘制七段晶体管显示时间和日期

用Turtle绘制七段晶体管显示时间和日期

设计思路:

自定义绘制间隙函数—>自定义绘制单段横线函数—>自定义绘制七段晶体管数字0-9函数—>自定义绘制时间和日期函数—>设计并调用主函数

import turtle as t    
import time           //引入库函数
def drawGab():          //自定义函数绘制间隙
    t.penup()
    t.fd(5)      

def drawLine(line):     //自定义函数绘制单段横线
    drawGab()
    t.pendown() if line else t.penup()    //注意这里简写的if-else格式:<表达式1> if(条件) else <表达式2>
    t.fd(20)    //在决定是否抬起画笔后不要忘记向前移动
    drawGab()
    t.right(90)    //不要忘记转换角度

def drawDigit(digit):       //绘制七段晶体管数字0-9
    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)
    t.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)
    t.right(180)     //注意将角度变为原先的起始方向
    t.penup()       //抬笔!抬笔!抬笔!
    t.fd(20)          //向前移动,为绘制下一个数字做准备

def drawTime(time):       //自定义函数显示时间和日期
    t.pencolor("red")       //画笔颜色可以自定义
    for i in time:         //不要忘记for循环,以及需要注意for循环/if/自定义函数的格式
        if i=="+":
            t.write("年",font=("宋体",20,"normal"))    //设置字体格式,这里需要注意turtle.wrile()及font()函数的使用格式
            t.pencolor("red")
            t.fd(40)
        elif i=="-":
            t.write("月",font=("宋体",20,"normal"))
            t.pencolor("red")
            t.fd(40)
        elif i=="*":
            t.write("日",font=("宋体",20,"normal"))
            t.pencolor("purple")
            t.fd(70)
        elif i=="/":
            t.write("时",font=("宋体",20,"normal"))
            t.pencolor("green")
            t.fd(40)
        elif i=="&":
            t.write("分",font=("宋体",20,"normal"))
            t.pencolor("blue")
            t.fd(40)
        elif i=="#":
            t.write("秒",font=("宋体",20,"normal"))     //时间绘制已经结束,不需要再设置字体格式
        else:
            drawDigit(eval(i))    //注意这里需要把字符转换为数字

def main():       //设计主函数
    t.setup(1300,800,0,0)       //设置画布大小
    t.pensize(5)
    t.penup()           //控制画笔起始位置,为绘图做准备
    t.fd(-450)          //画笔左移
    drawTime(time.strftime("%Y+%m-%d*%H/%M&%S#",time.localtime()))      //调用时间函数获取时间并将时间值传给自定义函数drawTime()
    t.hideturtle()       //绘图结束后隐藏小乌龟
    t.done()

main()          //调用主函数
很抱歉,作为AI语言模型,我无法直接编写程序,但我可以提供一些思路和代码片段供参考。 思路: 1. 获取当前日期,并将其转换为字符串格式。 2. 针对每个数字,使用七段显示器的布局绘制数字。 3. 使用Python的turtle绘制七段显示器。 代码片段: ``` import datetime import turtle # 获取当前日期 now = datetime.datetime.now() date_str = now.strftime("%Y-%m-%d") # 定义数字的七段显示器布局,1表示亮,0表示灭 digit_layout = { "0": [1, 1, 1, 1, 1, 1, 0], "1": [0, 1, 1, 0, 0, 0, 0], "2": [1, 1, 0, 1, 1, 0, 1], "3": [1, 1, 1, 1, 0, 0, 1], "4": [0, 1, 1, 0, 0, 1, 1], "5": [1, 0, 1, 1, 0, 1, 1], "6": [1, 0, 1, 1, 1, 1, 1], "7": [1, 1, 1, 0, 0, 0, 0], "8": [1, 1, 1, 1, 1, 1, 1], "9": [1, 1, 1, 1, 0, 1, 1], "-": [0, 0, 0, 0, 0, 0, 1] } # 定义绘制七段显示器的函数 def draw_segment(x, y, segment_layout, size): turtle.penup() turtle.goto(x, y) turtle.pendown() if segment_layout[0]: turtle.forward(size) else: turtle.penup() turtle.forward(size) turtle.pendown() turtle.right(90) if segment_layout[1]: turtle.forward(size) else: turtle.penup() turtle.forward(size) turtle.pendown() turtle.right(90) if segment_layout[2]: turtle.forward(size) else: turtle.penup() turtle.forward(size) turtle.pendown() turtle.right(45) turtle.forward(size / 2) turtle.left(45) if segment_layout[3]: turtle.forward(size) else: turtle.penup() turtle.forward(size) turtle.pendown() turtle.left(45) turtle.forward(size / 2) turtle.right(45) if segment_layout[4]: turtle.forward(size) else: turtle.penup() turtle.forward(size) turtle.pendown() turtle.right(45) turtle.forward(size / 2) turtle.left(45) if segment_layout[5]: turtle.forward(size) else: turtle.penup() turtle.forward(size) turtle.pendown() turtle.right(45) if segment_layout[6]: turtle.forward(size) else: turtle.penup() turtle.forward(size) turtle.pendown() turtle.penup() turtle.goto(x + size * 2, y) turtle.pendown() # 设置turtle的画布大小和速度 turtle.setup(width=800, height=400) turtle.speed(0) # 绘制日期 size = 50 x = -300 y = 0 for digit in date_str: draw_segment(x, y, digit_layout[digit], size) x += size * 2 # 关闭turtle turtle.done() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值