计算圆周率

2023-11-09

# 根据用户输入计算圆周率
import math
import random


def type_judge(pi_type):
    """接收一个字符串为参数,根据参数调用相应函数计算圆周率。    """
    if pi_type == '割圆法':
        times = int(input())  # 输入一个表示边数量的正整数
        return cutting_circle(times)  # 调用函数计算圆周率
    elif pi_type == '无穷级数法':
        threshold = float(input())   # 输入转为浮点数
        return leibniz_of_pi(threshold)  # 调用函数计算圆周率
    elif pi_type == '蒙特卡洛法':
        num = int(input())           # 输入转为整数
        s = int(input())             # 输入随机数种子
        return monte_carlo_pi(num, s)  # 调用函数计算圆周率
    elif pi_type == '梅钦法':
        return machin_of_pi()  # 调用函数计算圆周率
    elif pi_type == '拉马努金法':
        num = int(input())  # 输入转为整数
        return ramanujan_of_pi(num)
    else:
        return f'未找到{pi_type}计算方法'


def cutting_circle(times):
    """参数times为分割次数
    π = 周长/(2*圆的半径)得到π的近似值。
    # 半径为1的圆内接正6边形边长也是1
    # 边长  side_length
    # 半径  radius
    # 圆周率 pi
    # 三角形的高 height
    """
    a = 1
    n = 6
    for i in range(1,times+1):
        b = (1-(a/2)**2)**(1/2)
        c = 1-b
        d = ((a/2)**2+c**2)**(1/2)
        a = d
        n *= 2
    pi = a*n/2

    return pi


def leibniz_of_pi(error):
    """接收用户输入的浮点数阈值为参数,用格雷戈里-莱布尼茨级数计算圆周率,返回圆周率值"""
    m = 1
    n = 1
    sum = 0
    while 1/n>error:
        if m%2 != 0:
            sum += 1/n
        else:
            sum -= 1/n
        m += 1
        n += 2
    pi = sum * 4

    return pi


def monte_carlo_pi(num, s):
    """接收一个表示随机次数的整数和一个整数做随机数种子,用蒙特卡洛法计算圆周率,返回一个浮点数"""
    random.seed(s)
    c=0
    for i in range(1,num+1):
        x = random.uniform(-1,1)
        y = random.uniform(-1,1)
        d = x**2+y**2
        if d <= 1:
            c+=1
    pi = c/num*4

    return pi

def machin_of_pi():
    """用梅钦级数计算圆周率,返回圆周率值"""
    pi = 4*(4*math.atan(1/5)-math.atan(1/239))

    return pi

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

    return pi


if __name__ == '__main__':
    type_of_pi = input()             # 接收用户输入的字符串
    cal_pi = type_judge(type_of_pi)  # 调用判断类型的函数
    print(cal_pi)                    # 输出函数运行结果

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

计算圆周率 的相关文章

  • Python BigQuery 存储。并行读取多个流

    我有以下玩具代码 import pandas as pd from google cloud import bigquery storage v1beta1 import os import google auth os environ G
  • 将字符串转换为带有毫秒和时区的日期时间 - Python

    我有以下 python 片段 from datetime import datetime timestamp 05 Jan 2015 17 47 59 000 0800 datetime object datetime strptime t
  • 如何打印没有类型的defaultdict变量?

    在下面的代码中 from collections import defaultdict confusion proba dict defaultdict float for i in xrange 10 confusion proba di
  • Flask 和 uWSGI - 无法加载应用程序 0 (mountpoint='')(找不到可调用或导入错误)

    当我尝试使用 uWSGI 启动 Flask 时 出现以下错误 我是这样开始的 gt cd gt root localhost uwsgi socket 127 0 0 1 6000 file path to folder run py ca
  • 如何使用包含代码的“asyncio.sleep()”进行单元测试?

    我在编写 asyncio sleep 包含的单元测试时遇到问题 我要等待实际的睡眠时间吗 I used freezegun到嘲笑时间 当我尝试使用普通可调用对象运行测试时 这个库非常有用 但我找不到运行包含 asyncio sleep 的测
  • 打破嵌套循环[重复]

    这个问题在这里已经有答案了 有没有比抛出异常更简单的方法来打破嵌套循环 在Perl https en wikipedia org wiki Perl 您可以为每个循环指定标签 并且至少继续一个外循环 for x in range 10 fo
  • Spark的distinct()函数是否仅对每个分区中的不同元组进行洗牌

    据我了解 distinct 哈希分区 RDD 来识别唯一键 但它是否针对仅移动每个分区的不同元组进行了优化 想象一个具有以下分区的 RDD 1 2 2 1 4 2 2 1 3 3 5 4 5 5 5 在此 RDD 上的不同键上 所有重复键
  • __del__ 真的是析构函数吗?

    我主要用 C 做事情 其中 析构函数方法实际上是为了销毁所获取的资源 最近我开始使用python 这真的很有趣而且很棒 我开始了解到它有像java一样的GC 因此 没有过分强调对象所有权 构造和销毁 据我所知 init 方法对我来说在 py
  • 如何使用装饰器禁用某些功能的中间件?

    我想模仿的行为csrf exempt see here https docs djangoproject com en 1 11 ref csrf django views decorators csrf csrf exempt and h
  • 运行多个 scrapy 蜘蛛的正确方法

    我只是尝试使用在同一进程中运行多个蜘蛛新的 scrapy 文档 http doc scrapy org en 1 0 topics practices html但我得到 AttributeError CrawlerProcess objec
  • 在 NumPy 中获取 ndarray 的索引和值

    我有一个 ndarrayA任意维数N 我想创建一个数组B元组 数组或列表 其中第一个N每个元组中的元素是索引 最后一个元素是该索引的值A 例如 A array 1 2 3 4 5 6 Then B 0 0 1 0 1 2 0 2 3 1 0
  • Python - 按月对日期进行分组

    这是一个简单的问题 起初我认为很简单而忽略了它 一个小时过去了 我不太确定 所以 我有一个Python列表datetime对象 我想用图表来表示它们 x 值是年份和月份 y 值是此列表中本月发生的日期对象的数量 也许一个例子可以更好地证明这
  • Numpy 优化

    我有一个根据条件分配值的函数 我的数据集大小通常在 30 50k 范围内 我不确定这是否是使用 numpy 的正确方法 但是当数字超过 5k 时 它会变得非常慢 有没有更好的方法让它更快 import numpy as np N 5000
  • 如何改变Python中特定打印字母的颜色?

    我正在尝试做一个简短的测验 并且想将错误答案显示为红色 欢迎来到我的测验 您想开始吗 是的 祝你好运 法国的首都是哪里 法国 随机答案不正确的答案 我正在尝试将其显示为红色 我的代码是 print Welcome to my Quiz be
  • 为美国东部以外地区的 Cloudwatch 警报发送短信?

    AWS 似乎没有为美国东部以外的 SNS 主题订阅者提供 SMS 作为协议 我想连接我的 CloudWatch 警报并在发生故障时接收短信 但无法将其发送到 SMS YES 经过一番挖掘后 我能够让它发挥作用 它比仅仅选择一个主题或输入闹钟
  • VSCode:调试配置中的 Python 路径无效

    对 Python 和 VSCode 以及 stackoverflow 非常陌生 直到最近 我已经使用了大约 3 个月 一切都很好 当尝试在调试器中运行任何基本的 Python 程序时 弹出窗口The Python path in your
  • glpk.LPX 向后兼容性?

    较新版本的glpk没有LPXapi 旧包需要它 我如何使用旧包 例如COBRA http opencobra sourceforge net openCOBRA Welcome html 与较新版本的glpk 注意COBRA适用于 MATL
  • 用于运行可执行文件的python多线程进程

    我正在尝试将一个在 Windows 上运行可执行文件并管理文本输出文件的 python 脚本升级到使用多线程进程的版本 以便我可以利用多个核心 我有四个独立版本的可执行文件 每个线程都知道要访问它们 这部分工作正常 我遇到问题的地方是当它们
  • 在python中,如何仅搜索所选子字符串之前的一个单词

    给定文本文件中的长行列表 我只想返回紧邻其前面的子字符串 例如单词狗 描述狗的单词 例如 假设有这些行包含狗 hotdog big dog is dogged dog spy with my dog brown dogs 在这种情况下 期望
  • 使用基于正则表达式的部分匹配来选择 Pandas 数据帧的子数据帧

    我有一个 Pandas 数据框 它有两列 一列 进程参数 列 包含字符串 另一列 值 列 包含相应的浮点值 我需要过滤出部分匹配列 过程参数 中的一组键的子数据帧 并提取与这些键匹配的数据帧的两列 df pd DataFrame Proce

随机推荐

  • Linux常用基本命令

    目录 1 帮助命令 man 获取帮助信息 type 查看命令是内置命令还是外部命令 help 获取帮助信息 2 文件目录类 pwd 显示当前目录的绝对路径 ls 列出目录中的内容 cd 进入相对应的目录中 mkdir 创建文件夹子 rmdi
  • 安全与加密

    1 使用对称加密算法 实现敏感数据加密 1 1 什么是对称加密 Symmetric encryption
  • (Qt Installer Framework)程序简易打包教程

    Qt Installer Framework 程序简易打包教程 Qt Installer Framework程序简易打包教程 第一步下载Qt Installer Framework 第二步 打包程序安装和环境变量的配置 第三步准好要打包的程
  • C/C++中this指针作用

    this 指针是一个隐含于每一个成员函数中的特殊指针 它指向正在被该成员函数操作的那个对象 当对一个对象调用成员函数时 编译程序先将对象的地址赋给 this 指针 然后调用成员函数 每次成员函数存取数据成员时 由隐含使用 this 指针 当
  • Umi + React + Ant Design Pro 项目实践(六)—— ProLayout 应用

    打开 umirc ts 文件 import defineConfig from umi export default defineConfig plugins umijs plugins dist react query reactQuer
  • Linux增加swap空间的方法

    windows下有虚拟内存 Linux下有swap 如果在安装linux时没有分配足够的swap 可以在Linux下进行增加 具体有两种方法 1 建立一个swap分区 2 建立一个swap文件 一 建立一个swap分区 可以利用磁盘的还未分
  • 使用Torch nngraph实现LSTM

    什么是RNN RNN 多层反馈RNN Recurrent neural Network 循环神经网络 神经网络是一种节点定向连接成环的人工神经网络 这种网络的内部状态可以展示动态时序行为 不同于前馈神经网络的是 RNN可以利用它内部的记忆来
  • 数据挖掘技术(一)预处理

    1 数据预处理 数据预处理技术包括 聚集 抽样 维规约 特征子集选择 特征创建 离散化和二元化 变量变换 属性的类型 标称 定性的 值仅仅是不同的名字 即只提供足够的信息以区分对象 如雇员ID 性别 序数 定性的 值提供足够信息确定对象的序
  • 浙大超厉害计算机硕士生导师

    1 人工智能所 陈德人 教授 计算机图形学与CAD CIMS与虚拟制造 电子商务与信息集成技术 406 87952297 drchen cs zju edu cn 博导 2 人工智能所 陈刚 教授 CIMS 网络安全 协同设计 数据库 50
  • FIFO_IP核介绍和测试

    FIFO IP核介绍和测试 前言 一 简介各端口含义 二 创建同步FIFO IP核 三 FIFO IP核TB测试 四 FIFO IP核仿真结果 五 同步复位和异步复位比较 前言 FIFO 的英文全称是 First In First Out
  • 蓝桥杯C/C++省赛:买不到的数目

    目录 题目描述 思路分析 AC代码 方法一 AC代码 方法二 题目描述 小明开了一家糖果店 他别出心裁 把水果糖包成4颗一包和7颗一包的两种 糖果不能拆包卖 小朋友来买糖的时候 他就用这两种包装来组合 当然有些糖果数目是无法组合出来的 比如
  • 100套基于Java+SSM的毕业设计项目实战(附源码+论文+演示视频)

    大家好 我是职场程序猿 感谢您阅读本文 欢迎一键三连哦 今天给大家分享100 基于Java SSM的毕业设计 这些项目都经过精心挑选 涵盖了不同的实战主题和用例 可做毕业设计和课程设计参考 除了源码 对于大部分项目实现的功能都有相应的介绍
  • Qt项目---简单的计算器

    在这篇技术博客中 我们将介绍如何使用Qt框架实现一个简单的计算器应用 我们将使用C 编程语言和Qt的图形用户界面库来开发这个应用 并展示如何实现基本的算术操作 项目设置 首先 我们需要在Qt Creator中创建一个新的Qt Widgets
  • 关于虚函数、父类指针、父类子类内存访问的一道很有意思的笔试题

    1 题目 1 1 原题 include
  • 你知道每片晶圆能卖多少钱吗?-道合顺大数据infinigo

    你知道 卖一颗芯片究竟能赚多少钱吗 根据市场调研机构IC Insights发布的最新数据显示 在7nm工艺需求强劲 以及5nm工艺量产的推动下 2020年台积电每片晶圆营收达到1634美元 约合人民币10568元 单颗芯片营收居全球半导体产
  • Microsoft Jet SQL for Access 2000

    该系列的文章解释了什么是Microsoft Jet SQL 并说明了它如何在Access 2000的应用程序中使用 本文是基础 中级和高级三篇中的第二篇 这些文章循序渐进的说明了使用Jet SQL的语法和一些方法 并示范了对于Access
  • 程序分析

    程序分析 百科名片 程序分析是指对 计算机程序行为进行自动分析的过程 主要包括静态分析和动态分析两种策略 目录 简介 什么是程序分析 程序分析的目的 程序分析的种类及图表 程序分析的记录符号 程序分析的技巧 程序分析的实施及步骤 程序分析的
  • 后渗透中提权的必要性和思路

    很多同学常常问起 渗透测试中获取服务器权限后一定要提权吗 为什么要提权呢 故有此文 提权的必要性 在一场完整的渗透测试中 如果已经获取服务器权限 此时就进入后渗透阶段了 渗透的最终目的是获取服务器的最高权限 即windows操作系统中管理员
  • 牛客网_剑指Offer_Python实现_更新中

    剑指Offer编程题汇总 第1题 二维数组中的查找 第2题 替换空格 第3题 从尾到头打印链表 第4题 重建二叉树 第5题 用两个栈实现队列 第6题 旋转数组的最小数字 第7题 斐波那契数列 第8题 跳台阶 第9题 变态跳台阶 第10题 矩
  • 计算圆周率

    根据用户输入计算圆周率 import math import random def type judge pi type 接收一个字符串为参数 根据参数调用相应函数计算圆周率 if pi type 割圆法 times int input 输