Почему я получаю сообщение об ошибке «int is subscriptable»? - PullRequest
0 голосов
/ 29 апреля 2019

Я делаю двоичный в десятичный преобразователь, и мы не можем использовать int () или bin ().Я думаю, что я получил правильный код, за исключением того, что он продолжает говорить мне, что "int is subscripts"!ПОМОГИТЕ!

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 голосов
/ 29 апреля 2019

После первого цикла binaryNum - это число, а не строка.

Смысл ограничения заключается в том, что вы вообще не должны преобразовывать ввод в число, и вы используете int три раза, что в три раза больше, чем выразрешено.

Вместо этого проведите цикл по цифрам во входной строке.
На каждой итерации умножьте на два.
Если цифра '1', добавьте единицу к результату.

binaryNum = input("Enter a binary number: ")
number = 0
for digit in binaryNum:
    number *= 2
    if digit == '1':
        number += 1
0 голосов
/ 29 апреля 2019

Вы можете сделать это просто так (функция ord вернет ASCII-значение заданного числа, поэтому, если вы вычтите число из 48, которое является значением ASCII '0', вы легко конвертируете число)

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
...