python计算圆周率

2023-10-28

最近一段时间在学习python算法,今天分享5种python计算圆周率的方法:

1.割圆法,2.无穷级数法, 3.蒙特卡洛法,4 .梅钦法,5. 拉马努金法

题目来自头歌习题,希望能帮到大家。代码如下:

1.割圆法

'''
编程实现割圆法计算圆周率,并输出分割不同次数时边数、圆周率值以及计算所得圆周率值与math库中的圆周率值的偏差。
'''

import math

def cutting_circle(n):      # n为分割次数
    """接收表示分割次数的整数n为参数,计算分割n次时正多边形的边数和圆周率值,返回边数和圆周率值"""
    side_length = 1  # 初始边长
    edges = 6  # 初始边数
    #######################Begin############################
    # 补充你的代码
    def length(x):
        h = math.sqrt(1-(x /2)**2)
        return math.sqrt((x /2)**2 + (1-h)**2)
    for i in range(n):
        side_length = length(side_length)
        edges *=2
        pi = side_length*edges/2

    ########################End###########################
    return edges, pi

if __name__ == '__main__':
    times = int(input())          # 割圆次数
    edges, pi =cutting_circle(times) #调用函数返回值
    #######################Begin############################
    # 补充你的代码
    print(f'分割{times}次,边数为{edges},圆周率为{pi:.6f}')
    print(f'math库中的圆周率常量值为{math.pi:.6f}')                               # 圆周率

    ########################End###########################

2.无穷级数法

'''
使用无穷级数这个公式计算π值,输入一个小数作为阈值,当最后一项的绝对值小于给定阈值时停止计算并输出得到的π值
'''


def leibniz_of_pi(error):
    """接收用户输入的浮点数阈值为参数,返回圆周率值"""
    # ===================Begin====================================
    # 补充你的代码
    a = 1
    b = 1
    sum = 0
    while 1/ b > error:
        if a % 2 != 0:
            sum += 1 / b
        else:
            sum -=  1/ b
        a += 1
        b += 2
    pi = sum*4
    return pi
    # =====================End==================================


if __name__ == '__main__':
    threshold = float(input())
    print("{:.8f}".format(leibniz_of_pi(threshold)))  # 保留小数点后八位

3.蒙特卡洛法

import random
def monte_carlo_pi(num):
    """接收正整数为参数,表示随机点的数量,利用蒙特卡洛方法计算圆周率
    返回值为表示圆周率的浮点数"""
    #====================Begin===================================
    # 补充你的代码
    a = 0
    count = 0
    while a < times:
        x, y = random.uniform(-1, 1), random.uniform(-1, 1)
        if x**2 + y**2 <=1:
            count += 1
        a +=1
    return 4*count / a 
    #=====================End==================================

if __name__ == '__main__':
    sd = int(input())             #读入随机数种子
    random.seed(sd)               #设置随机数种子
    times = int(input())          # 输入正整数,表示产生点数量
    print(monte_carlo_pi(times))  # 输出圆周率值,浮点数

4 .梅钦法

'''
利用梅钦公式计算圆周率的大小
'''
import math
def machin_of_pi():
    """用梅钦级数计算圆周率,返回圆周率值"""
    #################Begin####################################
    pi  = 4*(4*math.atan(1/5)-math.atan(1/239))

    #################End####################################
    return pi
 
if __name__ == '__main__':
    cal_pi = machin_of_pi()  # 调用判断类型的函数
    print(cal_pi)                    # 输出函数运行结果

5. 拉马努金法

'''
输入一个正整数n,使用拉马努金法公式计算思加n次时的圆周率值。
'''
import math

def ramanujan_of_pi(n):
    """接收一个正整数n为参数,用拉马努金公式的前n项计算圆周率并返回。"""
    ################Begin#######################
    def sumk (k):
        s =1
        for i in range(1,k+1):
            s *= i
        return s
    a = 0
    for i in range (n) :
        a += (sumk(4*i))*(1103+26390*i)/(sumk(i)**4*396**(4*i))
    pi = 1/a*9801/2/2**(1/2)   

    ################End#######################
    return pi
if __name__ == '__main__':
    n = int(input())                
    cal_pi = ramanujan_of_pi(n)  
    print(cal_pi)                    # 输出函数运行结果

在你还没成功之前,没人会对你的努力感兴趣,累了可以休息,但不要放弃,今天不行明天再来,你的坚持一定很酷,希望你所盼望的,终究会到来。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python计算圆周率 的相关文章

  • 用于将 cython 中的许多 C++ 类包装到单个共享对象的项目结构

    我在文档 邮件列表和这个问题在这里 https stackoverflow com questions 10300660 cython and distutils 但我想得到一个更直接的答案来解决我的具体情况 我正在通过尝试一点一点地包装我
  • 无法“安装”plpython3u - postgresql

    我正在尝试在 postgresql 中使用 python 语言 像这样的事情 create or replace function test a integer returns integer as if a 2 0 return even
  • 通过 Scrapy 抓取 Google Analytics

    我一直在尝试使用 Scrapy 从 Google Analytics 获取一些数据 尽管我是一个完全的 Python 新手 但我已经取得了一些进展 我现在可以通过 Scrapy 登录 Google Analytics 但我需要发出 AJAX
  • 在 python 程序中合并第三方库的最佳实践是什么?

    下午好 我正在为我的工作编写一个中小型Python程序 该任务需要我使用 Excel 库xlwt and xlrd 以及一个用于查询 Oracle 数据库的库 称为CX Oracle 我正在通过版本控制系统 即CVS 开发该项目 我想知道围
  • 为 Anaconda Python 安装 psycopg2

    我有 Anaconda Python 3 4 但是每当我运行旧代码时 我都会通过输入 source activate python2 切换到 Anaconda Python 2 7 我的问题是我为 Anaconda Python 3 4 安
  • 如何使用Conda下载python包并随后离线安装?

    我知道通过 pip 我可以使用以下命令下载 Python 包 但 pip install 破坏了我的内部包依赖关系 当我做 pip download
  • 使用 on_bad_lines 将 pandas.read_csv 中的无效行写入文件

    我有一个 CSV 文件 我正在使用 Python 来解析该文件 我发现文件中的某些行具有不同的列数 001 Snow Jon 19801201 002 Crom Jake 19920103 003 Wise Frank 19880303 l
  • 如何替换 pandas 数据框列中的重音符号

    我有一个数据框dataSwiss其中包含瑞士城市的信息 我想用普通字母替换带有重音符号的字母 这就是我正在做的 dataSwiss Municipality dataSwiss Municipality str encode utf 8 d
  • Python pickle:腌制对象不等于源对象

    我认为这是预期的行为 但想检查一下 也许找出原因 因为我所做的研究结果是空白 我有一个函数可以提取数据 创建自定义类的新实例 然后将其附加到列表中 该类仅包含变量 然后 我使用协议 2 作为二进制文件将该列表腌制到文件中 稍后我重新运行脚本
  • AWS EMR Spark Python 日志记录

    我正在 AWS EMR 上运行一个非常简单的 Spark 作业 但似乎无法从我的脚本中获取任何日志输出 我尝试过打印到 stderr from pyspark import SparkContext import sys if name m
  • 绘制方程

    我正在尝试创建一个函数 它将绘制我告诉它的任何公式 import numpy as np import matplotlib pyplot as plt def graph formula x range x np array x rang
  • 从 Flask 访问 Heroku 变量

    我已经使用以下命令在 Heroku 配置中设置了数据库变量 heroku config add server xxx xxx xxx xxx heroku config add user userName heroku config add
  • 添加不同形状的 numpy 数组

    我想添加两个不同形状的 numpy 数组 但不进行广播 而是将 缺失 值视为零 可能最简单的例子是 1 2 3 2 gt 3 2 3 or 1 2 3 2 1 gt 3 2 3 1 0 0 我事先不知道形状 我正在弄乱每个 np shape
  • 如何在Python中对类别进行加权随机抽样

    给定一个元组列表 其中每个元组都包含一个概率和一个项目 我想根据其概率对项目进行采样 例如 给出列表 3 a 4 b 3 c 我想在 40 的时间内对 b 进行采样 在 python 中执行此操作的规范方法是什么 我查看了 random 模
  • 如何在seaborn displot中使用hist_kws

    我想在同一图中用不同的颜色绘制直方图和 kde 线 我想为直方图设置绿色 为 kde 线设置蓝色 我设法弄清楚使用 line kws 来更改 kde 线条颜色 但 hist kws 不适用于显示 我尝试过使用 histplot 但我无法为
  • Conda SafetyError:文件大小不正确

    使用创建 Conda 环境时conda create n env name python 3 6 我收到以下警告 Preparing transaction done Verifying transaction SafetyError Th
  • 使用其构造函数初始化 OrderedDict 以便保留初始数据的顺序的正确方法?

    初始化有序字典 OD 以使其保留初始数据的顺序的正确方法是什么 from collections import OrderedDict Obviously wrong because regular dict loses order d O
  • Scrapy:如何使用元在方法之间传递项目

    我是 scrapy 和 python 的新手 我试图将 parse quotes 中的项目 item author 传递给下一个解析方法 parse bio 我尝试了 request meta 和 response meta 方法 如 sc
  • Rocket UniData/UniVerse:ODBC 无法分配足够的内存

    每当我尝试使用pyodbc连接到 Rocket UniData UniVerse 数据时我不断遇到错误 pyodbc Error 00000 00000 Rocket U2 U2ODBC 0302810 Unable to allocate
  • 导入错误:没有名为 site 的模块 - mac

    我已经有这个问题几个月了 每次我想获取一个新的 python 包并使用它时 我都会在终端中收到此错误 ImportError No module named site 我不知道为什么会出现这个错误 实际上 我无法使用任何新软件包 因为每次我

随机推荐

  • oracle创建序列seq起始值为1_Oracle修改序列(Sequence)起始值问题

    Oracle 序列 Sequence 主要用于生成流水号 在应用中经常会用到 特别是作为ID值 拿来做表主键使用较多 但是 有时需要修改序列初始值 START WITH 时 有同仁使用这个语句来修改 alter sequence seque
  • iOS架构师_UML建模语言

    UML UML统称建模语言 面向对象软件的表转化建模语言 包含Booch MOT OOSE 工具 StarUML 时序图
  • 树莓派教程 : 树莓派各版本引脚定义

    树莓派Zero W WH Raspberry Pi Zero W WH GPIO针脚定义
  • C语言难点之数组与指针的爱恨情仇

    提到数组和指针 是C语言的精髓 下面就来讲一讲它们之间的爱恨情仇 数组与指针的定义 对于数组来说 它的定义是在内存中拿出一块连续的内存作为整个数组的空间 数组名对应与整个数组的首地址 相当于是一个常量的指针 对于指针来说 它的定义只是在内存
  • Linux服务器上通过miniconda安装R(2022)

    安装miniconda 下载最新版miniconda wget https repo continuum io miniconda Miniconda3 latest Linux x86 64 sh 安装 bash Miniconda3 l
  • 数据仓库——数据集市

    一 什么是数据集市 这里我们先回忆一下数据仓库的定义 数据仓库 Data Warehouse 是一个面向主题的 Subject Oriented 集成的 Integrate 相对稳定的 Non Volatile 反映历史变化 Time Va
  • PAT1027 打印沙漏 (20 分)(C语言)

    题目 本题要求你写个程序把给定的符号打印成沙漏的形状 例如给定17个 要求按下列格式打印 所谓 沙漏形状 是指每行输出奇数个符号 各行符号中心对齐 相邻两行符号数差2 符号数先从大到小顺序递减到1 再从小到大顺序递增 首尾符号数相等 给定任
  • matplotlib绘图接口和绘制线性图

    在深入使用matplotlib之前你需要知道几个matplotlib技巧 这些技巧能帮助你更快速掌握matplotlib 导入matplotlib 和numpy pandas一样 在导入matplotlib时我们也可以用一些常用的简写形式
  • MybatisPlus快速入门

    目录 1 概述 2 快速入门 2 1 数据库环境准备 2 2 创建SpringBoot工程 引入MyBatis Plus起步依赖 2 3 编写DataSource相关配置 2 4 编码 2 5 测试 3 CRUD 3 1 添加 3 1 1
  • Ubuntu下firefox账号无法登录问题

    ubuntu16 04自带有firefox浏览器 但是会发现账号无法登录 原来在windows下的数据没有办法同步 书签也同步不了 经过查询资料后得知 Ubuntu系统中自带的firefox是国际版 服务器与windows下的不一样 因此没
  • 渗透测试之AppScan篇

    IBM AppScan是一款非常好用且功能强大的Web 应用安全测试工具 曾以 Watchfire AppScan 的名称享誉业界 Rational AppScan 可自动化 Web 应用的安全漏洞评估工作 能扫描和检测所有常见的 Web
  • BGNet

    为此 在本文中 我们提出了一种新的边界引导网络 BGNet 它显式地使用边缘语义来增强伪装对象检测的性能 首先 我们设计了一个简单而有效的边缘感知模块 EAM 它集成了低级别的局部边缘信息和高级别的全局位置信息 以在显式边界监督下探索与对象
  • postgreSQL——并发控制7(日志管理)

    2021 SDUSC 目录 概述 CLOG日志管理器 1 CLOG日志管理器相关数据结构 2 CLOG日志管理器主要操作 1 日志管理器的初始化 2 CLOG 日志的写操作 3 CLOG日志的读操作 4 CLOG日志页面的初始化 5 CLO
  • css-排除类名

    场景 写了一个通用块 有禁用样式 和 hover样式 然后 被禁用的时候 希望 hover的样式 可以不生效 解决 wrap not is disabled wrap is custom 一些样式 not is disabled hover
  • python无损旋转图片--90°--180°--270°

    使用 transpose 无损旋转图片并保存 from PIL import Image import os rootdir r D data 1500 指明被遍历的文件夹 for file in os listdir rootdir cu
  • Python3.5源码剖析

    首先需要明白 在Python3 5的源码里 我们操作的文本字符串是以unicode的形式存在的 如果字符串中仅仅包含ASCII 那么会通过c文件中的PyUnicode New函数进行创建 创建的结构体是PyASCIIObject 该结构体的
  • python程序的打包和安装

    0 前言 我们经常会使用pip setup py install 安装一个源码包 可是这个可以安装的源码包是怎么生成的 这个setup py又是怎么生成的呢 这篇文章中 我们就来一探究竟 用来进行python程序打包的两个常用工具为Dist
  • shell中echo命令详解

    本文参考自 http www linuxidc com Linux 2014 08 105548 htm http www cnblogs com perfy archive 2012 07 24 2605903 html 更详细的内容请参
  • 换行CRLF,LF和CR,IntelliJ下设置默认为LF

    在window下开发有一个大坑 就是换行默认是CRLF 但是Linux下只有换行LF 这样代码提交后 会出现编译问题 首先我们先介绍CRLF LF和CR CR是MAC老版本的做法 就是回车 但是后来的MAC系统统一换成LF了 LF是Linu
  • python计算圆周率

    最近一段时间在学习python算法 今天分享5种python计算圆周率的方法 1 割圆法 2 无穷级数法 3 蒙特卡洛法 4 梅钦法 5 拉马努金法 题目来自头歌习题 希望能帮到大家 代码如下 1 割圆法 编程实现割圆法计算圆周率 并输出分
Powered by Hwhale