python123第三周第九题

计算圆周率PI
计算用到了蒙特卡罗方法:
通过模拟随机点落在区域内的概率,计算圆的面积,间接求得圆周率PI

点击查看代码


from random import random
from time import *
from tqdm import tqdm

N = eval(input())
def is_PI(N):
    DARTS = N * N
    hits = 0.0
    for i in range(1,DARTS+1):
        x,y = random(),random()
        dist = pow(x ** 2 + y ** 2, 0.5)
        if dist <= 1.0:
            hits += 1
    pi = 4.0 * (hits / DARTS)
    return pi

print(is_PI(N))
在此之上,添加进度条显示 第一种进度条用到了tqdm库
点击查看代码

from random import random
import time
from tqdm import tqdm

N = eval(input())
def is_PI(N):
    DARTS = N * N
    hits = 0.0
    for i in tqdm(range(1,DARTS+1)):
        x,y = random(),random()
        dist = pow(x ** 2 + y ** 2, 0.5)
        if dist <= 1.0:
            hits += 1
    pi = 4.0 * (hits / DARTS)
    return pi

print(is_PI(N))
第二种进度条用到了tqdm库中的pbar方法
点击查看代码
from random import random
import time
from tqdm import tqdm

N = eval(input())
def is_PI(N):
    pbar = tqdm(total = 100)
    DARTS = N * N
    hits = 0.0
    for i in range(1,DARTS+1):
        x,y = random(),random()
        dist = pow(x ** 2 + y ** 2, 0.5)
        if dist <= 1.0:
            hits += 1
        pbar.update(1)
    pbar.close()
    pi = 4.0 * (hits / DARTS)
    return pi

print(is_PI(N))
第三种方法则如书上用例,通过print输出字符串进度条
点击查看代码

import time
from random import random
N = int(input())
scale = 50

def is_PI(N):
    DARTS = N * N
    hits = 0.0
    for i in range(1,DARTS+1):
        x,y = random(),random()
        dist = pow(x ** 2 + y ** 2, 0.5)
        if dist <= 1.0:
            hits += 1
            c = (i / DARTS) * 100
            a = '*' * int(c*scale/100)
            b = '.' * (scale - int(c*scale/100))
            print("\r{:^3.0f}%[{}->{}]".format(c, a, b), end='')
    pi = 4.0 * (hits / DARTS)
    print("\n")
    return pi

pi = is_PI(N)
print(pi)
posted @ 2025-03-30 21:47  佘婷婷  阅读(75)  评论(0)    收藏  举报