python計(jì)算圓周率的5種方法
最近一段時(shí)間在學(xué)習(xí)python算法,今天分享5種python計(jì)算圓周率的方法:
1.割圓法,2.無(wú)窮級(jí)數(shù)法, 3.蒙特卡洛法,4 .梅欽法,5. 拉馬努金法
題目來(lái)自頭歌習(xí)題,希望能幫到大家。代碼如下:
1.割圓法
'''
編程實(shí)現(xiàn)割圓法計(jì)算圓周率,并輸出分割不同次數(shù)時(shí)邊數(shù)、圓周率值以及計(jì)算所得圓周率值與math庫(kù)中的圓周率值的偏差。
'''
import math
def cutting_circle(n): # n為分割次數(shù)
"""接收表示分割次數(shù)的整數(shù)n為參數(shù),計(jì)算分割n次時(shí)正多邊形的邊數(shù)和圓周率值,返回邊數(shù)和圓周率值"""
side_length = 1 # 初始邊長(zhǎng)
edges = 6 # 初始邊數(shù)
#######################Begin############################
# 補(bǔ)充你的代碼
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()) # 割圓次數(shù)
edges, pi =cutting_circle(times) #調(diào)用函數(shù)返回值
#######################Begin############################
# 補(bǔ)充你的代碼
print(f'分割{times}次,邊數(shù)為{edges},圓周率為{pi:.6f}')
print(f'math庫(kù)中的圓周率常量值為{math.pi:.6f}') # 圓周率
########################End###########################2.無(wú)窮級(jí)數(shù)法
'''
使用無(wú)窮級(jí)數(shù)這個(gè)公式計(jì)算π值,輸入一個(gè)小數(shù)作為閾值,當(dāng)最后一項(xiàng)的絕對(duì)值小于給定閾值時(shí)停止計(jì)算并輸出得到的π值
'''
def leibniz_of_pi(error):
"""接收用戶輸入的浮點(diǎn)數(shù)閾值為參數(shù),返回圓周率值"""
# ===================Begin====================================
# 補(bǔ)充你的代碼
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))) # 保留小數(shù)點(diǎn)后八位3.蒙特卡洛法
import random
def monte_carlo_pi(num):
"""接收正整數(shù)為參數(shù),表示隨機(jī)點(diǎn)的數(shù)量,利用蒙特卡洛方法計(jì)算圓周率
返回值為表示圓周率的浮點(diǎn)數(shù)"""
#====================Begin===================================
# 補(bǔ)充你的代碼
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()) #讀入隨機(jī)數(shù)種子
random.seed(sd) #設(shè)置隨機(jī)數(shù)種子
times = int(input()) # 輸入正整數(shù),表示產(chǎn)生點(diǎn)數(shù)量
print(monte_carlo_pi(times)) # 輸出圓周率值,浮點(diǎn)數(shù)4 .梅欽法
'''
利用梅欽公式計(jì)算圓周率的大小
'''
import math
def machin_of_pi():
"""用梅欽級(jí)數(shù)計(jì)算圓周率,返回圓周率值"""
#################Begin####################################
pi = 4*(4*math.atan(1/5)-math.atan(1/239))
#################End####################################
return pi
if __name__ == '__main__':
cal_pi = machin_of_pi() # 調(diào)用判斷類型的函數(shù)
print(cal_pi) # 輸出函數(shù)運(yùn)行結(jié)果5. 拉馬努金法
'''
輸入一個(gè)正整數(shù)n,使用拉馬努金法公式計(jì)算思加n次時(shí)的圓周率值。
'''
import math
def ramanujan_of_pi(n):
"""接收一個(gè)正整數(shù)n為參數(shù),用拉馬努金公式的前n項(xiàng)計(jì)算圓周率并返回。"""
################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) # 輸出函數(shù)運(yùn)行結(jié)果在你還沒(méi)成功之前,沒(méi)人會(huì)對(duì)你的努力感興趣,累了可以休息,但不要放棄,今天不行明天再來(lái),你的堅(jiān)持一定很酷,希望你所盼望的,終究會(huì)到來(lái)。??
總結(jié)
到此這篇關(guān)于python計(jì)算圓周率的5種方法的文章就介紹到這了,更多相關(guān)python計(jì)算圓周率內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python判定文件目錄是否存在及創(chuàng)建多層目錄
這篇文章主要介紹了python判定文件目錄是否存在及創(chuàng)建多層目錄,文章通過(guò)os模塊、try語(yǔ)句、pathlib模塊善終模塊展開詳細(xì)的內(nèi)容,感興趣的朋友可以參考一下2022-06-06
Python實(shí)現(xiàn)簡(jiǎn)單的Rust風(fēng)格類型檢查
本文主要介紹了Python實(shí)現(xiàn)簡(jiǎn)單的Rust風(fēng)格類型檢查,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2026-04-04
python實(shí)現(xiàn)馬耳可夫鏈算法實(shí)例分析
這篇文章主要介紹了python實(shí)現(xiàn)馬耳可夫鏈算法的方法,實(shí)例分析了馬耳可夫鏈算法的原理與實(shí)現(xiàn)技巧,需要的朋友可以參考下2015-05-05
python常見(jiàn)讀取語(yǔ)音的3種方法速度對(duì)比
python已經(jīng)支持WAV格式的書寫,下面這篇文章主要給大家介紹了關(guān)于python常見(jiàn)讀取語(yǔ)音的3種方法速度對(duì)比的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12
運(yùn)用Python快速的對(duì)MySQL數(shù)據(jù)庫(kù)進(jìn)行重命名
本文介紹了如何運(yùn)用Python快速的對(duì)現(xiàn)有的數(shù)據(jù)庫(kù)進(jìn)行重命名,有此需求的朋友可以參考下2021-06-06
對(duì)django中foreignkey的簡(jiǎn)單使用詳解
今天小編就為大家分享一篇對(duì)django中foreignkey的簡(jiǎn)單使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07
關(guān)于python2 csv寫入空白行的問(wèn)題
今天小編就為大家分享一篇關(guān)于python 2 csv寫入空白行的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06
python利用platform模塊獲取系統(tǒng)信息
這篇文章主要介紹了python利用platform模塊獲取系統(tǒng)信息,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-10-10

