python基础02_使用itertools模块进行求圆周率

# 计算圆周率可以根据公式:
# 利用Python提供的itertools模块,我们来计算这个序列的前N项和:
import itertools


def pi(N):
    '计算pi的值'
    #     step1 创建一个奇数序列:
    s1 = itertools.count(start=1, step=2)
    #     step2 取该序列的前N项:
    s2 = list(itertools.takewhile(lambda x: x < 2 * N - 1, s1))
    # print(list(s2))
    #    step3 添加正负符号并用4除:4/1.-4/3.4/5,-4/7,4/9
    l = len(s2)
    s3 = (4 * pow(-1, x) for x in list(range(l)))
    # print(s3)
    result = 0
    count=0
    #  s3 = [4 * pow(-1, x) for x in list(range(l))]
    # for i in range(l):
    #     result += s3[i] / s2[i]
    for i in s3:
        # print(i)
        result += i/s2[count]
        count += 1
    return result


print(pi(1000))

其实可以优化的,是将列出列表,然后使用内置函数sum()进行求和,这样速度会快点。

# 计算圆周率可以根据公式:
# 利用Python提供的itertools模块,我们来计算这个序列的前N项和:
import itertools


def pi(N):
'计算pi的值'
# step1 创建一个奇数序列:
s1 = itertools.count(start=1, step=2)
# step2 取该序列的前N项:
s2 = list(itertools.takewhile(lambda x: x < 2 * N - 1, s1))
# print(list(s2))
# step3 添加正负符号并用4除:4/1.-4/3.4/5-4/74/9
l = len(s2)
s3 = (4 * pow(-1, x) for x in list(range(l)))
# print(s3)
result = 0
count=0
# s3 = [4 * pow(-1, x) for x in list(range(l))]
# for i in range(l):
# result += s3[i] / s2[i]
for i in s3:
# print(i)
result += i/s2[count]
count += 1
return result


print(pi(1000))
原文地址:https://www.cnblogs.com/hamish26/p/12934592.html