七段数码管绘制
1.题目问题:
2.前言了解
我们可以使用海龟函数 turtle 来进行绘制,但在绘制之前我们要了解:
1.数码管知识点
2.turtle打印汉字:
# 这个函数就是打印汉字 没有移动的轨迹
import turtle ,os
def writeWord(target_word, startx, starty): # 基于坐标,打印汉字
"""
基于坐标,打印单个汉字
:param target_word: 目标汉字
:param startx: 起始位置x
:param starty: 起始位置y
:return:
"""
turtle.color("black", "black") # 设置画笔颜色
turtle.pu() # 抬起画笔
turtle.goto(startx, starty) # 移动到指定位置
turtle.pd() # 下笔
turtle.write(target_word, move=False, align='left', font=('汉仪程行简', 120, 'normal')) # 打印汉字
writeWord("牛逼",-400,0)
writeWord("牛逼",-400,-400)
os.system("pause")
2.键盘输入十进制转化为十六进制
a=input()
print(type(a)) #显示a的类型
a=int(a)#键盘输入为字符型,我们要转换为数字型
print(type(a)) #显示a的类型
a=hex(a)#变为十六进制
print(a)
b=a[2:].upper() #从第二位开始读到最后
print(b)
3.思路:
我们简单的分析一下问题:
输入:9999
输出 十进制 9999b和十六进制 270FH
很显然我们要将输入分为两部分输入一个是十进制,另一个是十六进制
1.我们先3个自定义函数,drawLine(绘制单段数码管);drawDAL(绘制单个数字或者字符)(Numbers and letters);writeWord(打印汉字);main(主函数)
2.在主函数中对于输出的需求:我们要用turtle打印汉字,十进制绘制;转化为十六进制输出
3.完成各部分函数
四.源码:
import turtle,os
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','A','B','D','E','F','H','K','N','O','P','Q','S','T','W','X','Y','Z'] else drawLine(False)
drawLine(True) if digit 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)
drawLine(True) if digit 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)
drawLine(True) if digit 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)
turtle.left(90)
drawLine(True) if digit 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)
drawLine(True) if digit in ['0','2', '3', '5','7', '8', '9','A','C','E','F','G','I','K','M','P','Q','R','S'] else drawLine(False)
drawLine(True) if digit in ['0','1','2', '3', '4', '7', '8', '9','A','D','H','I','J','M','P','Q','U','W','Y','Z'] else drawLine(False)
turtle.left(180)
turtle.penup()
turtle.fd(20)
def drawDate(date):
turtle.pencolor("red")
for i in date:
drawDigit(i)
def writeWord(target_word): # 打印汉字
turtle.color("black", "black") # 设置画笔颜色
turtle.write(target_word, move=False, align='left', font=('宋体', 30, 'normal')) # 打印汉字
def main():
turtle.setup(800,450,100,100)
turtle.penup()
turtle.goto(-300,150)
turtle.pensize(5)
a=input()
writeWord("十进制:") #打印汉字十进制
turtle.goto(-50, 150)
drawDate(a) #打印十进制
drawDate('B') #在十进制后面加上b
a=int(a)
a=hex(a)
b = a[2:].upper() #将我们输入的A装化成十六进制
turtle.goto(-300,0)
writeWord("十六进制:") #打印汉字十六进制
turtle.goto(-50, 0)
drawDate(b) #打印十六进制
drawDate('H') # 在十六进制后面加上H
turtle.hideturtle()
turtle.done
os.system("pause") #按任意键退出
main()
结果: