You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何出现'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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 06:37:49