在开始任何事情之前,我只想说我知道
hex()
功能,对于这个项目我无法使用它。另外,关于here提出的问题,我知道这一点,并且我已经尝试过该解决方案,但无法让我的代码正常工作。这是一个不同的情况,因为我正在使用多个功能。该帖子也没有讨论我的第二个问题。
我有两个问题:
输入十进制值:589
589 等于十六进制的 24D
但是当我听到这条线时:
print(og_dec_value,"is equal to",getHexChar(hex_value),end="","in hexadecimal")
我收到一个关于
end=""
未在最后的错误。但如果我删除 end=""
那么它只会打印出十六进制的第一个数字,而忽略其余的数字。
这是我现在的代码:
def main():
decToHex(int(input("Enter decimal value: ")))
def decToHex(dec_value):
while dec_value > 0:
hex_value=dec_value%16
dec_value=dec_value//16
print(getHexChar(hex_value),end="")
def getHexChar(dec_digit):
if dec_digit < 10:
return dec_digit
if dec_digit == 10:
return "A"
if dec_digit == 11:
return "B"
if dec_digit == 12:
return "C"
if dec_digit == 13:
return "D"
if dec_digit == 14:
return "E"
if dec_digit == 15:
return "F"
main()
首先我做了两个函数,一个将十进制转换为二进制,另一个相反:
def dec_to_bin(n):
exp=0
intsup = 2**exp
bin_list = []
while intsup < n:
intsup = 2**exp
exp += 1
while exp >= 0:
intsup = 2**exp
if n - intsup >= 0 :
n -= intsup
bin_list.append(1)
else:
bin_list.append(0)
exp -= 1
bin_number = ""
for i in bin_list:
bin_number += str(i)
bin_number = int(bin_number)
return bin_number
def bin_to_dec(n):
dec=0
while dec_to_bin(dec) != n :
dec+=1
return dec
接下来,我制作了这个简短的函数,将 0 到 15 之间的十进制数转换为十六进制。
def hexshort(nbr):
letters = ['A','B','C','D','E','F']
for letter_num in range(len(letters)):
if (10 + letter_num) == nbr:
n=letters[letter_num]
return nbr
最后,我制作了您需要的函数(将任何十进制数转换为十六进制),我们需要之前的函数,因为在这个函数中,在某些时候我们将十进制转换为二进制,然后二进制转换为十进制,最后我们使用短版本。
def hexconv(nbr):
nbr = dec_to_bin(nbr)
binary_list = []
nbr = str(nbr)
for i in nbr:
binary_list.append(i)
longueur = len(binary_list)
while longueur%4 != 0:
binary_list.insert(0,'0')
longueur=len(binary_list)
half_oct = longueur/4
half_oct = int(half_oct)
half_oct_list = []
half_oct_temp_list = []
for j in range(half_oct):
while len(half_oct_list)!= half_oct:
half_oct_temp_list = binary_list[0:4]
for k in range(4):
binary_list.pop(0)
half_oct_list.append(half_oct_temp_list)
mini_list = []
for m in range(len(half_oct_list)):
values = ''
for n in range(len(half_oct_list[m])):
values += half_oct_list[m][n]
mini_list.append(values)
val = ''
for c in range(len(mini_list)):
mini_list[c] = int(mini_list[c])
mini_list[c] = bin_to_dec(mini_list[c])
mini_list[c] = hexshort(mini_list[c])
mini_list[c] = str(mini_list[c])
val += mini_list[c]
return val
该函数对 nbr = 1440 执行的操作示例:
1440 : dectobin
10110100000
[0101, 1010, 0000]
bintodec :
5 10 0
hexa :
5A0
Ps:我知道你可以使用内置函数将十进制转换为二进制和二进制转换为十进制,我只是想挑战自己而不是使用它们。
虽然
getHexChar
返回单个字符串,但 decToHex
确实会动态打印单个数字。从代码中获得预期输出的最小更改可能是:
def main():
og_dec_value = int(input("Enter decimal value: "))
print(og_dec_value,"is equal to",decToHex(og_dec_value), "in hexadecimal")
def decToHex(dec_value):
ret_val = str()
while dec_value > 0:
hex_value=dec_value%16
dec_value=dec_value//16
ret_val = getHexChar(hex_value) + ret_val
return ret_val
def getHexChar(dec_digit):
if dec_digit < 10:
return str(dec_digit)
if dec_digit == 10:
return "A"
if dec_digit == 11:
return "B"
if dec_digit == 12:
return "C"
if dec_digit == 13:
return "D"
if dec_digit == 14:
return "E"
if dec_digit == 15:
return "F"
main()
那不碍事。我真的不确定
hex()
的问题是什么。如果我正在寻找另一种转换为十六进制字符串表示形式的方法,我会(按照 Moinuddin Quadri 的建议)选择相应的格式 '{0:x}'.format(int(dec))
或 '%x' % int(dec)
如果您更喜欢旧的样式(您可能不应该)。
如果这仍然是你想要的,并且你想维持你的阳离子过程,你至少可以显着简化
getHexChar()
,例如通过这样做:
def getHexChar(dec_digit):
return '{:x}'.format(range(16)[dec_digit])
或者我们格式化确实是一种诅咒:
def getHexChar(dec_digit):
return str((tuple(range(10)) + ('a', 'b', 'c', 'd', 'e', 'f'))[dec_digit])
print("{:02X}".format(2555))=====>9FB #as string