Python 生成超过2315个位置的pi

Python 生成超过2315个位置的pi,python,python-3.x,pi,Python,Python 3.x,Pi,我已设法使我的代码正常工作,因此它会生成pi: while True: print("how many digits of pi would you like?") def make_pi(): q, r, t, k, m, x = 1, 0, 1, 1, 3, 3 for j in range(1000000): if 4 * q + r - t < m * t:

我已设法使我的代码正常工作,因此它会生成pi:

 while True:
        print("how many digits of pi would you like?")


        def make_pi():
            q, r, t, k, m, x = 1, 0, 1, 1, 3, 3
            for j in range(1000000):
                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 make_pi():
            my_array.append(str(i))

        number = int(input())+2
        my_array = my_array[:1] + ['.'] + my_array[1:]
        big_string = "".join(my_array[: number ])
        print("here is the string:\n %s" % big_string)

如何参数化使_pi生成器接受位数

大概是这样的:

def make_pi(num_digits):
    q, r, t, k, m, x = 1, 0, 1, 1, 3, 3
    for j in range(num_digits):
        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


num_digits = 10000
pi = "".join([str(d) for d in make_pi(num_digits)])
print("{0}.{1}".format(pi[:1], pi[1:]))
def make_pi(数字):
q、 r,t,k,m,x=1,0,1,1,3,3
对于范围内的j(数字):
如果4*q+r-t
您确定要将编号增加到2315以上吗?我尝试生成10000多个数字,并在没有可用性的情况下增加了范围。这很好,但您是否增加了编号,这实际上控制了打印多少个数字?是的,当然,通过增加输入,我增加了
number
好的,我有怀疑,我想这证实了它确实存在某种缺陷,因为我尝试了^code,同样的事情发生了
def make_pi(num_digits):
    q, r, t, k, m, x = 1, 0, 1, 1, 3, 3
    for j in range(num_digits):
        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


num_digits = 10000
pi = "".join([str(d) for d in make_pi(num_digits)])
print("{0}.{1}".format(pi[:1], pi[1:]))