《python语言程序设计》2018版--第8章9题编写函数实现二进制转十六进制(字符串变整数)!!整数没法进行下标

在这里插入图片描述

总结

使用硬性指派确实帮助了我很多。循环步幅是很好的使用工具。

前言

如何转换呢??二进制转十六进制
通过智能ai一下子就生成了!!哇塞!!质的飞跃。
但是我还是用毕竟原始的办法来弄吧。

第一章 二进制转十六进制的方法

将二进制数从右到左每4位分成一组(不足4位时左边补0)
将每组4位二进制数转换为对应的十六进制数
将转换后的十六进制数按顺序组合起来
转换对照表:
0000 = 0
0001 = 1
0010 = 2
0011 = 3
0100 = 4
0101 = 5
0110 = 6
0111 = 7
1000 = 8
1001 = 9
1010 = A
1011 = B
1100 = C
1101 = D
1110 = E
1111 = F

这个方法似乎挺简单

我做到每4位进行变化就可以。

  • 实现通过s[1:i],4个、4个来进行识别
  • 对了出现了一个问题,就是前缀如果前缀中出现了‘0b’这样的肯定不行。只能是00、01、10、11这四个前缀并且是能被4整除的2进制编码才可以进行运算

第二章 初次尝试代码

  • 此处的逻辑是我认为可以通过将字符串按4个为一个间隔进行区分。
def binary_to_hex(binary_value):
    if len(binary_value) % 4 == 0:
    # 我希望通过这个for循环帮助我完成这个区分。但是现在看来她好像走的很多。
        for i in range(0,len(binary_value)):#其实差了点什么
            a = binary_value[i:i+4]
            print(a)
    else:
        print('对不起请输入符合16进制转换要求的2进制代码')


binary_text = '001101011101'
binary_to_hex(binary_text)

在这里插入图片描述
但是结果很有意思

第三章 其实只是差了个步幅

# 加了一个步幅4
        for i in range(0,len(binary_value)4):
            a = binary_value[i:i+4]
            print(a)

在这里插入图片描述
我们得到了分割好的3个二进制编码组。,然后接下来就是如何把他们进行转换

def hex_text(text_binary):
    text_num = ''
    if text_binary == '0000':
        text_num = '0'
    elif text_binary == '0001':
        text_num = '1'

    elif text_binary == '0010':
        text_num = '2'

    elif text_binary == '0011':
        text_num = '3'

    elif text_binary == '0100':
        text_num = '4'

    elif text_binary == '0101':
        text_num = '5'

    elif text_binary == '0110':
        text_num = '6'

    elif text_binary == '0111':
        text_num = '7'
    elif text_binary == '1000':
        text_num = '8'

    elif text_binary == '1001':
        text_num = '9'

    elif text_binary == '1010':
        text_num = 'A'

    elif text_binary == '1011':
        text_num = 'B'

    elif text_binary == '1100':
        text_num = 'C'

    elif text_binary == '1101':
        text_num = 'D'
    elif text_binary == '1110':
        text_num = 'E'

    elif text_binary == '1111':
        text_num = 'F'
    print(text_num)


def binary_to_hex(binary_value):
    if len(binary_value) % 4 == 0:
        for i in range(0, len(binary_value), 4):
            a = binary_value[i:i + 4]
            return a
    else:
        print('对不起请输入符合16进制转换要求的2进制代码')


binary_text = '001101011101'
temp_a = binary_to_hex(binary_text)
print(temp_a)

  • 我通过建立了一个hex_text的十六进制字典来硬性指派每一个十六进制和二进制的对应
  • 但是好像不行。为了return这个binary_to_hex,我做了一个return,那么他就失去了之前for循环对整个字符串都遍历一遍的功能。

怎么办把两个函数合并到一起?

第四章 把两个函数合并到一起

def binary_to_hex(binary_value):
    if len(binary_value) % 4 == 0:
        for i in range(0, len(binary_value), 4):
            a = binary_value[i:i + 4]
            print(hex_text(a))# 把hex_text放到里面不就成功了吗?
    else:
        print('对不起请输入符合16进制转换要求的2进制代码')


binary_text = '001101011101'
binary_to_hex(binary_text)

把hex_text放到里面不就成功了吗?可是

    print(hex_text(a))# 

在这里插入图片描述
这3个none是干嘛的呢??
我好像明白了,因为我的代码中
在这里插入图片描述
else的出现让没进行一次循环后,她会有意识的进行一次else的识别。发现不是就显示none
但是又感觉不像是else的问题。因为在将print(a)进行输出的时候 是没有none所以这个错误是不是在别的地方呢??

第五章 我找到了错误的来源

在函数def hex_text(text_binary):代码段中最后我写的是print(text_num)
我现在将这个print改成了return
就成功了
在这里插入图片描述
三个二进制代码变成了十六进制。

第六章 最终代码


def hex_text(text_binary):
    text_num = ''
    if text_binary == '0000':
        text_num = '0'
    elif text_binary == '0001':
        text_num = '1'

    elif text_binary == '0010':
        text_num = '2'

    elif text_binary == '0011':
        text_num = '3'

    elif text_binary == '0100':
        text_num = '4'

    elif text_binary == '0101':
        text_num = '5'

    elif text_binary == '0110':
        text_num = '6'

    elif text_binary == '0111':
        text_num = '7'
    elif text_binary == '1000':
        text_num = '8'

    elif text_binary == '1001':
        text_num = '9'

    elif text_binary == '1010':
        text_num = 'A'

    elif text_binary == '1011':
        text_num = 'B'

    elif text_binary == '1100':
        text_num = 'C'

    elif text_binary == '1101':
        text_num = 'D'
    elif text_binary == '1110':
        text_num = 'E'

    elif text_binary == '1111':
        text_num = 'F'
    return text_num

def binary_to_hex(binary_value):
    if len(binary_value) % 4 == 0:
        
        print(f'二进制代码段{binary_value} 转十六进制代码段{a}')
        for i in range(0, len(binary_value), 4):
            a = binary_value[i:i + 4]
            print(hex_text(a), end="")
    else:
        print('对不起请输入符合16进制转换要求的2进制代码')


binary_text = '001101011101'
binary_to_hex(binary_text)


在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贾宝不是玉

谢谢各位兄弟们的关注,谢谢破费

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值