文章目录

  • 七段数码管程序设计目的
  • 绘制思路
  • 1、绘制一个数码管的一条线
  • 2、绘制七条线,也就是七段数码管
  • 3、优化数码管(在线前后增加像素)
  • 4、给定字符串,绘制多个数码管
  • 5、主函数的定义(获得系统时间)
  • 6、七段数码管完整代码
  • 7、可以刷新的倒计时效果

七段数码管程序设计目的

七段数码管程序的目的是为了得到类似于下图的一种数字计时方式,最常用的用途就是记录时间,可能是年月日,也可能是小时分钟等。
下面就针对我们的目的对程序一步步进行编写

绘制思路

  1. 获得单个数字对应的数码管
  2. 获得一串数字,绘制对应的数码管
  3. 获得当前系统时间,绘制对应的数码管

1、绘制一个数码管的一条线

想要画七段数码管,我们首先要绘制一段数码管,我们可以定义一个函数drawline(),可以绘制一条线

绘制一条线包含两种情况

  • 真实的绘制一条线
  • 海龟只是移动过去,并不真实的绘制线条
  • 借助if-else,完成需要功能
import turtle
def drawline(draw):turtle.pendown()if draw else turtle.penup()turtle.fd(40)turtle.right(90)

2、绘制七条线,也就是七段数码管

  • 七段数码管有七个基本线条组成
  • 具有固定的顺序
  • 不同数字显示不同线条组合


定义一个drawdigit()函数,参数digit代表我们想要绘制的数字是多少。如果是8,7条线都需要绘制;是0就不需要绘制第一条线。

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,4,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)

Notice:
在绘制四条直线后,turtle回到原点,此时需要再转回90度,也就是左转90度,直接继续前进,然后再继续绘制三条线段。

3、优化数码管(在线前后增加像素)

def drawgap():turtle.penup()turtle.fd(5)
def drawline(draw):drawgap()turtle.pendown() if draw else turtle.penup()turtle.fd(40)drawgap()turtle.right(90)

4、给定字符串,绘制多个数码管

假定给定的时间格式为2020-7=16+对应2020年7月16日,也就是 “-”对应“年”,“=”对应“月”,“+”对应“日”。%Y-%m=%d+
定义一个drawdate(date)函数
将一串字符串拆分成一个一个字符

def drawDate(date):turtle.pencolor("red")for i in date:if i=="-":turtle.write('年',font=('Arial',18,'normal'))turtle.pencolor('green')turtle.fd(40)elif i=='=':turtle.write('月',font=('Arial',18,'normal'))turtle.fd(40)elif i=='+':turtle.write('日',font=('Arial',18,'normal'))else:drawdigit(eval(i))

5、主函数的定义(获得系统时间)

使用time库获得系统时间,并按照 “-”对应“年”,“=”对应“月”,“+”对应“日”的格式进行输出。
格式为:%Y-%m=%d+。

def main():turtle.setup(800,350,200,200)turtle.penup()turtle.fd(-300)turtle.pensize(5)drawDate(time.strftime("%Y-%m=%d+",time.gmtime()))turtle.hideturtle()turtle.done()

6、七段数码管完整代码

#seven digits draw
import turtle,time
def drawgap():turtle.penup()turtle.fd(5)
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,4,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):turtle.pencolor("red")for i in date:if i=="-":turtle.write('年',font=('Arial',18,'normal'))turtle.pencolor('green')turtle.fd(40)elif i=='=':turtle.write('月',font=('Arial',18,'normal'))turtle.pencolor('blue')turtle.fd(40)elif i=='+':turtle.write('日',font=('Arial',18,'normal'))else:drawdigit(eval(i))
def main():turtle.setup(800,350,200,200)turtle.penup()turtle.fd(-300)turtle.pensize(5)drawDate(time.strftime("%Y-%m=%d+",time.gmtime()))turtle.hideturtle()turtle.done()
main()

7、可以刷新的倒计时效果

编写程序展示可以刷新的倒计时效果,倒计时结束后输出一段字符串。代码如下:

import turtle,time
def drawgap():turtle.penup()turtle.fd(5)
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 drawtimecount(t):for i in range(t+1):start=time.perf_counter()drawdigit(t-i)time.sleep(1-(time.perf_counter()-start))turtle.clear()turtle.penup()turtle.goto(0,0)turtle.pendownturtle.pencolor('red')turtle.penup()turtle.goto(-100,-20)turtle.pendownturtle.write('我是小仙女',font=('楷体',30,'normal'))
def main():turtle.setup(800,350,200,200)turtle.penup()turtle.pensize(5)turtle.speed(0)drawtimecount(5)turtle.hideturtle()turtle.done()
main()

python小白进阶之路三——七段数码管的绘制+做一个酷炫的倒计时(函数的复用)相关推荐

  1. python随手记自动记账_菜鸟也疯狂!8分钟用Python做一个酷炫的家庭随手记

    原标题:菜鸟也疯狂!8分钟用Python做一个酷炫的家庭随手记 每个月都有各种各样的开销,不当家不知道柴米贵呀!柴米油盐酱醋茶样样都要开销,吃的穿的,各种开销,每个月都没有啥结余,小编月初是富人,月底 ...

  2. python小白——进阶之路——day6天---字符串相关相关函数,格式化(format)

    # ### 字符串相关函数 (函数就是方法的意思,完成某个功能) """ 语法: 字符串.函数  """ *capitalize 字符串首字 ...

  3. python123m与n的数学运算_python小白进阶之路三——循环结构入门练习+Random库练习...

    文章目录 ==资源下载与使用== 输出水仙花数 100以内的素数之和 计算输入数的奇偶数之和与平均数 计算s=a+aa+aaa+-+aaa-aaa的值 有3个数字:1.2.3,能组成多少个互不相同且无 ...

  4. python小白——进阶之路——day天-———列表的相关操作以及函数

    ###列表的相关操作 #(1)列表的拼接lst1=[1,2] lst2=[3,4] listvar = lst1+lst2 print(listvar) #(2)列表的重复lst = [1,2,3] ...

  5. python小白——进阶之路——day7天---字典和集合的相关函数

    ### 字典的相关函数(增删改查)#(1)增dictvar= {}dictvar['top'] = "凯"dictvar['middle'] = "妲己"dic ...

  6. 菜鸟也疯狂!8分钟用Python做一个酷炫的家庭随手记

    每个月都有各种各样的开销,不当家不知道柴米贵呀!柴米油盐酱醋茶样样都要开销,吃的穿的,各种开销,每个月都没有啥结余,小编月初是富人,月底就光了. 都说理财从记账开始,小编我用过很多记账软件,但是都不是 ...

  7. python小程序之七段数码管的绘制

    今天我们学习了七段数码管的绘制,通过一个程序学习了数字用七段数码的绘制.首先我们看下图的绘制,我们先理解下各个数字由几步线条组成. 然后回到我们的程序,先给大家看看我们的程序图,因为小编录屏很模糊,但 ...

  8. 三步教你用Node做一个微信哄女友(基友)神器,小白可上手

    前言 不知道大家最近有没有被python版的<微信每日说>刷屏呢,他可是霸占了github的python热门快两周了.我们前端的小伙伴是不是也看着有点眼馋呢,因为毕竟是不那么熟悉的pyth ...

  9. 分享三个例程:使用ESP32做一个实时语音对讲机,MQTT协议实现公网对讲,ESP32-CAM 上传图像数据到网络。并附上例程链接。

    分享三个例程:使用ESP32做一个实时语音对讲机,MQTT协议实现公网对讲,ESP32-CAM 上传图像数据到网络.并附上例程链接.可以比对着看来学习NOW,MQTT使用方法.想办法把图像和语音代码融 ...

  10. python画三维立体图-Python 竟能绘制出如此酷炫的三维图

    原标题:Python 竟能绘制出如此酷炫的三维图 通常我们用 Python 绘制的都是二维平面图,但有时也需要绘制三维场景图,比如像下面这样的: 这些图怎么做出来呢?今天就来分享下如何一步步绘制出三维 ...

最新文章

  1. 转载的spring cloud的全家桶,有空学习下
  2. Java 全能手册火了!Redis/Nginx/Dubbo/Spring 全家桶/啥都有
  3. mysql after 不起作用_我的MySQL触发器不起作用,语法简单,不复杂
  4. C++实现N选R的实现算法(附完整源码)
  5. 聊聊高并发(三十六)Java内存模型那些事(四)理解Happens-before规则
  6. html判断安装没安装qq,QQ6.1体验版怎么用?腾讯QQ6.1体验版本安装步骤(无须申请体验账号)...
  7. 常州工学院计算机毕业论文多少字,研究常州工学院毕业论文(设计)系统快速使用指南.doc...
  8. O2O、C2C、B2B、B2C的区别
  9. python写爬虫4-多线程爬虫(采集58出租房信息)_python实现多线程爬虫
  10. 解决 HttpClient 模拟 http 的get 请求后 ,出现 403 错误
  11. JDBC03 利用JDBC实现事务提交与回滚【调用Connection中的方法实现事务管理】
  12. et200sp模块接线图讲解_Step7 5.5通过Profinet组态ET200SP
  13. kron matlab_Matlab中repelem, repmat, kron重复数组
  14. java 四分位算法_Java 四分位算法
  15. linux运维都不知道是什么,这8种命令都不会,还算什么Linux运维!
  16. 视觉伺服入门第二步:带你从经典论文阅读Visual Servo Control Part II: Advanced Approaches进阶版
  17. 程序员复工后被裁,600万房21000房贷无力偿还,给年轻人3点忠告
  18. 测试用例优先级划分_测试用例的重要级别如何划分?
  19. 代表们的烦恼,骚扰电话终将被整治?
  20. PyQt5组件之QPixmap

热门文章

  1. 点击计算机管理出现找不到文件,win10点击计算机管理时提示找不到文件如何办?...
  2. win7重装的那些事儿
  3. js、html实现断点播放视频,视频资源在localStorage中
  4. 使用JavaScript实现动态效果
  5. spi slaver接口的fpga实现
  6. “踢爆”职场焦虑、玩机车、文科转大厂程序媛,乘风破浪的 IT 女神太飒了!
  7. HTML实现简单的贪吃蛇小游戏(附完整源码)
  8. Javascript面试题 把AaaBbbcccc 变成AaaBbbCcc
  9. cp -r命令 linux什么意思,linux命令 $- 是什么意思
  10. mysql高级查询之性能分析explain和日志查看