我一直在尝试编写代码以将二进制列表转换为十进制,例如:
[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。为什么会这样?我似乎无法在代码中发现错误。
答案 0 :(得分:2)
如Cory Kramer's answer中所述,只需删除代码开头的binary = []
行,即可正常运行。
这是一种可供选择的算法,值得深思:
def binatointeger(binary):
number = 0
for b in binary:
number = (2 * number) + b
return number
请注意,结果数字以十进制形式不。这是一个python整数。在计算机内部,python整数存储在二进制文件中。调用函数print
,str
或repr
以将数字打印到屏幕时,会转换为十进制表示形式,即转换为一串数字。
答案 1 :(得分:1)
在代码中,只需删除此行,因为您将立即重新分配函数输入参数
binary = []
更简洁的选择
def binatodeci(binary):
return sum(val*(2**idx) for idx, val in enumerate(reversed(binary)))
示例
>>> binatodeci([1,1,0,1])
13