我如何才能让我的程序更有效率?现在,它充满了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中已经内置了你想要什么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)
您可以将文字任意字符串,它表示一个数与定基本整数,则该整数转换为字符串。
>> 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