为什么我的节目"停止"工作?

时间:2015-01-25 18:09:47

标签: python python-3.x

我制作了一个程序来计算pi(虽然有点乐趣,但我不想使用Python 3.3.2中内置的pi)。它工作正常 - 它获得pi的正确值,最多7位小数。但是,一旦达到这一点,程序将继续,但值不会改变。我已经尝试使用decimal.Decimal,但它不起作用 - 它出现以下错误:

  

TypeError:+:' decimal.Decimal'不支持的操作数类型并且'浮动'

这是我的工作代码(使用浮点数而不是小数。)我只包含了实际的算法:

pi=float(3)
a=2
b=0
c=float(0)
while 1==1:
    b=a*(a+1)*(a+2)
    c=4/b
    pi=pi+c
    print(str(pi))
    a=a+2
    b=a*(a+1)*(a+2)
    c=4/b
    pi=pi-c
    print(str(pi))
    a=a+2

这就是结果: http://i.imgur.com/y0qgBMB.png(抱歉,我没有足够的声誉直接发布图片)

请注意,该程序实际上比此更早停止工作,我只是将它留在那里一段时间。 我知道我使用的算法能够将pi发现到更多的小数位,所以有人可以告诉我为什么它不起作用,并给我任何可能的解决方案? 正如您可能从我的代码的简单性中注意到我不太擅长python - 只有我在学校教过的基本知识。非常感谢简单的解决方案! 编辑 这是带有Decimal的非工作代码,以及Jasper的建议。    import decimal pi=decimal.Decimal(3) a=2 b=0 c=decimal.Decimal(0) while True: b=a*(a+1)*(a+2) c=4/b pi=pi+c print(str(pi)) a=a+2 b=a*(a+1)*(a+2) c=4/b pi=pi-c print(str(pi)) a=a+2 这是错误:

  

追踪(最近一次通话):   文件" C:\ Users ... \ fastpi2.py",第9行,in   pi = pi + c TypeError:+:' decimal.Decimal'不支持的操作数类型并且'浮动'

1 个答案:

答案 0 :(得分:0)

您的代码失败,因为两个整数的划分导致浮点(在Python 3中):

>>> from decimal import Decimal
>>> pi = Decimal(3)
>>> a=2
>>> b=a * (a+1) * (a+2)
>>> c=4/b
>>> type(c)
<class 'float'>
>>> pi = pi + c
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'Decimal' and 'float'

以下作品:

>>> a = Decimal(2)
>>> one = Decimal(1)
>>> b = a * (a+one) * (a+one+one)
>>> c = Decimal(4) / b
>>> type(c)
<class 'decimal.Decimal'>
>>> pi = pi + c
>>> pi
Decimal('3.166666666666666666666666667')