尝试列表操作时出现浮动对象错误

时间:2018-05-17 13:55:54

标签: python

我基本上试图重新创建一些算法。用户应该从键盘输入值,然后将它们转换为列表。之后,我想从列表中添加两个最小值,然后重复,直到我得到值1.但是,我得到以下错误:

Traceback (most recent call last):
  ********* line 13, in <module>
    while n[:1] != 1.0:
TypeError: 'float' object is not subscriptable

这是我的代码:

a = input("Enter values: \n")
n = list(map(float, a.split(' '))) 
OK = 1
if OK:
    while n[:1] != 1.0:
        n = sorted(n)
        print(n)
        n[1] = n[0] + n[1]
        n = n.pop(0)
print(n)

2 个答案:

答案 0 :(得分:3)

首先,您可能希望使用<作为您的条件而不是精确的!=检查,因为您正在处理不精确的浮点数。其次,你不断改变列表和浮点数之间n的类型(通过赋予它pop的值)。这是您的代码的固定版本:

a = input("Enter values: \n")
n = list(map(float, a.split(' ')))
OK = 1
if OK:
    while n[0] < 1.0:          # Access the first element with [0] not by slicing with [:1]
        n = sorted(n)
        print(n)
        n[1] = n[0] + n[1]
        n.pop(0)               # Here don't assign this result back to n
print(n)

我不会解决其他人提到的输入值大于1的情况,我相信你在其余的代码中正确处理它

这是一个示例运行:

Enter values:
0.2 0.1 0.4 0.6 0.4 0.7

[OUTPUT]
[0.1, 0.2, 0.4, 0.4, 0.6, 0.7]
[0.30000000000000004, 0.4, 0.4, 0.6, 0.7]
[0.4, 0.6, 0.7, 0.7000000000000001]
[1.0, 0.7, 0.7000000000000001]

答案 1 :(得分:2)

我认为它打印n一次?

在您的倒数第二行,您执行n = n.pop(0),这意味着之前为n的{​​{1}}现在为list。如果float是浮点数,则无法调用n[:1]

我不是100%你想要达到的目标,但试试这个:

n