python計算圓周率的5種方法
最近一段時間在學(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############################ # 補充你的代碼 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############################ # 補充你的代碼 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==================================== # 補充你的代碼 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ù),表示隨機點的數(shù)量,利用蒙特卡洛方法計算圓周率 返回值為表示圓周率的浮點數(shù)""" #====================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()) #讀入隨機數(shù)種子 random.seed(sd) #設(shè)置隨機數(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ù)運行結(jié)果
5. 拉馬努金法
''' 輸入一個正整數(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ù)運行結(jié)果
在你還沒成功之前,沒人會對你的努力感興趣,累了可以休息,但不要放棄,今天不行明天再來,你的堅持一定很酷,希望你所盼望的,終究會到來。??
總結(jié)
到此這篇關(guān)于python計算圓周率的5種方法的文章就介紹到這了,更多相關(guān)python計算圓周率內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Django開發(fā)RESTful API實現(xiàn)增刪改查(入門級)
這篇文章主要介紹了Django開發(fā)RESTful API實現(xiàn)增刪改查(入門級),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05Python UnicodeEncodeError: ''gbk'' codec can''t encode chara
這篇文章主要介紹了Python UnicodeEncodeError: 'gbk' codec can't encode character 解決方法,需要的朋友可以參考下2015-04-04對Python subprocess.Popen子進程管道阻塞詳解
今天小編就為大家分享一篇對Python subprocess.Popen子進程管道阻塞詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-10-10Python應(yīng)用實現(xiàn)雙指數(shù)函數(shù)及擬合代碼實例
這篇文章主要介紹了Python應(yīng)用實現(xiàn)雙指數(shù)函數(shù)及擬合代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-06-06