[Python急救站]文本进度条
玩游戏的朋友们,是不是看到那种加载加载进度条,感觉特别不错呢,所以今天就来看看文本进度条怎么做。
1.基本的多行文本进度条
import time
scale = 10 # 变量scale表示输出进度条的精度
print("------执行开始------")
for i in range(scale + 1):
a, b = '**' * i, '..' * (scale - i)
c = (i / scale) * 100
print("%{:^3.0f}[{}->{}]".format(c, a, b))
time.sleep(0.1) # 调用time中的sleep(t),将当前程序挂起t s,t可以是小数。
print("------执行结束------")
程序运行结果如下:
2.单行动态刷新
import time
for i in range(101):
print("\r{:3}%".format(i), end="")
time.sleep(0.05)
程序运行结果如下:
由于Pycharm集成环境本身屏蔽了单行刷新功能,如果要执行可以使用控制台(cmd)或者用Python编辑器的IDLE是执行这个代码
运行结果如下:
3.带刷新的文本进度条
将上面两个程序再整合一下,并加上计时器,就很像我们的下载时间是吧
# 微实例3.7.3带刷新的文本进度条
import time
scale = 50
print("执行开始".center(scale // 2, '-'))
t = time.perf_counter()
# 原来采用time.clock,但是Python3.8以上把这个函数去掉了,但是库里还包含着。
# 可以调用time.perf_counter() 或process_time()替换
for i in range(scale + 1):
a = '*' * i
b = '.' * (scale - i)
c = (i / scale) * 100
t -= time.perf_counter()
s = t / 100000 # 如果调用的是time.clock就不用做除法转化
print("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c, a, b, -s), end='')
time.sleep(0.05)
print("\n" + "执行结束".center(scale // 2, '-'))
程序运行结果如下:
4.利用第三方库tqdm执行文本进度条
利用了第三方库tqdm来执行一个文本进度条,可以在Pycharm里面设置Python解释器中下载
from tqdm import tqdm
from time import sleep
for i in tqdm(range(1, 101)):
sleep(0.01)
程序运行结果如下:
好了去试试吧!
对了,留一个问题,进度条反映了软件运行的执行速度,请思考并给出至少3种提高软件执行速度的方法。