【初学python】实例四:文本进度条
这一期我们使用time库函数来实现一个简单地文本进度条的输出,附加的还使用了一些format函数的使用。
首先,1.0版本:
#实例四:文本进度条
import time as t
scale = 10
print("{0:*^16}".format("执行开始"))
for i in range(scale+1):
a = '*' * i
b = '.' * (scale - i)
c = (i/scale)*100
print("{0:^3.0f}%[{1}->{2}]".format(c,a,b))
t.sleep(1)
print("{0:*^16}".format("执行结束"))
实现效果:
优点:简单易操作
缺点:与传统的刷新不一致
什么是刷新?
刷新的本质是:用后打印的字符串覆盖之前打印的字符串,因此,关键是 \r
要想改进,我们需要对print函数进行控制
2.0版本:单行动态刷新
#实例四:文本进度条
import time as t
scale = 10
print("{0:*^16}".format("执行开始"))
for i in range(scale+1):
a = '*' * i
b = '.' * (scale - i)
c = (i/scale)*100
print("{0:^3.0f}%[{1}->{2}]".format(c,a,b))
t.sleep(0.1)
print("{0:*^16}".format("执行结束"))
print("单行动态刷新")
for i in range(101):
print("\r{:3}%".format(i),end="")
t.sleep(0.1)
效果演示:
这里显示似乎没有按我们期望的显示,但这并不是程序的问题。
实际上,IDLE被设定为一个开发环境,而不是运行环境。我们通常运行一个程序通过双击打开才能运行,而在这样的IDLE环境下,\r 这个功能被自动屏蔽掉了,因此,才会出现上述的情况。我们可以通过命令行来运行这个程序,看一看其演示效果。
3.0版本:最终版:
#实例四:文本进度条
import time as t
scale = 50
print("执行开始".center(scale//2,"-"))
start = t.perf_counter()
for i in range(scale+1):
a = '*' * i
b = '.' * (scale - i)
c = (i/scale)*100
dur = t.perf_counter() - start
print("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c,a,b,dur),end="")
t.sleep(0.1)
完美的实现了单行动态刷新的效果!