用于将二进制数字转换为十六进制的Python函数

用于将二进制数字转换为十六进制的Python函数,python,python-3.x,hex,Python,Python 3.x,Hex,我还有一个将二进制数字转换为十六进制的程序的问题。我有一个运行良好的程序,但显示十六进制数字的小大写字母,虽然答案必须是大写字母,如图所示 这是我的密码 def binaryToHex(binaryValue): #convert binaryValue to decimal decvalue = 0 for i in range(len(binaryValue)): digit = binaryValue.pop() if digit == '1': decv

我还有一个将二进制数字转换为十六进制的程序的问题。我有一个运行良好的程序,但显示十六进制数字的小大写字母,虽然答案必须是大写字母,如图所示

这是我的密码

def binaryToHex(binaryValue):
#convert binaryValue to decimal

decvalue = 0
for i in range(len(binaryValue)):
    digit = binaryValue.pop()
    if digit == '1':
        decvalue = decvalue + pow(2, i)

#convert decimal to hexadecimal
hexadecimal=hex(decvalue)
return hexadecimal
def main():
  binaryValue = list(input("Input a binary number: "))
  hexval=binaryToHex(binaryValue)

  hexa=h1.capitalize() #Tried to use capitalize() function but didn't worl
  print("The hex value is",hexa[ 2:4]) #strips off the first 2 digits
main()

您犯的一个错误是h1在代码中不存在,但它仍然存在

字符串上的.upper()将其更改为大写

def main():
    binaryValue = list(input("Input a binary number: "))
    hexval=binaryToHex(binaryValue)
    hexa=hexval.upper() 
    print("The hex value is",hexa[ 2:4]) #strips off the first 2 digits
输出:

Input a binary number: 10001111
The hex value is 8F

因为这是一个很好的答案,这里有一个很好的python式的答案,希望能作为未来问题的规范参考

首先,只需将输入保持为字符串:

binary_value = input('Enter a binary number: ')
然后使用内置的
int
base
参数2(表示将字符串解释为二进制数字)从字符串中获取整数:

number = int(binary_value, 2)
# 10001111 -> 143
然后,您可以使用
f-string
打印带有格式说明符
X
的数字,这意味着“十六进制大写字母,无前缀”:

然后,您的整个代码库将类似(坚持使用两个函数和命名约定):


只做一个函数

def binaryToHex():
    binval = input('Input a binary number : ')
    num = int(binval, base=2)
    hexa = hex(num).upper().lstrip('0X')
    print(f'The hex value is {hexa}')

使用
upper
而不是
capitalize
。嗯
hexa[2:4]
不仅仅是去掉前两个数字。。。那就是
[2:][/code>。。。另外,我认为这是某种练习,不允许只使用:
格式(int(binaryValue,2),'X')
?@JonClements我认为这没有任何限制。我可以使用它,因为它已经在我的本地机器上运行了,尽管用于标记的程序显示了一个错误,即标准输出不是预期的结果。您可以发布错误消息吗。我无法理解您面临的问题我已将代码更改为def binarytochex(binaryValue):decvalue=int(binaryValue,2)hexadecimal=hex(decvalue)return hexadecimal def main():binaryValue=input(“输入二进制数:”)hexval=binarytochex(binaryValue)hexa=hexval.upper()打印(f'hex'hex值为{hexval:X}')main()我收到一个错误,类型为“str”的对象的未知格式代码“X”@PatienceMuthoki Yes。。。因为您不想进行任何其他字符串对话,所以您实际上想要打印使用格式说明符X得到的
int
,它可以为您完成所有这些。你实际上只需要上面的3行。。。你不需要对hex或其他任何东西做任何事情。因此1)获取输入,2)将其转换为整数,3)使用格式说明符打印该数字您是否使用
00000000
-
.lstrip
的输入进行过尝试。lstrip
不会执行您认为它在此处执行的操作…确保我已尝试@Wira Bhakti所执行的操作,并且没有显示正确的内容。此外,我们需要使用2functions@JonClements您能解释一下为什么“X0X”.lsplit('X0')被解释为“”(空白字符串)..@Wira
.lstrip
会从字符串的开头删除给定字符串中的所有字符(而不是整个字符串本身),直到遇到不在给定字符中的字符为止。。。。因此
'abcabc'.lstrip('BCA')
将为您提供一个空字符串,但
'abcabcdab'.lstrip('BCA')
将为您提供
'DABC'
。。。
def binaryToHex(binaryValue):
    number = int(binaryValue, 2)
    return format(number, 'X')

def main():
    binaryValue = input('Enter a binary number: ')
    print('The hex value is', binaryToHex(binaryValue))

main()
def binaryToHex():
    binval = input('Input a binary number : ')
    num = int(binval, base=2)
    hexa = hex(num).upper().lstrip('0X')
    print(f'The hex value is {hexa}')