为何出现'int is not subscriptable'错误?二进制转十进制转换器开发求助
解决'int is not subscriptable'错误:二进制转十进制转换器修复方案
嘿,我一眼就看出问题所在啦!那个报错的根源是你把原本的字符串类型的binaryNum改成整数了,之后再想用下标binaryNum[power]去访问它,自然就会抛出"int is not subscriptable"的错误——毕竟整数可不是能通过下标取值的序列类型呀。
错误细节拆解
你看这段代码:
while(int(binaryNum))>0: count=count+1 binaryNum=int(binaryNum)//10
一开始binaryNum是用户输入的字符串(比如"101"),但在这个循环里,你把它转成整数后又重新赋值给了binaryNum,循环结束后binaryNum就变成了整数0,这时候第二个循环里的binaryNum[power]当然就会报错啦!
两种修复方案,任你选
方案1:直接操作输入的字符串(更简洁)
既然用户输入的本身就是二进制字符串,我们完全可以直接遍历字符串的每一位,不用转成整数折腾:
binaryNum = input("Enter a binary number: ") decimalNum = 0 # 最左边的二进制位对应的权重是2^(长度-1) power = len(binaryNum) - 1 for bit in binaryNum: if bit == '1': decimalNum += 2 ** power power -= 1 print(decimalNum)
或者用反向遍历的方式,代码更紧凑:
binaryNum = input("Enter a binary number: ") decimalNum = 0 # 反向遍历字符串,索引从0开始对应2^0, 2^1... for index, bit in enumerate(reversed(binaryNum)): if bit == '1': decimalNum += 2 ** index print(decimalNum)
方案2:用整数处理(保留你原本的思路)
如果你坚持想用整数运算的方式,那就要注意不要修改原输入的字符串,而是复制一份转成整数来操作:
binary_str = input("Enter a binary number: ") binary_num = int(binary_str) decimalNum = 0 power = 0 while binary_num > 0: # 取最后一位二进制数 last_bit = binary_num % 10 if last_bit == 1: decimalNum += 2 ** power # 去掉最后一位 binary_num = binary_num // 10 power += 1 print(decimalNum)
两种方案都能实现二进制转十进制的功能,而且完全避开了int()和bin()函数的限制哦!
内容的提问来源于stack exchange,提问作者batteredandspicy
相关产品推荐
相关产品推荐

