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/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))
每天进步一点