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 itertoolsdef 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 = 0result =[]for k in list_odd_n:if num % 2 == 0:result.append(4/k)else:result.append(-4 / k)num += 1sum = 0for i in result:sum += ireturn 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 itertoolsdef pi(n):a = 1   # 这是为了后面符号做准备s = 0   # 这是为了返回结果做准备for i in itertools.count(1):    # 利用itertools.count生成无限序列,从1开始if i > 2*n:     # 跳出循环return sif 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提供的itertools模块,我们来计算这个序列的前N项和——python相关推荐

  1. Java黑皮书课后题第6章:6.11(金融应用:计算酬金)编写方法,利用编程练习题5.39中的方法计算酬金。方法头如下所示。编写程序,显示下面表格

    6.11(金融应用:计算酬金)编写方法,利用编程练习题5.39中的方法计算酬金.方法头如下所示.编写程序,显示下面表格 题目 题目描述与运行示例 编程练习题5.39(非本题) 破题 5.39处理 主方 ...

  2. python有一分数序列求前20项和答案_求分数序列前20项和matlab

    有一个分数序列1/2,2/3,3/5,5/8,8/13,13/21.求这个序列的前20项之和.C语言编程 #includeintmain(void){inta=1,b=2,i;doublesum=0; ...

  3. python利用近似公式计算π_Excel函数公式大全之利用SUMSQ函数快速计算多个数据的平方和...

    各位Excel天天学的小伙伴们大家好,欢迎收看Excel天天学出品的excel2019函数公式大全课程.今天我们要学习的函数是数学函数中的SUMSQ函数,SUMSQ函数的功能是快速计算多个数据的平方和 ...

  4. python提供了几个基本的数值运算操作符_慢步学习,二级python,数字类型及其运算...

    #我要学Python# 记得曾经的老师常说,要带着问题学习. 咱继续带着二级Python编程语言的考试大纲学习. 考试大纲中考试内容分七部分,其中第一部分Python 语言基本语法元素已经学完.笔者认 ...

  5. 详解Python中的itertools模块

    itertools模块的介绍 在Python中,迭代器(Iterator)是常用来做惰性序列的对象,只有当迭代到某个值的时候,才会进行计算得出这个值.因此,迭代器可以用来存储无限大的序列,这样我们就不 ...

  6. Python教程:itertools模块

    itertools 用于更高效地创建迭代器的函数工具. itertools 提供的功能受Clojure,Haskell,APL和SML等函数式编程语言的类似功能的启发.它们的目的是快速有效地使用内存, ...

  7. python求斐波那契数列第n个数及前n项和_使用python求斐波那契数列中第n个数的值示例代码...

    斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为"兔子数列&qu ...

  8. 三十三、深入Python中的itertools模块

    @Author: Runsen 在Python中有一个功能强大的迭代工具包itertools,是Python自带的标准工具包之一. product 由于itertools是内置库,不需要任何安装,直接 ...

  9. python高级语法-collections模块下几个新序列

    很多乃至绝大多数时候list,set,dict是不错的选择,但是有些特殊情形下我们发现内置的三种序列结构不能方便地满足我们的要求,这是collections模块下的几个新序列就有了用武之地. 这里只介 ...

最新文章

  1. Qt中的QInputDialog
  2. c++ 协程_理解Python协程(Coroutine)
  3. 笔记-信息化与系统集成技术-信息系统的特点
  4. 单片机编程遇到'DATA' SEGMENT TOO LARGE怎么解决?
  5. 北京化工大学计算机科专业,北京化工大学专业介绍及排名 哪些专业最好
  6. Codeforces Round #378 (Div. 2) D - Kostya the Sculptor
  7. Quartz2D知识点聚合案例
  8. 前端学习(1428):ajax封装三
  9. php react-native,React-Native+Mobx实现商城APP
  10. 身份证识别开发_成为您的身份永远不会太晚-在36岁时成为一名开发人员
  11. 深入 Java 调试体系: 第 1 部分,JPDA 体系概览
  12. 火山PC编辑框组件详解1
  13. mac 磁盘分区 diskutil命令
  14. 算法的时间复杂度 递推
  15. 概率论基础知识(二) 随机变量及其分布
  16. 最小攻击超过最大攻击_贪婪洞窟攻击力解析 最大攻击与最小攻击对比分析
  17. js三层数组循环遍历(笛卡尔积)运算,并生成顺序
  18. 移动终端及常见的操作系统
  19. 假设某专业有若干个班,每个班有若干学生,每个学生包含姓名和分数,这样构成一棵树,如图1所示。假设树中每个结点的name域均不相同,该树采用孩子兄弟链存储结构,其结点类型定义如下:
  20. 如何通过日志恢复被删除的数据

热门文章

  1. yii2实现后端分页和模糊查询
  2. uni-app 超详细教程(一)(从菜鸟到大佬)
  3. 小区管理系统之后台管理前端模板
  4. ECCV2022|腾讯优图开源DisCo:拯救小模型在自监督学习中的效果
  5. SSD_Resnet 飞机与油桶数据集实战
  6. 最大回撤python_最大回撤,最大回撤恢复时间与最大回撤持续期
  7. Eolink: 一站式 API 生产力工具
  8. Troubleshooting: WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK!
  9. Mesosphere DCOS快速部署手册
  10. Python自动化办公【PDF文件自动化】