python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > python计算圆周率

python计算圆周率的5种方法

作者:NDWJL

这篇文章主要给大家介绍了关于python计算圆周率的5种方法,圆周率(Pi)是圆的周长与直径的比值,一般用希腊字母π表示,是一个在数学及物理学中普遍存在的数学常数,需要的朋友可以参考下

最近一段时间在学习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)                    # 输出函数运行结果

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

总结

到此这篇关于python计算圆周率的5种方法的文章就介绍到这了,更多相关python计算圆周率内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文