这里是python的新手,我尝试了以下代码:
binary = [0, 0, 0, 0, 1, 1, 0, 0]
def bin_to_dec(binary):
num = 0
ini = 0
sum1 = 0
print()
#print("Binary: ",binary)
for i in binary[::-1]:
num = 2**(ini) * binary[-i]
print("Binary -i: " , binary[-i])
print("num: ", num)
sum1 = sum1 + num
print("i: ", i)
print("ini: ", ini)
print("Sum: " , sum1)
print()
ini = ini + 1
print("Result in integer: ", sum1)
return sum1
bin_to_dec(binary)
就像问题所说的,如果列表中的最后一个项目是1,它就有效,但如果它是0,它就无效。我不明白为什么。
由于您已经在binary
中进行迭代,因此应该只使用i
而不是binary[-1]
,这是关键问题。
i
为您提供每个索引的实际值。- 如果同时需要索引和值,请使用
for idx, val for enumerate(binary)
- 如果你只是想要索引,
for idx in range(len(binary))
就足够了
- 如果同时需要索引和值,请使用
binary[-i]
将根据您使用的0
或1
而有所不同。- 例如,对于第二个索引,
binary[-i]
将是binary [-0]
,这是不正确的
- 例如,对于第二个索引,
固定代码:
binary = [0, 0, 0, 0, 1, 1, 0, 0]
def bin_to_dec(binary):
num = 0
ini = 0
sum1 = 0
print()
#print("Binary: ",binary)
for i in binary[::-1]:
num = 2**(ini) * i
print("i: " , i)
print("num: ", num)
sum1 = sum1 + num
print("ini: ", ini)
print("Sum: " , sum1)
print()
ini = ini + 1
print("Result in integer: ", sum1)
return sum1
bin_to_dec(binary)
样品:https://ideone.com/edm8Rj
您也可以使用不同的方法,例如以下方法:
def bin_to_dec(binary):
num = 0
for i in range(len(binary)):
num += binary[(-i-1)]*(2**i)
return num
您的代码将二的幂乘以二进制[-i],您希望它是从末尾开始的第i位,但您的i变量不包含索引,它包含该位置的位。因此,结果将由第一位和最后一位(索引-0和-1(的组合形成,而不是您所期望的。
一种更简单的方法是在比特中向前移动,并在添加每个比特之前将先前的结果乘以2
num = 0
for bit in binary:
num = num * 2 + bit