需要帮助,无需使用bin()或hex()之类的函数即可将十进制转换为十六进制

时间:2019-08-22 00:43:17

标签: python

好,第一次在这里发布任何内容,所以我们开始

我刚刚开始学习编程,我的教授给了我们一个巨大的不可能的问题(至少对我来说是这样),而无需使用bin()或hex()之类的函数来做基本转换器。

Bin -> Dec, Hex, Oct 

Dec -> Bin, Hex, Oct

Hex -> Bin, Dec, Oct

Oct -> Bin, Dec, Hex 

到目前为止,我已经能够编码(我认为)其中的3个(二进制到十进制,十进制到二进制以及十进制到八进制),但是我似乎找不到找到将DECIMAL转换为HEXADECIMAL的方法。那就是我到目前为止(全部在python中)

    # BINARY TO DECIMAL
    binary_value = int(input("Write a binary value: "))
    bits = list(str(binary_value))
    bin_to_decimal_value = 0
    counter = 0

    for x in reversed(bits):
        bin_to_decimal_value += 2 ** counter * int(x)
        counter += 1

    print(f"{binary_value} is equal to {bin_to_decimal_value} in decimal")


    # DECIMAL TO BINARY
    def dec_to_bin(num):
        if num > 1:
            dec_to_bin(num // 2)
        print(num % 2, end='')


    dec_val = int(input("Write a decimal value: "))
    dec_to_bin(dec_val)
    print("\n")


    # DECIMAL TO OCTAL
    def dec_to_oct(num):
        if num > 1:
            dec_to_oct(num // 8)
        print(num % 8, end='')


    dec_to_oct(dec_val)
    print("\n")

我不希望你们为我做这件事,但是我想知道创建DEC到HEX转换器应该考虑什么,以及一些技巧或任何有用的代码。

一般来说,我是编程和Stackoverflow的新手,如果我做错了什么,请告诉我。 xd

1 个答案:

答案 0 :(得分:0)

在此youtube video之后,我能够看到如何将以10为底的数字转换为其十六进制形式。实际上,一旦将其编码,便将其扩展为可以处理任何以10为底的转换为以任何底(以2为底,以8为底,以16为底)。

我对递归函数不太了解,因此我无法评论您将基数10转换为基数8或基数2的递归解决方案。

我创建了两个函数:base2dec(num, base)dec2base(dec, base)进行了转换。

例如,在youtube视频上建议将其从16转换为8,然后从10转换为8。

如果我能提供更多信息,请随时询问。

编辑:我尝试使用递归函数之一将dec转换为十六进制,这似乎可以正常工作,但有时会在结果中添加前导零。我不知道为什么。

def dec_to_hex(num):
    d = {i:k for i, k in enumerate('0123456789abcdef')}
    if num > 1:
        dec_to_hex(num // 16)

    print(d[num % 16], end='')

dec_to_hex(255)

打印0ff而不是ff。看不清楚为什么会这样。当我运行dec_to_hex(256)时,它会打印100。 `

您可以看到我创建了一个字典d,它将数字15转换为f

最后,只需稍作调整,您就可以只有一个函数将小数转换为基数。

def dec_to_base(num, base):
    d = {i:k for i, k in enumerate('0123456789abcdef')}
    if num > 1:
        dec_to_hex(num // base)

    print(d[num % base], end='')