割圆法求圆周率和圆面积(附带进度条)
割圆法求圆面积,当半径为1000时,可以看到圆周率
import math
import time
r = 1000
ls_height = []
def circle_area(r, side_number):
    area = 0
    start = time.perf_counter()
    for i in range(side_number):
        bottom = r / side_number
        height = math.sqrt(r ** 2 - (bottom * (i + 1)) ** 2)
        height = round(height, 2)  # 保留小数点后两位
        ls_height.append(height)
        area += bottom * height
        # 打印进度条1
        number = 30
        past = i // (side_number//number)
        left = 30 - past
        a = "*" * past
        b = "." * left
        c = (i / side_number) * 100
        dur = time.perf_counter() - start
        print("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c, a, b, dur), end="")
        # time.sleep(0.1)
    print() # 打印进度条2
    return area * 4
if __name__ == "__main__":
    print(math.pi * r ** 2)
    # print(circle_area(r, 8))
    # print(circle_area(r, 12))
    print(circle_area(r, 10**6))
    # print(ls_height)
    input("输入回车关闭。")

提供另一种巴塞尔问题的解法:
import math
import time
def mathPi(n):
    num_in_circle = 0
    sum = 0
    start = time.perf_counter()
    for i in range(1, n):
        sum += 1 / i ** 2
        # 打印进度条1
        number = 30
        past = i // (n // number)
        left = 30 - past
        a = "*" * past
        b = "." * left
        c = (i / n) * 100
        dur = time.perf_counter() - start
        print("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c, a, b, dur), end="")
        # time.sleep(0.1)
    pi = math.sqrt(sum * 6)
    print()  # 打印进度条2
    return pi
if __name__ == '__main__':
    print(mathPi(10 ** 6))
    print(math.pi)