首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python中的1000位pi

Python中的1000位pi
EN

Stack Overflow用户
提问于 2012-01-25 22:59:48
回答 11查看 55.6K关注 0票数 22

我一直在思考这个问题,但我想不出来。也许你能帮我。问题是我的代码不能用Python编码语言输出1000位pi。

下面是我的代码:

代码语言:javascript
运行
复制
def make_pi():
    q, r, t, k, m, x = 1, 0, 1, 1, 3, 3
    while True:
        if 4 * q + r - t < m * t:
            yield m
            q, r, t, k, m, x = (10*q, 10*(r-m*t), t, k, (10*(3*q+r))//t - 10*m, x)
        else:
            q, r, t, k, m, x = (q*k, (2*q+r)*x, t*x, k+1, (q*(7*k+2)+r*x)//(t*x), x+2)

digits = make_pi()
pi_list = []
my_array = []
for i in range(1000):
    my_array.append(str("hello, I'm an element in an array \n" ))
big_string = "".join(my_array)

print "here is a big string:\n %s" % big_string 

我知道这段代码可以修复,但我不确定该修复什么……这里的print语句是一个很大的字符串,而my_array.append(str("hello, im an element in an array \n))现在只是一个填充符。我知道所有的代码是如何工作的,但就像我之前说过的,我不能让它输出这些代码。

EN

Stack Overflow用户

回答已采纳

发布于 2012-01-25 23:22:39

运行此命令

代码语言:javascript
运行
复制
def make_pi():
    q, r, t, k, m, x = 1, 0, 1, 1, 3, 3
    for j in range(1000):
        if 4 * q + r - t < m * t:
            yield m
            q, r, t, k, m, x = 10*q, 10*(r-m*t), t, k, (10*(3*q+r))//t - 10*m, x
        else:
            q, r, t, k, m, x = q*k, (2*q+r)*x, t*x, k+1, (q*(7*k+2)+r*x)//(t*x), x+2


my_array = []

for i in make_pi():
    my_array.append(str(i))

my_array = my_array[:1] + ['.'] + my_array[1:]
big_string = "".join(my_array)
print "here is a big string:\n %s" % big_string 

并从此处阅读有关yield operator的信息:What does the "yield" keyword do?

这就是答案:

代码语言:javascript
运行
复制
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337
票数 24
EN
查看全部 11 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9004789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档