【初学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("执行结束"))
实现效果: 优点:简单易操作 缺点:与传统的刷新不一致
什么是刷新? 刷新的本质是:用后打印的字符串覆盖之前打印的字符串,因此,关键是 要想改进,我们需要对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(" {:3}%".format(i),end="") t.sleep(0.1)
效果演示: 这里显示似乎没有按我们期望的显示,但这并不是程序的问题。 实际上,IDLE被设定为一个开发环境,而不是运行环境。我们通常运行一个程序通过双击打开才能运行,而在这样的IDLE环境下, 这个功能被自动屏蔽掉了,因此,才会出现上述的情况。我们可以通过命令行来运行这个程序,看一看其演示效果。
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(" {:^3.0f}%[{}->{}]{:.2f}s".format(c,a,b,dur),end="") t.sleep(0.1)
完美的实现了单行动态刷新的效果!