为什么会出现“ int is not subscribeable”错误消息?

时间:2019-04-29 10:45:02

标签: python binary int

我正在制作一个二进制到十进制的转换器,我们不能使用int()或bin()。我认为我的代码正确,只不过它一直告诉我“ int不可下标”!帮助!

binaryNum = input("Enter a binary number: ") decimalNum = 0 count=0

while(int(binaryNum))>0:
    count=count+1
    binaryNum=int(binaryNum)//10
    power = count

while power >= 0:
    if int(binaryNum[power]) == '1': #here is the problem
        decimalNum += 2**power
        power -= 1


print(decimalNum)

2 个答案:

答案 0 :(得分:0)

您可以像这样简单地进行操作((ord函数将返回给定数字的ASCII值,因此,如果从48中减去数字即ASCII值“ 0”,则可以轻松地转换数字)< / p>

binary = input('enter a number: ')
decimal = 0
for digit in binary:
    digit = ord(digit) - 48 
    decimal = decimal*2 + digit
print(decimal)

如果您不想使用其他功能,可以这样做

binary = input('enter a number: ')
decimal = 0
for digit in binary:
    digit = 1 if digit == '1' else 0
    decimal = decimal*2 + digit
print(decimal)

您的问题原因是您无法迭代整数

while(int(binaryNum))>0:
    count=count+1
    binaryNum=int(binaryNum)//10 ### here you assign binaryNum as integer
    power = count

while power >= 0:
    if int(binaryNum[power]) == '1': ### and you cant iterate binaryNum because it is an integer
        decimalNum += 2**power
        power -= 1

答案 1 :(得分:0)

在第一个循环之后,binaryNum是一个数字,而不是字符串。

限制的要点是,您根本不应该将输入转换为数字,而您正在使用int 3 次,这是您的三倍。允许。

相反,循环输入字符串中的数字。
每次迭代都乘以2。
如果数字为'1',则将结果加1。

binaryNum = input("Enter a binary number: ")
number = 0
for digit in binaryNum:
    number *= 2
    if digit == '1':
        number += 1