Python-将二进制(列表)转换为十进制

时间:2020-10-16 14:53:03

标签: python math binary

我一直在尝试编写代码以将二进制列表转换为十进制,例如:

[1,1,0,1] 

到目前为止,我编写的代码如下:

def binatodeci(binary):
    binary = []
    decimal = 0 
    binary.reverse()
    for i in range(len(binary)):
        decimal = decimal + (2**i)*binary[i]
    return decimal

但是,每次我尝试使用此函数时,它都会返回0。为什么会这样?我似乎无法在代码中发现错误。

2 个答案:

答案 0 :(得分:2)

Cory Kramer's answer中所述,只需删除代码开头的binary = []行,即可正常运行。

这是一种可供选择的算法,值得深思:

def binatointeger(binary):
  number = 0
  for b in binary:
    number = (2 * number) + b
  return number

重要提示

请注意,结果数字以十进制形式。这是一个python整数。在计算机内部,python整数存储在二进制文件中。调用函数printstrrepr以将数字打印到屏幕时,会转换为十进制表示形式,即转换为一串数字。

答案 1 :(得分:1)

在代码中,只需删除此行,因为您将立即重新分配函数输入参数

binary = []

更简洁的选择

def binatodeci(binary):
    return sum(val*(2**idx) for idx, val in enumerate(reversed(binary)))

示例

>>> binatodeci([1,1,0,1])
13