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")
它向我显示了一个错误,我无法将浮点数添加到列表中。
询问号码后,它可以控制号码的类型。如果它是整数,则没有任何问题。但是当它是一个浮点数时,它说它不能将一个浮点数添加到保存以前执行的操作数的列表中。
有人可以向我解释为什么我不能将浮点数添加到列表中或者如何解决该问题吗?
回溯(最近一次通话最后一次):文件“ Converter.py”,行169,在 convBin();在convBin中的文件“ Converter.py”,第53行 dev.append(rest [i])TypeError:列表索引必须为整数或 切片,而不是漂浮的
谢谢。
答案 0 :(得分:1)
for i in rest
将为您提供列表中的实际项目,而不是索引。从您的代码看来,您似乎想附加该值。但是实际上,您将值再次视为索引,并尝试从数组中获取它。
for i in rest:
dev.append(rest[i])
修复:
只需在上方更改为:
dev.extend(rest)
但是这段代码从休息中获取了一个值,然后再次将该值用作索引,如果该值i
变成了float
,则会引发异常。
您没有提到哪一行会给您此错误。但是我认为一定是这个。它可能会带来许多其他意外错误,例如array out of bound
等
如果我为valor = 18.5运行您的代码,这就是我得到的错误
回溯(最近一次通话最后一次):文件“ ./prog.py”,第71行,在 convBin TypeError:列表中的文件“ ./prog.py”,第51行 索引必须是整数或切片,而不是浮点数
上面的示例与下面的示例之间的区别(来自您处理int
的代码):
x = 0
while x <= (len(rest) - 1):
dev.append(rest[x])
x += 1
在第一种情况下,我实际上是列表其余部分中的项目(int或float),而在后一种情况下,它是有效索引。