7段数码管倒计时,因为受turtle画笔速度限制,显示效果可能不如直接打印数字

本文介绍了一种使用Python的turtle模块实现7段数码管倒计时的方法。通过定义函数绘制不同状态的线条来模拟7段数码管的显示效果,并结合time模块实现了倒计时功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

7段数码管倒计时,因为受turtle画笔速度限制,显示效果可能不如直接打印数字,代码如下:

import turtle as t
import time

def drawgap(ft):
    t.penup()
    t.fd(0.11*ft)

def drawline(e,ft):
    drawgap(ft)
    t.pendown() if e else t.penup()
    t.fd(0.78*ft)
    drawgap(ft)
    t.right(90)

def drawdigit(digit,ft):
    drawline(True,ft) if eval(digit) in [2,3,4,5,6,8,9] else drawline(False,ft)
    drawline(True, ft) if eval(digit) in [0,1,3,4,5,6,7,8,9] else drawline(False, ft)
    drawline(True, ft) if eval(digit) in [0,2,3,5,6,8,9] else drawline(False, ft)
    drawline(True, ft) if eval(digit) in [0,2,6,8] else drawline(False, ft)
    t.left(90)
    drawline(True, ft) if eval(digit) in [0,4,5,6,8,9] else drawline(False, ft)
    drawline(True, ft) if eval(digit) in [0,2,3,5,6,7,8,9] else drawline(False, ft)
    drawline(True, ft) if eval(digit) in [0,1,2,3,4,7,8,9] else drawline(False, ft)
    t.right(180)
    t.fd(-ft)

def drawempty(ft):
    t.pendown()
    for j in range(4):
        t.fd(ft)
        t.right(90)
    t.left(90)
    for k in range(3):
        t.fd(ft)
        t.right(90)
    t.right(180)
    t.fd(-ft)

ft=100

t.pencolor('red')
t.pensize(0.12*ft)
t.setup(1000,450)

countnum=3
numstr=(['']*countnum)
for i in range(countnum):
    numstr[i]=str(countnum-i)
dur=(['']*countnum)
i=-1
t.speed(99*99)
#校正数字显示位置
t.penup()
t.fd(-0.5*ft)

#开始计时
for each in numstr:
    starte=time.perf_counter()
    drawdigit(each,ft)
    t.clear()
    i+=1
    dur[i]=time.perf_counter()-starte
    time.sleep(1-dur[i])

#校正直接打印数字的位置
t.right(90)
t.fd(ft)
t.left(90)
j=-1
for each in numstr:
    start=time.perf_counter()
    j+=1
    t.write(countnum-j,font=('Arial',ft,'normal'))
    time.sleep(0.7)
    t.clear()
    dur=time.perf_counter()-start
    time.sleep(1-dur)

#打印计时结束的提示信息
t.penup()
t.fd(-ft*2)
t.pencolor('green')
for i in range(5):
    t.clear()
    time.sleep(0.3)
    t.write('倒计时结束',font=('SimHei',int(ft*0.8),'italic'))
    time.sleep(0.4)
t.done()

结果为动画形式.

转载于:https://www.cnblogs.com/zhangziyan/p/9192773.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值