Python数码管之十进制转十六进制

首先呢,问题如下:

c2333d028e804cd78a464be55aa585de.png

9e5b970b6f66442c94152726b76e0893.png

上面这个图是符号的数码管显示

 问题是这个:

eb55957a3ad648e6b4ee62d5010710cc.png

 因为转十六进制,会存在字母ABCDEF代表10-15,还有一个就是,需要D和H用来在旁边表示进制符号,就是如下这样

53708f29704d462da03cd9d4bc2fbf64.png

 

思路:

思路非常简单,就是先进行十进制转16进制,直接取余数,储存起来,然后直接倒序过来就是该十进制数的十六进制了,

具体代码就是这样的:

       

def jinzhi(a):
    i=0
    b={}
    while a!=0:
        b[i]=str(int(a%16))
        if b[i]=='10':
            b[i]='A'
        if b[i]=='11':
            b[i]='B'
        if b[i]=='12':
            b[i]='C'
        if b[i]=='13':
            b[i]='D'
        if b[i]=='14':
            b[i]='E'
        if b[i]=='15':
            b[i]='F'
        a=int(a/16)
        i=i+1

    b1={}
    c=0
    d=len(b)
    d=d-1
    print(b)#检验一下b,你们删掉也可以的
    while 1:
        b1[c]=b[d]
        if b[d]==b[0]:
            break
        c=c+1
        d=d-1
    return b1

你们很容易发现了,我用的是字典类型{},因为列表在里面没有字典那么好,元组是无法修改的,字典还是不错的,

然后呢,就是画图了,首先画的是十进制的,再然后画十六进制

这里我直接给源代码了:


import turtle as t
def jinzhi(a):
    i=0
    b={}
    while a!=0:
        b[i]=str(int(a%16))
        if b[i]=='10':
            b[i]='A'
        if b[i]=='11':
            b[i]='B'
        if b[i]=='12':
            b[i]='C'
        if b[i]=='13':
            b[i]='D'
        if b[i]=='14':
            b[i]='E'
        if b[i]=='15':
            b[i]='F'
        a=int(a/16)
        i=i+1

    b1={}
    c=0
    d=len(b)
    d=d-1
    print(b)#检验b
    while 1:
        b1[c]=b[d]
        if b[d]==b[0]:
            break
        c=c+1
        d=d-1
    return b1

def drawLine(draw):
    t.pendown() if draw else t.penup()
    t.fd(40)
    t.right(90)


def drawDight(d):

    drawLine(True) if d in ['2', '3', '4', '5', '6', '8', '9', 'A', 'B', 'D', 'E', 'F', 'H'] else drawLine(False)
    drawLine(True) if d in ['0', '1', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'D', 'H'] else drawLine(False)
    drawLine(True) if d in ['0', '2', '3', '5', '6', '8', '9', 'B', 'C', 'D', 'E'] else drawLine(False)
    drawLine(True) if d in ['0', '2', '6', '8', 'A', 'B', 'C', 'D', 'E', 'F', 'H'] else drawLine(False)
    t.left(90)
    drawLine(True) if d in ['0', '4', '5', '6', '8', '9', 'A', 'B', 'C', 'E', 'F', 'H'] else drawLine(False)
    drawLine(True) if d in ['0', '2', '3', '5', '6', '7', '8', '9', 'A', 'C', 'E', 'F'] else drawLine(False)
    drawLine(True) if d in ['0', '1', '2', '3', '4', '7', '8', '9', 'A', 'D', 'H'] else drawLine(False)
    t.left(180)
    t.penup()
    t.fd(20)
def ggg(a,p):
    i=0
    if p==16:
        while i<len(a):
            drawDight(a[i])
            i=i+1
        #多打印一个16进制的符号H
        t.color('green')
        drawDight('H')
    if p==10:
        while i<len(a):
            drawDight(a[i])
            i=i+1
        #多打印一个10进制的符号D
        t.color('red')
        drawDight('D')
def main():
    a = int(input())
    b = jinzhi(a)
    t.setup(800,600,200,200)
    t.penup()
    t.fd(-300)
    t.pensize(5)
    t.write('十进制',font=("Arial", 20,"normal"))
    t.fd(100)
    ggg(str(a),10)  #10进制
    t.goto(0,0)
    t.right(90)
    t.fd(200)
    t.left(90)
    t.fd(-300)
    t.color('black')  # 消除颜色的影响
    t.write('十六进制', font=("Arial", 20, "normal"))
    t.fd(120)
    ggg(b,16)   #16进制
    t.hideturtle()
    t.done()

main()

main函数可能会有点复杂,其实就是画完十进制,然后把海龟下一行,并且稍微跟第一行对准一下,然后继续输出十六进制,中途就是颜色的变化。

drawDight这个函数的作用是,通过ggg这个函数传输过来的字符进行判断,是否符合那些列表里面的数,一共是七次判断是否属于该列表里面的数,七次,其实就是对应七段数码管

了解这个图的话,应该就可以了解这七句判断了

1cee2cd67a024f6480e169d63446dd59.png

 先看这个图,其实方向可以自定义的,我用的这个方向是教材里面的,大家都可以接受。

每一句话都代表着一个画图的指令,最上面有个表,就是对每一个数的数码管,哪一条管可以画,哪一条管不可以画,这样就组成了一个数的数码管

学会了吗0.0

 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值