(Python)TypeError:'float'对象不可订阅

时间:2017-10-29 01:32:42

标签: python floating-point pi

我终于有耐心再次使用Python而且我正在尝试一些数学的东西重新进入,但我现在正在尝试制作一个Python脚本,它提出了“浮动”对象不可订阅'错误。 我再次回到Python,我不知道这意味着什么。这可能是显而易见的,但我在stackoverflow上看到的只是人们告诉别人如何修复他们的特定代码而不是解释它的含义所以我不知道是什么导致它。我所知道的是它与Pi是一个十进制数(浮点数??)有关,但我不明白为什么它不能得到它的第n个字符。

第11行出现“if pi [digit] == digitChar:”。这是我的代码:

pi = 0
divideBy = 1
digit = 1
digitChar = 3
digitOccurance = 1
while True:
    pi = pi - 4 / divideBy
    divideBy = divideBy + 2
    pi = pi + 4 / divideBy
    divideBy = divideBy + 2
    if pi[digit] == digitChar:
        digit = digit + 1
        digitOccurance = 0
        print(digitChar)
    else:
        digitChar = pi[digit]

最后一点代码基本上是为了阻止垃圾邮件,一次只显示一位数。这是为了获得'pi'的[数字]数字并测试它是否与前一个相同。如果是,它会沿着一个字符移动并打印字符[digitChar]。

非常感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

对于浮点数(和整数),您不能简单地访问第n个字符。这就是“不可订阅”的意思。

另一方面的字符串是可订阅的(列表和字典也是如此)。所以最基本的解决方法是将浮点数转换为字符串。但新问题是“。”在float中是字符串的一部分。因此,在执行str(pi)[digit] == digitChar时,您必须确保类型对齐。你可以做int(str(pi)[digit]) == digitChar,但这对于“。”来说会失败。字符。或者,您可以执行str(pi)[digit] == str(digitChar),这对所有事情都有效。

您也可以对其进行设置,以便digitChar始终为字符串。既然你已经调用它digitCar,那么变量的类型也是一个字符串是有意义的。

pi = 0
divideBy = 1
digit = 1
digitChar = '3'
digitOccurance = 1
while True:
    pi = pi - 4 / divideBy
    divideBy = divideBy + 2
    pi = pi + 4 / divideBy
    divideBy = divideBy + 2

    # digitChar is a string
    if str(pi)[digit] == digitChar:
        digit = digit + 1
        digitOccurance = 0
        print(digitChar)
    else:
        # make sure to maintain `digitChar` as a string/char type
        digitChar = str(pi)[digit]

至于输出,看起来你的逻辑中有一些错误会妨碍你获得正确的输出。

答案 1 :(得分:0)

import math
from math import pi as pi #use pythons math pi or you can add your own
divideBy = 1
digit = 1
digitChar = 3
digitOccurance = 1
PI = str(pi) # convert float pi to string so you can do your calculations and use the str
while True:
    pi = pi - 4 / divideBy
    divideBy = divideBy + 2
    pi = pi + 4 / divideBy
    divideBy = divideBy + 2
    try: 
        if PI[digit] == digitChar:
            digit = digit + 1
            digitOccurance = 0
            print(digitChar)
        else:
            digitChar = PI[digit]

    except IndexError: # stop the index error that is produced
        break

答案 2 :(得分:-1)

“下标”是指使用[]进行索引。 float不可索引,因为它不是序列或容器。您可以使用str(pi)[digit],但这包括小数点。