Ошибка типа: индексы списка должны быть целыми числами или частями, а не плавающими - PullRequest
0 голосов
/ 27 сентября 2018
def convBin():
    cont = []
    rest = []
    dev = []
    decimal = []

    print("Ingrese el valor a convertir: ")
    valor = ast.literal_eval(input())

    if isinstance(valor, int):
        while valor > 0:
                z = valor // 2
            resto = valor%2
            valor = valor // 2
            cont.append(z)
            rest.append(resto)

        cont.reverse()
        rest.reverse()

        dev.append(cont[0])

        x = 0
        while x <= (len(rest) - 1):
            dev.append(rest[x])
            x += 1

        print(" ")
        print("Lista de devoluciones: ")
        print(dev)
        print("")

    elif isinstance(valor, float):
        a = valor // 1
        b = valor % 1

        while a > 0:
            z = a // 2
            resto = a%2
            a = a // 2
            cont.append(z)
            rest.append(resto)

        cont.reverse()
        rest.pop()

        dev.append(cont[1])

        for i in rest:
            dev.append(rest[i])

        print("Inserte el número de error minimo")
        num = input()

        while num > 0:
            dec = b * 1
            dec2 = dec//1
            dec %= 1        
            decimal.append(dec2)


        print("Parte entera: ")
        print(dev)
        print("Parte decimal:")
        print(num)

    else:
        print("Ha aparecido un error")

Это показывает мне ошибку, что я не могу добавить плавание в список.

После того, как вы спросите номер, он определяет, какой это номер.Когда это int, у него нет никаких проблем.Но когда это число с плавающей точкой, оно говорит, что не может добавить число с плавающей точкой в ​​список, в котором сохранены номера операций, выполненных ранее.

Может кто-нибудь объяснить мне, почему я не могуappend всплывает в список или как я могу решить проблему?

Traceback (последний вызов был последним): файл "Converter.py", строка 169, в convBin ();Файл "Converter.py", строка 53, в convBin dev.append (rest [i]) TypeError: списочные индексы должны быть целыми числами или слайсами, а не с плавающей точкой

Спасибо.

1 Ответ

0 голосов
/ 27 сентября 2018

for i in rest даст вам актуальный элемент в списке, а не индекс.Из вашего кода кажется, что вы хотите добавить значение.Но на самом деле вы снова воспринимаете значение как индекс и пытаетесь извлечь его из массива.

for i in rest:
            dev.append(rest[i])

Исправление:

Просто измените выше значение на:

dev.extend(rest)

Но этот код берет значение из остатка, затем снова использует это значение в качестве индекса, и если это значение i оказывается float, оно выдает исключение.

Вы не упомянули, какая строка дает вам эту ошибку.Но я думаю, что это должно быть этим.Это может привести ко многим другим неожиданным ошибкам, таким как array out of bound и т. Д.

. Это ошибка, которую я получаю, если я запускаю ваш код для valor = 18.5

https://ideone.com/HGagLb

Traceback (последний вызов был последним): Файл "./prog.py", строка 71, в файле "./prog.py", строка 51, в convBin TypeError: индексы списка должны быть целыми числами или слайсами, а не плавающими

Разница между приведенным выше примером и приведенным ниже (из вашего кода, где вы обрабатываете int):

x = 0
while x <= (len(rest) - 1):
    dev.append(rest[x])
    x += 1

заключается в том, что в первом случае яна самом деле это элемент (int или float) в остальной части списка, а в последующем это допустимый индекс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...