什么是进度条?(先问题分析)

python文本进度条实验总结 用python写文本进度条_python文本进度条实验总结

进度条是什么实现原理呢?

文本进度条

  • 采用字符串方式打印可以动态变化的文本进度条
  • 进度条需要能在一行中逐渐变化
如何获取文本进度条的变化时间?
  • 采用sleep()模拟一个持续的进度
  • 似乎不那么难????(完全不懂啊!)
#TextProBarV1.py
import time
scale = 10
print("-----执行开始-----")
for i in range(scale +1):
    a = '*' * i
    b = '.' * (scale - i)
    c = (i/scale)*100
    print("{:^3.0f}%[{}->{}]".format(c, a, b))
    time.sleep(0.1)

print("------执行结果------")

执行结果:

python文本进度条实验总结 用python写文本进度条_进度条_02

“文本进度条”单行动态刷新

单行动态刷新指的是像文本进度条一样,它能够在每一行中根据程序的进度,不断的显示文本进度条的信息。但它并不换行。
刷新的本质:用后打印的字符覆盖之前的字符。
为了实现单行动态刷新,要求,输出字符串时,不能输出的下一行。
不能换行:print()需要被控制
要能回退:打印后光波退回到之前的位置:\r

#TextProBarV1.py
import time
for i in range(101):
    print("\r{:3}%".format(i), end="")
    time.sleep(0.1)

输出:
动态从0%到100%

#TextProBarV3.py
# 字符串处理,数字处理,时间库的使用
import time
scale = 50
print("执行开始".center(scale//2, "-"))
start = time.perf_counter()
for i in range(scale +1):
    a = '*' * i
    b = '.' * (scale - i)
    c = (i/scale)*100
    dur = time.perf_counter() - start
    print("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c, a, b, dur),end="")
    time.sleep(0.1)
print("\n"+"执行结果".center(scale//2,'-'))

python文本进度条实验总结 用python写文本进度条_动态刷新_03


文本进度条,举一反三

计算问题扩展

  • 文本进度条程序使用了perf-counter()计时
  • 计时方法适合各类需要统计时间的计算问题
  • 例如:比较不同算法时间、统计部分程序运行时间

计时在程序中无处不在。

进度条扩展

  • 在任何运行时间需要较长的程序中增加进度条
  • 在任何希望提高用户体验的应用中增加进度条
  • 进度条是人机交互的纽带之一

文本进度条的不同设计函数

python文本进度条实验总结 用python写文本进度条_进度条_04

小结论

开始展示进度条慢一些,随着下载的持续,后续进度条展示的增长效果逐渐增加,这种方式符合人类的心里需求。