alive_progress的应用——计算圆周率

廉雅惠
2023-12-01

我们先导入alive_progress库

from alive_progress import alive_bar

然后是计算圆周率的核心部分。我用的是马青公式,具体可以自己在网上查找

'''算法根据马青公式计算圆周率'''
num = 10000 # 计算小数点后的多少位
# 多计算10位,防止尾数取舍的影响
number1 = num + 10
# 算到小数点后number1位
b = 10 ** number1
# 求含4/5的首项
x1 = b * 4 // 5
# 求含1/239的首项
x2 = b // -239
# 求第一大项
he = x1 + x2
# 设置下面循环的终点,即共计算n项
number = num * 2

k = 0
j = number / 2 - 1
# 循环初值=3,末值2n,步长=2
for i in range(3, number, 2):
    # 求每个含1/5的项及符号
    x1 = x1 // -25
    # 求每个含1/239的项及符号
    x2 //= -57121
    # 求两项之和
    x = (x1 + x2) // i
    # 求总和10
    he += x

# 求出π
pai = he * 4
# 舍掉后十位
pai //= 10 ** 10
paistring = str(pai)
result = f'{paistring[0]}.{paistring[1:len(paistring)]}'
print(f'{result}')

最后在19行添加alive_progress的进度条,再加个重复执行即可

with alive_bar(len(range(3, number, 2))) as bar:
    # 循环初值=3,末值2n,步长=2
    for i in range(3, number, 2):
        # 求每个含1/5的项及符号
        x1 = x1 // -25
        # 求每个含1/239的项及符号
        x2 //= -57121
        # 求两项之和
        x = (x1 + x2) // i
        # 求总和10
        he += x
        bar()

完整代码:

from alive_progress import alive_bar

while True:
    '''算法根据马青公式计算圆周率'''
    num = int(input('请输入想要计算到小数点后的位数:'))
    # 多计算10位,防止尾数取舍的影响
    number1 = num + 10
    # 算到小数点后number1位
    b = 10 ** number1
    # 求含4/5的首项
    x1 = b * 4 // 5
    # 求含1/239的首项
    x2 = b // -239
    # 求第一大项
    he = x1 + x2
    # 设置下面循环的终点,即共计算n项
    number = num * 2

    k = 0
    j = number / 2 - 1
    with alive_bar(len(range(3, number, 2))) as bar:
        # 循环初值=3,末值2n,步长=2
        for i in range(3, number, 2):
            # 求每个含1/5的项及符号
            x1 = x1 // -25
            # 求每个含1/239的项及符号
            x2 //= -57121
            # 求两项之和
            x = (x1 + x2) // i
            # 求总和10
            he += x
            bar()

    # 求出π的值
    pai = he * 4
    # 舍掉后十位
    pai //= 10 ** 10
    # 输出圆周率π的值
    paistring = str(pai)
    result = f'{paistring[0]}.{paistring[1:len(paistring)]}'
    # 进行格式化输出
    print(f'{result}')
    print('-'*100) # 分割线

 类似资料: