为什么我的程序“停止”了?

2024-06-18 14:47:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我在python3.3.2中编写了一个计算pi的程序(只是有点有趣,我不想使用内置的pi)。它工作得很好-它可以得到小数点后7位的正确值。但是,一旦到达这一点,程序将继续,但值不会更改。我试过用十进制。十进制但不会出现以下错误:

TypeError: unsupported operand type(s) for +: 'decimal.Decimal' and 'float'

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

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(抱歉,我没有足够的声誉直接发布图片)

请注意,程序实际上停止工作的时间比这早得多,我只是把它放在那里一段时间。 我知道我使用的算法可以找到小数点后很多位的圆周率,所以有人能告诉我为什么它不起作用,并给我任何可能的解决办法? 您可能会注意到,从我的代码的简单性来看,我对python不是太在行,只是对我在学校学到的基本知识不太在行。简单的解决方案将不胜感激! 编辑 这是带十进制的非工作代码,其中包含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 这是错误:

Traceback (most recent call last): File "C:\Users...\fastpi2.py", line 9, in pi=pi+c TypeError: unsupported operand type(s) for +: 'decimal.Decimal' and 'float'


Tags: 代码程序fortype错误pifloatdecimal
1条回答
网友
1楼 · 发布于 2024-06-18 14:47:51

代码失败,因为两个整数的除法会产生一个浮点(在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'

以下工作:

^{pr2}$

相关问题 更多 >