第14行是我的主要问题所在。我需要循环遍历数组中的每个项目并使用它的索引来确定它是否是四的倍数,这样我就可以为二进制数创建适当的间距
def decimalToBinary(hu):
bits = []
h = []
while hu > 0:
kla = hu%2
bits.append(kla)
hu = int(hu/2)
for i in reversed(bits):
h.append(i)
if len(h) <= 4:
print (''.join(map(str,h)))
else:
for j in range(len(h)):
h.index(1) = h.index(1)+1
if h.index % 4 != 0:
print (''.join(map(str,h)))
elif h.index % 4 == 0:
print (' '.join(map(str,h)))
decimalToBinary( 23 )
答案 0 :(得分:0)
如果您要查找的内容是range(len(h))
循环中for
列表的索引,那么您可以将该行更改为for idx,j in enumerate(range(len(h))):
,其中idx
为范围的索引。
答案 1 :(得分:0)
此行h.index(1) = h.index(1)+1
不正确。修改了你的功能,所以至少它执行并生成一个输出,但是它是否正确,我不知道。无论如何,希望它有所帮助:
def decimalToBinary(hu):
bits = []
h = []
while hu > 0:
kla = hu%2
bits.append(kla)
hu = int(hu/2)
for i in reversed(bits):
h.append(i)
if len(h) <= 4:
print (''.join(map(str,h)))
else:
for j in range(len(h)):
h_index = h.index(1)+1 # use h_index variable instead of h.index(1)
if h_index % 4 != 0:
print (''.join(map(str,h)))
elif h_index % 4 == 0:
print (' '.join(map(str,h)))
decimalToBinary( 23 )
# get binary version to check your result against.
print(bin(23))
结果:
#outout from decimalToBinary
10111
10111
10111
10111
10111
#output from bin(23)
0b10111
答案 2 :(得分:0)
您正尝试将这些位加入字符串并将它们每4位分开。您可以使用Marcin的修正来修改您的代码(通过替换语法错误行并进行其他一些改进),但我建议您更多地进行更多操作&#34; Python,&#34;。
这是我的版本:
def decimalToBinary(hu):
bits = []
while hu > 0:
kla = hu%2
bits.append(kla)
hu = int(hu/2)
h = [''.join(map(str, bits[i:i+4])) for i in range(0,len(bits),4)]
bu = ' '.join(h)
print bu[::-1]
h分配线的说明:
range(0,len(bits),4)
:从0到bits
长度的列表,步长= 4,例如。 [0,4,8,...]
[bits[i:i+4] for i in [0, 4, 8]
:列表的列表,其元素是来自位的每四个元素
例如。 [[1,0,1,0],[0,1,0,1] ...]
[''.join(map(str, bits[i:i+4])) for i in range(0,len(bits),4)]
:将内部列表转换为字符串
bu[::-1]
:反转字符串
答案 3 :(得分:0)
如果你正在学习Python,那么按照自己的方式行事会很好。正如@roippi指出的那样,
for index, value in enumerate(h):
将允许您访问每个循环中h的成员的索引和值。
要分组4位数字,我会这样做:
def decimalToBinary(num):
binary = str(bin(num))[2:][::-1]
index = 0
spaced = ''
while index + 4 < len(binary):
spaced += binary[index:index+4]+' '
index += 4
else:
spaced += binary[index:]
return spaced[::-1]
print decimalToBinary(23)
结果是:
1 0111