我正在Visual Studio上研究python Project和类似010203
的用户输入,
我使用以下代码来节省输入量:
dynamic_array = [ ]
hexdec = input("Enter the hex number to binary ");
strArray = [hexdec[idx:idx+2] for idx in range(len(hexdec)) if idx%2 == 0]
dynamic_array = strArray
print(dynamic_array[0] + " IAM" )
print(dynamic_array[1] + " NOA" )
print(dynamic_array[2] + " FCI" )
因此,输出为:
01 IAM
02 NOA
03 FCI
但是我将十六进制数转换为二进制数的预期输出如下:
00000001 IAM
00000010 NOA
00000011 FCI
有什么办法吗?
答案 0 :(得分:3)
如果您将十六进制作为整数(数字),则容易得多。
关于如何将整数转换为不同结果的技巧很多,但是.format()
是一个有用的字符串表示工具,可以将整数(和其他整数)格式化为各种输出。
这是以下各项的组合:
解决方案是:
binary = '{:08b}'.format(int(hex_val, 16))
最终结果代码如下:
def toBin(hex_val):
return '{:08b}'.format(int(hex_val, 16)).zfill(8)
hexdec = input("Enter the hex number to binary ");
dynamic_array = [toBin(hexdec[idx:idx+2]) for idx in range(len(hexdec)) if idx%2 == 0]
print(dynamic_array[0] + " IAM" )
print(dynamic_array[1] + " NOA" )
print(dynamic_array[2] + " FCI" )
罗希特(Rohit)还提出了一个很好的解决方案,但我建议您将toBin()
的内容换成bin(int())
,而不是按照每个打印语句来做。
我还对代码进行了一些重组,因为用空列表初始化dynamic_array
毫无意义。 Python不需要在为变量赋值之前先设置变量。创建strArray
只是用它替换空的dynamic_array
也没有意义,因此将三行连接成一行。
machnic还指出了一个很好的编程技巧,即在整个字符串上使用format()
。使得代码很易读:)
希望这会有所帮助,并且我的提示有意义。
答案 1 :(得分:0)
dynamic_array = [ ]
hexdec = input("Enter the hex number to binary ");
strArray = [hexdec[idx:idx+2] for idx in range(len(hexdec)) if idx%2 == 0]
dynamic_array = strArray
print((bin(int(dynamic_array[0],16))[2:]).zfill(8)+ " IAM" )
print((bin(int(dynamic_array[1],16))[2:]).zfill(8) + " NOA" )
print((bin(int(dynamic_array[2],16))[2:]).zfill(8) + " FCI")
答案 2 :(得分:0)
您可以format
字符串来实现它。您的代码可能类似于:
dynamic_array = [ ]
hexdec = input("Enter the hex number to binary ")
strArray = [hexdec[idx:idx+2] for idx in range(len(hexdec)) if idx%2 == 0]
dynamic_array = strArray
print("{:08b} IAM".format(int(dynamic_array[0])))
print("{:08b} NOA".format(int(dynamic_array[1])))
print("{:08b} FCI".format(int(dynamic_array[2])))