进度条是计算机处理任务或执行软件中常用的增强用户体验的重要手段,它能够实时显示任务或软件的执行进度。
- 非刷新文本进度条
#非刷新的文本进度条
import time
scale = 10
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)
print("------执行结束------")
关于time.sleep(t),由于程序执行速度远超过人眼的视觉停留时间,直接进行字符输出几乎是瞬间完成,不利于观察。为了模拟任务处理的时间效果,调用Python标准时间库time,使用time.sleep(t)函数将当前程序暂时挂起t s。
上述程序执行结果:
- 单行动态刷新
#单行动态刷新
import time
for i in range(101):
print("\r{:2}%".format(i),end='')
time.sleep(0.05)
常用的计算机系统中的进度条一般只在一行中改变进度比例,与1.代码相比,区别在于原地输出和动态刷新,其基本思想是将每一次进度输出都固定在一行,并不断地用新生成的字符串覆盖之前的输出,形成进度条不断刷新的动态效果。
在print()函数中更换参数end的默认值为‘’,即每次使用print()函数输出时不换行。此时,系统输出指针还停留在上一次输出的行尾,在输出的字符串前部增加转义符‘\r’,该转义符把输出指针移动到行首而不换行。
上述程序在IDLE中输出的结果为:
这里没有获得动态刷新的效果,是因为IDLE本身屏蔽了当行刷新功能。
下面看命令行输出:
- 带刷新的文本进度条
#带刷新的文本进度条
import time
scale=50
print("执行开始".center(scale//2,'-'))
t=time.clock()
for i in range(scale+1):
a='*'*i
b='.'*(scale-i)
c=(i/scale)*100
t-=time.clock()
print("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c,a,b,-t),end='')
time.sleep(0.05)
print("\n"+"执行结束".center(scale//2,'-'))
上述代码在命令行中的执行结果: