Python turtle绘图教程之七段数码管显示数字和字母

 更新时间:2023年10月28日 11:18:49   作者:Corone  
这篇文章主要给大家介绍了关于Python turtle绘图教程之七段数码管显示数字和字母的相关资料,Python是一种流行的编程语言,可用于编写各种类型的程序,在数码管显示器上数字8由7条不同的线条组成,需要的朋友可以参考下

一、运行结果

二、程序设计

七段数码管由7条线组成,以下图所标识的画图顺序为准进行程序设计。

首先导入turtle库并将其重命名为t。

import turtle as t

定义函数drawGap()用于绘制间隙,通过将画笔抬起,并向前移动5个单位,来实现间隙的绘制。

def drawGap(): # 绘制间隙
    t.penup()
    t.fd(5) # 设置间隙大小

定义函数drawLine(draw)用于绘制线段,通过判断参数draw的布尔值,决定是否下笔绘制线段。如果布尔值为True,则将画笔放下,向前移动40个单位;如果布尔值为False,则将画笔抬起,向前移动40个单位。然后调用drawGap()函数绘制间隙,并将画笔右转90度,准备绘制下一段线。

def drawLine(draw): # 绘制数码管中的一段线
     drawGap()
     t.pendown() if draw else t.penup()
     t.fd(40)
     drawGap()
     t.right(90)

之后,我们根据所要绘制的数字和字母定义函数drawDight(s),下图是数字和字母的数码管显示图。

以1号线段为例,数字中包含它的有2,3,4,5,6,8,9,字母中包含它的有a,b,d,e,f,h,k,n,o,p,q,s,t,w,x,y,z。

然后定义drawDight(s)函数,根据字符s绘制七段数码管。

根据不同的字符,调用drawLine()函数绘制对应的线段。通过判断字符s的值,决定绘制哪些线段。每绘制完一组线段,将画笔左转90度,准备绘制下一组线段。

def drawDight(s): # 根据字符绘制七段数码管
     # 绘制1号线段
    drawLine(True) if s in ['2','3','4','5','6','8','9','a','b','d','e','f','h','k','n','o','p','q','s','t','w','x','y','z'] else drawLine(False)
     # 绘制2号线段
    drawLine(True) if s in ['0','1','3','4','5','6','7','8','9','a','b','d','g','h','i','j','k','m','n','o','q','u','v','w','x','y'] else drawLine(False)
     # 绘制3号线段
    drawLine(True) if s in ['0','2','3','5','6','8','9','b','c','d','e','g','i','j','l','o','s','t','u','v','w','y','z'] else drawLine(False)
     # 绘制4号线段
    drawLine(True) if s in ['0','2','6','8','a','b','c','d','e','f','g','h','k','l','m','n','o','p','r','t','u','v','w','z'] else drawLine(False)

    t.left(90)

     # 绘制5号线段
    drawLine(True) if s in ['0','4','5','6','8','9','a','b','c','e','f','g','h','k','l','m','p','q','r','t','u','w','x','y'] else drawLine(False)
     # 绘制6号线段
    drawLine(True) if s in ['0','2','3','5','6','7','8','9','a','c','e','f','g','i','k','m','p','q','r','s'] else drawLine(False)
     # 绘制7号线段
    drawLine(True) if s in ['0','1','2','3','4','7','8','9','a','d','h','i','j','m','p','q','u','w','y','z'] else drawLine(False)

    t.right(180)
    t.penup()
    t.fd(30)

定义drawStr(Str)函数,用于依次绘制输入的字符串中的每个字符,通过遍历字符串中的每个字符,调用drawDight()函数进行绘制。

def drawStr(Str):
    for x in Str:
        drawDight(x)   

定义main()函数,用于设置全局参数和执行绘制操作。

在函数中,首先通过input()函数获取用户输入的一段字符,并将其赋值给变量a

然后设置画笔颜色为红色,设置窗口大小为1280x720,隐藏画笔,设置绘图速度为0,即最快速度,将画笔抬起并向后移动400个单位(设置绘图起点),设置画笔大小为5。

接着调用drawStr(a)函数来绘制用户输入的字符。

最后调用t.done()表示绘制完成。

def main(): # 全局设置
     a=input('请输入一段字符:')
     t.pencolor('red') # 设置画笔的颜色
     t.setup(1280,720) # 设置窗口的大小
     t.hideturtle() # 隐藏画笔         
     t.speed(0) # 设置画图速度       
     t.penup() 
     t.fd(-400) # 设置绘图起点         
     t.pensize(5) # 设置画笔大小
     drawStr(a)
     t.done()      

最后调用main()函数来执行整个绘制过程。

main()

三、源代码

import turtle as t
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)
def drawDight(s): # 根据字符绘制七段数码管
     # 绘制1号线段
    drawLine(True) if s in ['2','3','4','5','6','8','9','a','b','d','e','f','h','k','n','o','p','q','s','t','w','x','y','z'] else drawLine(False)
     # 绘制2号线段
    drawLine(True) if s in ['0','1','3','4','5','6','7','8','9','a','b','d','g','h','i','j','k','m','n','o','q','u','v','w','x','y'] else drawLine(False)
     # 绘制3号线段
    drawLine(True) if s in ['0','2','3','5','6','8','9','b','c','d','e','g','i','j','l','o','s','t','u','v','w','y','z'] else drawLine(False)
     # 绘制4号线段
    drawLine(True) if s in ['0','2','6','8','a','b','c','d','e','f','g','h','k','l','m','n','o','p','r','t','u','v','w','z'] else drawLine(False)

    t.left(90)

     # 绘制5号线段
    drawLine(True) if s in ['0','4','5','6','8','9','a','b','c','e','f','g','h','k','l','m','p','q','r','t','u','w','x','y'] else drawLine(False)
     # 绘制6号线段
    drawLine(True) if s in ['0','2','3','5','6','7','8','9','a','c','e','f','g','i','k','m','p','q','r','s'] else drawLine(False)
     # 绘制7号线段
    drawLine(True) if s in ['0','1','2','3','4','7','8','9','a','d','h','i','j','m','p','q','u','w','y','z'] else drawLine(False)

    t.right(180)
    t.penup()
    t.fd(30)
def drawStr(Str):
    for x in Str:
        drawDight(x)          
def main(): # 全局设置
     a=input('请输入一段字符:')
     t.pencolor('red') # 设置画笔的颜色
     t.setup(1280,720) # 设置窗口的大小
     t.hideturtle() # 隐藏画笔         
     t.speed(0) # 设置画图速度       
     t.penup() 
     t.fd(-400) # 设置绘图起点         
     t.pensize(5) # 设置画笔大小
     drawStr(a)
     t.done()      
main()

附:14位数码管,画英文,和数字

import datetime
import turtle

name = []

def drawLine(draw):  # 绘制单段数码管
    turtle.pendown() if draw else turtle.penup()
    turtle.fd(40)
    turtle.right(90)

def drawLine1(draw):  # 绘制单段数码管1
    turtle.pendown() if draw else turtle.penup()
    turtle.fd(20)

def drawtdown1(draw):  # 斜线
    turtle.pendown() if draw else turtle.penup()
    turtle.fd(44.7)

def drawDigit(digit):  # 根据数字绘制七段数码管
    # 横1笔
    drawLine1(True) if digit in [2, 4, 5, 6, 8, 9, 'A', 'E', 'F', 'H',  'K', 'P', 'R', 'S'] else drawLine1(False)
   
    # 横2笔
    drawLine1(True) if digit in [2, 3, 4, 5, 6, 8, 9,'F', 'A','B','G','H','P,'R',S'] else drawLine1(False)
   
    # 第3笔
    turtle.right(90)
    drawLine(True) if digit in [0, 1, 3, 4, 5, 6, 7, 8, 9, 'A', 'B', 'D', 'G', 'H', 'J', 'M', 'N' , 'O', 'Q', 'S', 'U', 'W'] else drawLine(False)
   
    # 第4笔
    drawLine(True) if digit in ['L',0, 2, 3, 5, 6, 8, 9, 'B', 'C', 'D', 'E', 'G', 'I', 'U','J', 'O', 'Q', 'S', 'Z'] else drawLine(False)
    
    # 第5笔
    drawLine(True) if digit in ['L',0, 2, 6, 8, 'A', 'C' , 'E' , 'F' , 'G', 'H' , 'J' , 'K' , 'L' , 'M' , 'N' ,'O' , 'P' , 'Q' ,'R' , 'U' , 'V' , 'W'] else drawLine(False)
   
    # 第6笔(因为会右转,这里调节第五笔为向上直线)
    turtle.left(90)
    drawLine(True) if digit in ['L',0, 4, 5, 6, 8, 9, 'A','C','E','F','G','H','K','M','N','O','P','Q','R','S','U','V','W'] else drawLine(False)
  
    # 第7笔
    drawLine(True) if digit in [0, 2, 3, 5, 6, 7, 8, 9, 'A','B','C','D','E','F','G','O','P','Q','R','I','S','T','Z'] else drawLine(False)
   
    # 第8笔
    drawLine(True) if digit in [0, 1, 2, 3, 4, 7, 8, 9, 'A','B','D','H','J','M','N','O','P','Q','R','U','W'] else drawLine(False)
  
    # 第9笔
    turtle.left(90)
    turtle.penup()
    turtle.fd(40)
    turtle.right(90 + 63.4)
    drawtdown1(True) if digit in ['K','N','Q','K','N','Q','R','W','X'] else drawtdown1(False)
  
    # 第10笔********************
    drawtdown1(True) if digit in ['M','N','X','Y'] else drawtdown1(False)
  
    # 第11笔********************
    turtle.right(90 + 26.6)
    turtle.penup()
    turtle.fd(20)
    turtle.right(90)
    drawLine(True) if digit in ['B','D','I','T'] else drawLine(False)
   
    # 第12笔***********
    turtle.left(90)
    drawLine(True) if digit in ['B','D','I','T','Y'] else drawLine(False)
  
    # 第13笔
    turtle.penup()
    turtle.fd(20)
    turtle.right(90 + 26.6)
    drawtdown1(True) if digit in ['V','X','Z','W', 0] else drawtdown1(False)

    # 第14笔
    drawtdown1(True) if digit in ['M','V','X','Y','Z','K', 0, 1] else drawtdown1(False)
    turtle.right(90 + 63.4)
    turtle.penup()
    turtle.fd(40)
    turtle.left(90)
    turtle.fd(20)

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

def drawname():
    #name = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
    name = ['L', 'O', 'N', 'G',' ', 'T', 'A', 'O']
    #name = [ 'I','  ','L','O','V','E', ' ',  'Y','O','U']
    for i in name:
        drawDigit(i)

def main():
    turtle.setup(800, 350, 200, 200)
    turtle.penup()
    turtle.goto(-300, 50)
    turtle.pensize(5)
    turtle.pencolor("black")
    turtle.speed(0)#这个让乌龟跑快点,慢慢爬真的难受,想慢点的同志把这个注释就行
    drawDate(datetime.datetime.now().strftime('%Y-%m=%d+'))
    turtle.penup()
    turtle.goto(-200, -100)
    turtle.pencolor('red')
    drawname()
    turtle.hideturtle()
    turtle.exitonclick()#画完不关闭画布,点击关闭

main()

总结 

到此这篇关于Python turtle绘图教程之七段数码管显示数字和字母的文章就介绍到这了,更多相关Python七段数码管显示数字和字母内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 安装ElasticSearch搜索工具并配置Python驱动的方法

    安装ElasticSearch搜索工具并配置Python驱动的方法

    这篇文章主要介绍了安装ElasticSearch搜索工具并配置Python驱动的方法,文中还介绍了其与Kibana数据显示客户端的配合使用,需要的朋友可以参考下
    2015-12-12
  • Python实现的简单算术游戏实例

    Python实现的简单算术游戏实例

    这篇文章主要介绍了Python实现的简单算术游戏,可实现随机给出算数表达式,并对用户输入答案进行判断的功能,需要的朋友可以参考下
    2015-05-05
  • Python字符串常规操作小结

    Python字符串常规操作小结

    本文主要介绍了Python字符串常规操作小结,如拼接字符串、截取字符串、格式化字符串等,下面将对Python中常用字符串操作方法进行介绍,感兴趣的可以了解一下
    2022-04-04
  • 关于Numpy之repeat、tile的用法总结

    关于Numpy之repeat、tile的用法总结

    这篇文章主要介绍了关于Numpy之repeat、tile的用法总结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • python 实现交换两个列表元素的位置示例

    python 实现交换两个列表元素的位置示例

    今天小编就为大家分享一篇python 实现交换两个列表元素的位置示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • OpenCV利用手势识别实现虚拟拖放效果

    OpenCV利用手势识别实现虚拟拖放效果

    这篇文章主要介绍了利用OpenCV实现手势识别,从而进行虚拟拖放效果,我们可以使用这个技术实现一些游戏,控制机械臂等很多有趣的事情。感兴趣的可以学习一下
    2022-01-01
  • Python unittest工作原理和使用过程解析

    Python unittest工作原理和使用过程解析

    这篇文章主要介绍了Python unittest工作原理和使用过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • 运用TensorFlow进行简单实现线性回归、梯度下降示例

    运用TensorFlow进行简单实现线性回归、梯度下降示例

    这篇文章主要介绍了运用TensorFlow进行简单实现线性回归、梯度下降示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • Python绘制惊艳的桑基图的示例详解

    Python绘制惊艳的桑基图的示例详解

    很多时候,我们需要一种必须可视化数据如何在实体之间流动的情况。这个时候就需要桑基图,它通常描绘 从一个实体(或节点)到另一个实体(或节点)的数据流。本文将利用Python绘制惊艳的桑基图,需要的可以参考一下
    2022-02-02
  • 解决pycharm每次新建项目都要重新安装一些第三方库的问题

    解决pycharm每次新建项目都要重新安装一些第三方库的问题

    今天小编就为大家分享一篇解决pycharm每次新建项目都要重新安装一些第三方库的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01

最新评论