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