十六进制转换为十进制数转换器

问题描述 投票:0回答:3

我如何才能让我的程序更有效率?现在,它充满了if语句。

import copy
def hexadecimal(a):

   z = a.replace('0b','')

   y = z.rjust(8,'0')
   list1 = list(y)
   newlist = []
   for i in range(1,5):
      nig = list1.pop(0)
      newlist.append(nig)       

   if newlist == ['0','0','0','0']:
      valuenew = ''
   if newlist == ['0','0','0','1']:
      valuenew = '1'
   if newlist == ['0','0','1','0']:
      valuenew = '2'
   if newlist == ['0','1','0','0']:
      valuenew = '4'
   if newlist == ['1','0','0','0']:
      valuenew = '8'
   if newlist == ['0','0','1','1']:
      valuenew = '3'
   if newlist == ['0','1','1','1']:
      valuenew = '7'
   if newlist == ['0','1','0','1']:
      valuenew = '5'
   if newlist == ['0','1','1','0']:
      valuenew = '6'
   if newlist == ['1','0','0','1']:
      valuenew = '9'
   if newlist == ['1','0','1','0']:
      valuenew = 'A'
   if newlist == ['1','0','1','1']:
      valuenew = 'B'
   if newlist == ['1','1','0','0']:
      valuenew = 'C'
   if newlist == ['1','1','0','1']:
      valuenew = 'D'
   if newlist == ['1','1','1','0']:
      valuenew = 'E'
   if newlist == ['1','1','1','1']:
      valuenew = 'F'

   if list1 == ['0','0','0','0']:
      valuenew1 = ''
   if list1 == ['0','0','0','1']:
      valuenew1 = '1'
   if list1 == ['0','0','1','0']:
      valuenew1 = '2'
   if list1 == ['0','1','0','0']:
      valuenew1 = '4'
   if list1 == ['1','0','0','0']:
      valuenew1 = '8'
   if list1 == ['0','0','1','1']:
      valuenew1 = '3'
   if list1 == ['0','1','1','1']:
      valuenew1 = '7'
   if list1 == ['0','1','0','1']:
      valuenew1 = '5'    
   if list1 == ['0','1','1','0']:
      valuenew1 = '6'    
   if list1 == ['1','0','0','1']:
      valuenew1 = '9'    
   if list1 == ['1','0','1','0']:
      valuenew1 = 'A'    
   if list1 == ['1','0','1','1']:
      valuenew1 = 'B'    
   if list1 == ['1','1','0','0']:
      valuenew1 = 'C'    
   if list1 == ['1','1','0','1']:
      valuenew1 = 'D'    
   if list1 == ['1','1','1','0']:
      valuenew1 = 'E'    
   if list1 == ['1','1','1','1']:
      valuenew1 = 'F'

   print(valuenew + valuenew1)            

a = str(bin(int(input('enter a number'))))

hexadecimal(a)

该计划只是为了一个二进制转换多达8位

python
3个回答
2
投票

我如何才能让我的程序更有效率?

你可以简单地使用format()hex()函数整数转换为十六进制字符串:

>>> format(255, 'X')
'FF'
>>> hex(255)
'0xff'

0
投票

Python中已经内置了你想要什么hex()东西。但是如果你在制作自己的背水战,我已经做了一些调整你的代码:

(1)由于Python没有switch语句,你能做的最好的就是尽量使用dict代替;我还介绍说,基本上只是引用您hex_digit需要的值(你并不真的需要它,但它抽象化的一部分,如果你需要更换它在未来)一个HEX_DIGIT功能

(2)添加一些逻辑到您的填充,所以它不会只是对8位长度的数字

HEX_DIGITS = {
  '0000': '',
  '0001': '1',
  '0010': '2',
  '0011': '3',
  '0100': '4',
  '0101': '5',
  '0110': '6',
  '0111': '7',
  '1000': '8',
  '1001': '9',
  '1010': 'A',
  '1011': 'B',
  '1100': 'C',
  '1101': 'D',
  '1110': 'E',
  '1111': 'F',
}

def hex_digit(val):
  print('Converting: ' , val)
  return HEX_DIGITS.get(val, '')

def hexadecimal(a):
  z = a.replace('0b','')
  len_z = len(z)

  # Add padding if len not a factor of 4
  if len_z % 4 != 0:
    full_length = len_z + (4 - (len_z % 4))
    z = z.rjust(full_length, '0')

  split_vals = [
    hex_digit(z[idx:idx+4])
    for idx in range(0,len(z),4)
  ]
  print("Hex value: {}".format("".join(split_vals)))

a = str(bin(int(input('Enter a number: '))))

hexadecimal(a)

0
投票

您可以将文字任意字符串,它表示一个数与定基本整数,则该整数转换为字符串。

>> b = '0b01001'
>> format(int(b, 2), 'X')
'9'
>> b = '1001'
>> format(int(b, 2), 'X')
'9'

def hexadecimal(a):
    return format(bin(a, 2), 'X')  # You could also print it
© www.soinside.com 2019 - 2024. All rights reserved.