【问题标题】:Python function to convert Binary digit to HexadecimalPython函数将二进制数字转换为十六进制
【发布时间】:2019-08-12 00:48:11
【问题描述】:

我在将二进制数字转换为十六进制的程序中遇到了另一个问题。我的程序运行良好,但以小型大写字母显示十六进制数字,但答案必须是大写字母,如question and sample run

所示

这是我的代码

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()

This is what is displayed when I run

【问题讨论】:

  • 使用upper 而不是capitalize
  • umm hexa[ 2:4] 不会只是去掉前两位数字...那就是[2:]...虽然这是某种练习,你不能只使用:format(int(binaryValue, 2), 'X') ?
  • @JonClements 我认为对此没有任何限制。我可以使用它

标签: python python-3.x hex


【解决方案1】:

既然这个问题出现了很多 - 这是一个相当 Pythonic 的答案,希望可以作为未来问题的规范参考。

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

binary_value = input('Enter a binary number: ')

然后使用内置 intbase 参数 2(表示将字符串解释为二进制数字)从字符串中获取整数:

number = int(binary_value, 2)
# 10001111 -> 143

然后您可以使用f-string 来打印您的号码,并使用格式说明符X 表示“带有大写字母且无前缀的十六进制”:

print(f'The hex value is {number:X}')

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

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(binaryValue): decvalue=int(binaryValue,2) hexadecimal=hex(decvalue) return hexadecimal def main(): binaryValue = input("输入一个二进制数: ") hexval=binaryToHex(binaryValue) hexa=hexval.upper() print(f'十六进制值为{hexval:X}') main()
  • 我收到一个错误,即“str”类型的对象的未知格式代码“X”
  • @PatienceMuthoki 是的...因为您不想进行任何其他字符串对话,所以您确实想打印带有格式说明符 X 的 int,它为你。你实际上只需要上面的 3 行......你不需要对 hex 或任何其他东西做任何事情。
  • 所以 1) 获取输入,2) 将其转换为整数,3) 使用格式说明符打印该数字
【解决方案2】:

您犯的一个错误是代码中不存在 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

【讨论】:

  • 感谢它在我的本地机器上运行,尽管用于标记的程序指示错误,标准输出不是预期的
  • 您能否发布错误消息。我无法理解您面临的问题
【解决方案3】:

只做一个函数...

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}')

【讨论】:

  • 您是否尝试过输入00000000 - .lstrip 并没有按照您的想法进行操作...
  • 当然,我已经尝试过@Wira Bhakti 所做的事情,但没有显示正确的内容。此外,我们需要使用 2 个函数
  • @JonClements 你能解释一下为什么 'X0X'.lsplit('X0') 解释为“”(空白字符串)...?
  • @Wira .lstrip 删除从字符串开头给出的字符串中的所有字符(不是整个字符串本身),直到遇到不在字符中的字符给定....因此... 'ABCABCABC'.lstrip('BCA') 会给你一个空字符串,但'ABCABCDABC'.lstrip('BCA') 会给你'DABC'...
猜你喜欢
  • 2013-11-24
  • 2012-12-14
  • 2016-09-15
  • 2012-06-26
  • 1970-01-01
  • 2017-05-26
  • 1970-01-01
  • 2016-08-28
相关资源
最近更新 更多