Discuss / Python / 计算圆周率pi

计算圆周率pi

Topic source

ywjco_567

#1 Created at ... [Delete] [Delete and Lock User]
# -*-coding:UTF-8-*-

from itertools import *

def pi(N):
    '''
        计算圆周率
        :param N
        :return: pi
    '''

    # step 1: 创建一个奇数序列: 1, 1+2, 1+2*2, ...
    odd = count(1, 2)
    # step 2: 取该序列的前N项: 1, 3, 5, 7, 9, ..., 2*N-1.
    odd_N = takewhile(lambda x: x <= 2 * N - 1, odd)
    # step 3: 添加正负符号并用4除: 4/1, -4/3, 4/5, -4/7, 4/9, ...
    sign = -1.0
    sum = 0.0
    for i,v in enumerate(odd_N,1):
        sign *= -1.0
        sum += sign * (4 / v)        # step 4: 求和
        # print(f'No.{i}:{v} --> pi = {sum}')

    return sum

if __name__ == '__main__':
    # pi(10)

    # 测试:
    print(pi(10))
    print(pi(100))
    print(pi(1000))
    print(pi(10000))
    assert 3.04 < pi(10) < 3.05
    assert 3.13 < pi(100) < 3.14
    assert 3.140 < pi(1000) < 3.141
    assert 3.1414 < pi(10000) < 3.1415
    print('ok')

  • 1

Reply