七段数码管绘制
【摘要】
效果图
文章目录
效果图一.问题分析二.编码三.优化四.完整代码
如下,就是七段数码管,小时候的计算器,电子手表中经常见,现在也是哈😀,好,今天就用所学习的Python基础结合tu...
效果图
Let‘s go
一.问题分析
- 就用不久前学的turtle绘图体系来试试看
- 这个七段数码管有7根线条组成,用不同的数来显示线条
- 先完成一条线,然后完成一串数字,最后获取当前的时间并显示,perfect!!!
二.编码
首先用到turtle库,引入我们的库
import turtle #引入库
- 1
使用函数绘制一条线,因为这个大小一样,之后调用函数就0k了,是不是很简单呢。
def drawLine(draw):
turtle.pendown() if draw else turtle.penup() #如果画了就放下画笔,否则抬起画笔
turtle.fd(40) #四十像素
turtle.right(90) #转向右90度,画下一条。
- 1
- 2
- 3
- 4
然后我们画出一个数码管,一共有七条线,如上图,所有的数都从一走,drawdigit函数是一个0-9的数字,第一条横除了0,1,7不需要其他都需要,以此类推。
这里要注意画完前4条海龟回到原点了,我们需要让它转头左转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) #为绘制后续数字确定位置
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
到这第一步就完成了,下面来完成获取一段数字,绘制出数码管。
我需要一个循环读这一段字符,最后通过主函数main进行封装,有点C的意思。
def drawDate(date): #获得要输出的数字
for i in date:
drawDigit(eval(i)) #通过eval()函数将数字变为整数
def main():
turtle.setup(800, 350, 200, 200)
turtle.penup()
turtle.fd(-300)
turtle.pensize(5)
drawDate('20210629')
turtle.hideturtle()
turtle.done()
main()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
效果:
三.优化
数码管间隔的函数定义:
def drawGap(): #绘制数码管间隔
turtle.penup()
turtle.fd(5)
- 1
- 2
- 3
调用:
import turtle
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) #转向右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 drawDate(date): #获得要输出的数字
for i in date:
drawDigit(eval(i)) #通过eval()函数将数字变为整数
def main():
turtle.setup(800, 350, 200, 200)
turtle.penup()
turtle.fd(-300)
turtle.pensize(5)
drawDate('20210629')
turtle.hideturtle()
turtle.done()
main()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
之前:
优化:
获取系统时间,绘制七段数码管
这里要借助之前学习的库time
- 使用time库获取当前系统时间
- 增加年月日
- 添加颜色
import time
- 1
四.完整代码
import turtle as t
import time
def drawGap(): #绘制数码管间隔
t.penup()
t.fd(5)
def drawLine(draw):
drawGap()
t.pendown() if draw else t.penup() #如果画了就放下画笔,否则抬起画笔
t.fd(40) #四十像素
drawGap()
t.right(90) #转向右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)
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.left(180)
t.penup() #为绘制后续数字确定位置
t.fd(20) #为绘制后续数字确定位置
def drawDate(date): #获得要输出的数字
t.pencolor("red")
for i in date:
if i == '-':
t.write('年',font=("Arial", 18, "normal"))
t.pencolor("Lime")
t.fd(40)
elif i == '=':
t.write('月',font=("Arial", 18, "normal"))
t.pencolor("blue")
t.fd(40)
elif i == '+':
t.write('日',font=("Arial", 18, "normal"))
else:
drawDigit(eval(i)) #通过eval()函数将数字变为整数
def main():
t.setup(1000, 500, 200, 200)
t.penup()
t.fd(-300)
t.pensize(5)
drawDate(time.strftime('%Y-%m=%d+',time.gmtime()))
t.hideturtle()
t.done()
main()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
效果:
你是我零零碎碎烦躁无趣琐事里,耀眼可爱的存在
文章来源: blog.csdn.net,作者:周棋洛ყ ᥱ ᥉,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/m0_53321320/article/details/118336764
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)