最近一段時間在學(xué)習(xí)python算法,今天分享5種python計算圓周率的方法:
1.割圓法,2.無窮級數(shù)法, 3.蒙特卡洛法,4 .梅欽法,5. 拉馬努金法
題目來自頭歌習(xí)題,希望能幫到大家。代碼如下:
1.割圓法
'''
編程實現(xiàn)割圓法計算圓周率,并輸出分割不同次數(shù)時邊數(shù)、圓周率值以及計算所得圓周率值與math庫中的圓周率值的偏差。
'''
import math
def cutting_circle(n): # n為分割次數(shù)
"""接收表示分割次數(shù)的整數(shù)n為參數(shù),計算分割n次時正多邊形的邊數(shù)和圓周率值,返回邊數(shù)和圓周率值"""
side_length = 1 # 初始邊長
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庫中的圓周率常量值為{math.pi:.6f}') # 圓周率
########################End###########################
2.無窮級數(shù)法
'''
使用無窮級數(shù)這個公式計算π值,輸入一個小數(shù)作為閾值,當(dāng)最后一項的絕對值小于給定閾值時停止計算并輸出得到的π值
'''
def leibniz_of_pi(error):
"""接收用戶輸入的浮點數(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ù)點后八位
3.蒙特卡洛法
import random
def monte_carlo_pi(num):
"""接收正整數(shù)為參數(shù),表示隨機(jī)點的數(shù)量,利用蒙特卡洛方法計算圓周率
返回值為表示圓周率的浮點數(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)生點數(shù)量
print(monte_carlo_pi(times)) # 輸出圓周率值,浮點數(shù)
4 .梅欽法
'''
利用梅欽公式計算圓周率的大小
'''
import math
def machin_of_pi():
"""用梅欽級數(shù)計算圓周率,返回圓周率值"""
#################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. 拉馬努金法文章來源:http://www.zghlxwxcb.cn/news/detail-506374.html
'''
輸入一個正整數(shù)n,使用拉馬努金法公式計算思加n次時的圓周率值。
'''
import math
def ramanujan_of_pi(n):
"""接收一個正整數(shù)n為參數(shù),用拉馬努金公式的前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) # 輸出函數(shù)運(yùn)行結(jié)果
在你還沒成功之前,沒人會對你的努力感興趣,累了可以休息,但不要放棄,今天不行明天再來,你的堅持一定很酷,希望你所盼望的,終究會到來。??文章來源地址http://www.zghlxwxcb.cn/news/detail-506374.html
到了這里,關(guān)于python計算圓周率的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!