计算圆周率可以根据公式如下:请利用Python提供的itertools模块,我们来计算这个序列的前N项和——python
2019-01-05 11:42
645 查看
1. 题目:
' 计算pi的值 的方法如下' # step 1: 创建一个奇数序列: 1, 3, 5, 7, 9, ... # step 2: 取该序列的前N项: 1, 3, 5, 7, 9, ..., 2*N-1. # step 3: 添加正负符号并用4除: 4/1, -4/3, 4/5, -4/7, 4/9, ... # step 4: 求和:
请利用Python提供的itertools模块,我们来计算这个序列的前N项和:
题目是廖雪峰老师的python教程中itertools的练习。
本篇博文只是针对这一题目,没有做详细的介绍,如果看不懂可以在下面评论问我,我会及时回复的。
2. 代码如下:
2.1 我个人的解法
这次的代码很简单,因此没有做注释,如果有看不懂的地方可以直接问我。
# -*- coding: utf-8 -*- import itertools def odd(x): if x % 2 != 0: return x def pi(n): list_odd = itertools.count(1) list_odd_n = filter(odd, list(itertools.takewhile(lambda x: x <= 2*n, list_odd))) num = 0 result =[] for k in list_odd_n: if num % 2 == 0: result.append(4/k) else: result.append(-4 / k) num += 1 sum = 0 for i in result: sum += i return sum # 测试: 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')
2.2 一位前辈的解答
他的代码更加简单,逻辑十分的清晰,我做了相应的注释,希望能帮助到大家。
# -*- coding: utf-8 -*- import itertools def pi(n): a = 1 # 这是为了后面符号做准备 s = 0 # 这是为了返回结果做准备 for i in itertools.count(1): # 利用itertools.count生成无限序列,从1开始 if i > 2*n: # 跳出循环 return s if i % 2 == 1: # 奇数 s += (4/i)*a # 直接求和 a = -a # 测试: 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')
希望能够帮助到大家,有什么问题可以 直接评论即可,如果不够详细的话也可以说,我会及时回复的。
相关文章推荐
- Python提供了以下几个内置tools模块:operator collections itertools functools
- Python itertools 模块 列表元素 字符串 反向遍历合并
- Python模块 - itertools循环器模块
- Python:itertools模块 combinations和product的使用
- Python学习笔记(三十七)— 内置模块(6)itertools
- Python 内置模块itertools的使用
- 零基础学python-3.6 根据模块结构 改进我们的游戏
- python模块之itertools
- Python:itertools模块
- Python itertools 模块
- 零基础学python-3.6 根据模块结构 改进我们的游戏
- 定义一个“点”(Point)类用来表示三维空间中的点(有三个坐标)。要求如下: (1)可以生成具有特定坐标的点对象。 (2)提供可以设置三个坐标的方法。 (3)提供可以计算该“点”距原点距离平方的方法。 (4)编写主类程序验证。
- 用安装python模块出现error: command 'gcc' failed with exit status 1 ,实际已经安装了gcc的,还是报错,然后发觉是failed不是not found,这说明这个错误个gcc没多大关系,应该是缺少某些功能模块,执行如下操作:
- 等方案及设备提供商 有需要的可以联系QQ561454825,电话:13779953060,我们提供最专业的无线WIFI认证系统及根据您的需要修改软件
- 利用.NET框架提供的 WebClient类 和 WebRequest类,我们可以很轻易地得到给定URL地址的源代码,很简单,以下是C#的完整的例子.
- 根据上下班时间(可能跨1天),利用Excel的公式计算白班时间和夜班时间
- Python模块 - itertools循环器模块
- 等方案及设备提供商 有需要的可以联系QQ561454825,电话:13779953060,我们提供最专业的无线WIFI认证系统及根据您的需要修改软件
- Python:itertools模块-groupby
- 根据圆的面积公式计算圆周率