from math import fabs           #导入数学模块
from time import perf_counter   #导入时间模块

def Bar(i):         #动态文本条
    N = pow(10,level)
    a = int((i/N)*50)
    b = 50 - a
    Y , N = '*' * a , '.' * b
    print("\r计算中：{:3.0f}% [{}->{}] {:.2f}s"
          .format(2*a,Y,N,perf_counter()),end='')

level = eval(input('计算Pi精确到小数点后几位数：'))
print('\n{:=^70}'.format('计算开始'))
a,b,pi,tmp = 1,1,0,1
i = 0
'''
a 分子  |  b 分母  |  pi 圆周率
tmp 存储a/b的值    |  i  执行进度
'''
perf_counter()      #开始计时
while (fabs(tmp) >= pow(10,-level)): #计算Pi
    pi += tmp
    b += 2
    a = -a
    tmp = a/b
    i += 2
    Bar(i)          #调用函数，实时显示计算进度

print('\n{:=^70}'.format('计算完成'))
print('\nPi的计算值为：{}'.format(round(pi*4,level))) #输出计算结果
