2024.5.10

liuxuechao發表於2024-06-13
8-2 【Python0003】蒙特·卡羅法計算圓周率
分數 10
作者 doublebest
單位 石家莊鐵道大學

【題目描述】蒙特·卡羅方法是一種透過機率來得到問題近似解的方法,在很多領域都有重要的應用,其中就包括圓周率近似值的計問題。假設有一塊邊長為2的正方形木板,上面畫一個單位圓,然後隨意往木板上扔飛鏢,落點座標(x,y)必然在木板上(更多的時候是落在單位圓內),如果扔的次數足夠多,那麼落在單位圓內的次數除以總次數再乘以4,這個數字會無限逼近圓周率的值。這就是蒙特·卡羅發明的用於計算圓周率近似值的方法,如下圖所示。編寫程式,模擬蒙特·卡羅計算圓周率近似值的方法,輸入擲飛鏢次數,然後輸出圓周率近似值。
【練習要求】請給出原始碼程式和執行測試結果,原始碼程式要求新增必要的註釋。
【輸入格式】在一行中輸入擲飛鏢的次數。
【輸出格式】輸出採用蒙特·卡羅法模擬計算出的圓周率的值。
【輸入樣例】100000
【輸出樣例】3.13056

import random

def monte_carlo_pi(num_darts):

darts_in_circle = 0

# 模擬投擲飛鏢

for _ in range(num_darts):

# 隨機生成飛鏢落點座標

x = random.uniform(-1, 1)

y = random.uniform(-1, 1)

# 判斷飛鏢是否落在單位圓內

if x**2 + y**2 <= 1:

darts_in_circle += 1

# 計算圓周率的近似值

pi_approximation = (darts_in_circle / num_darts) * 4

return pi_approximation

# 輸入擲飛鏢次數

num_darts = int(input("Enter the number of darts thrown: "))

# 計算圓周率的近似值

pi_approximation = monte_carlo_pi(num_darts)

# 輸出圓周率的近似值

print("Approximated value of Pi:", pi_approximation)