【初学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("执行结束"))

实现效果:
【初学python】实例四:文本进度条
优点:简单易操作
缺点:与传统的刷新不一致

什么是刷新?
刷新的本质是:用后打印的字符串覆盖之前打印的字符串,因此,关键是 \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)

效果演示:
【初学python】实例四:文本进度条
这里显示似乎没有按我们期望的显示,但这并不是程序的问题。
实际上,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)


完美的实现了单行动态刷新的效果!