Python 如果biNumber[I]=";“1”节:类型错误:';int';对象不可下标,我想知道是否有人能告诉我为什么?

Python 如果biNumber[I]=";“1”节:类型错误:';int';对象不可下标,我想知道是否有人能告诉我为什么?,python,Python,这是我的完整代码: def bin2dec(biNumber): 数字=0 步长=128 对于范围(0,8)内的i: 如果biNumber[i]=“1”: 数字+=步长 步骤=步骤/2 报税表(数字) number=int(输入(“输入binnumber”)) 答案=bin2dec(数字) 打印(数字) 您必须将数字转换为字符串才能将其切分。试着这样做: def bin2dec(biNumber): deCnumber=0 step = 128 biNumber_str

这是我的完整代码:

def bin2dec(biNumber):
数字=0
步长=128
对于范围(0,8)内的i:
如果biNumber[i]=“1”:
数字+=步长
步骤=步骤/2
报税表(数字)
number=int(输入(“输入binnumber”))
答案=bin2dec(数字)
打印(数字)

您必须将数字转换为字符串才能将其切分。试着这样做:

def bin2dec(biNumber):
    deCnumber=0
    step = 128
    biNumber_str = str (biNumber)
    for i in range (len (biNumber_str)):
        if biNumber_str[i] == "1":
            deCnumber += step
            step = step/2
    return(deCnumber)

number = int(input("Enter a binnumber"))
answer = bin2dec(number)
print(answer)

通过使函数不知道要转换的二进制数的长度,可以使函数变得更好

此外,由于函数需要一个字符串作为参数,因此不需要将输入强制转换为
int()

大概是这样的:

def bin2dec(biNumber):
    deCnumber=0
    step = 128
    biNumber_str = str (biNumber)
    for i in range (len (biNumber_str)):
        if biNumber_str[i] == "1":
            deCnumber += step
            step = step/2
    return(deCnumber)

number = int(input("Enter a binnumber"))
answer = bin2dec(number)
print(answer)
def bin2dec(b):
d=0
阶跃=2**(透镜(b)-1)
对于范围内的i(len(b)):
如果b[i]=“1”:
d+=阶跃
步骤=步骤//2
返回(d)
b=输入(“输入二进制数”).strip()
打印(bin2dec(b))
以下是概念证明:

def bin2dec(b): ... d=0 ... 阶跃=2**(透镜(b)-1) ... 对于范围内的i(len(b)): ... 如果b[i]=“1”: ... d+=阶跃 ... 步骤=步骤//2 ... 返回d ... >>>bin2dec('1111111111111111111111111111 00000000000000001') 4611686018423193601 >>>bin2dec('1') 1. >>>bin2dec('0') 0 >>>bin2dec('11') 3. >>> 还有更多可以改进的地方,例如,验证输入以查看它是否仅由
组成。但我会留给你去弄清楚

最后,这里是一个使用连续幂2代替除法的替代实现:

def bin2dec(b):
d=0
对于枚举中的i,n(b[:-1]):
d+=int(n)*2**i
返回d
还有一种更具python风格的方法:

def bin2dec(b):
返回和((int(n)*2**i表示i,n表示枚举(b[:-1]))

您可以使用
int(输入(“…”,base=2)
?欢迎使用堆栈溢出!该错误告诉您,
biNumber[i]
没有意义,因为您无法索引为整数。另外,python中命名变量的指导原则是使用snake大小写,例如
biNumber->bi_number