好,第一次在这里发布任何内容,所以我们开始
我刚刚开始学习编程,我的教授给了我们一个巨大的不可能的问题(至少对我来说是这样),而无需使用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
答案 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='')