020 例項4-文字進度條
阿新 • • 發佈:2020-12-13
目錄
一、"文字進度條"問題分析
1.1 文字進度條
用過計算機的都見過
- 進度條什麼原理呢?
1.2 需求分析
- 採用字串方式列印可以動態變化的文字進度條
- 進度條需要能在一行中逐漸變化
1.3 問題分析
如何獲得文字進度條的變化時間?
- 採用sleep()模擬一個持續的進度
- 似乎不那麼難
二、"文字進度條"簡單的開始
2.1 簡單的開始
# 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("------執行結束------")
------執行開始------
0 %[->..........]
10 %[*->.........]
20 %[**->........]
30 %[** *->.......]
40 %[****->......]
50 %[*****->.....]
60 %[******->....]
70 %[*******->...]
80 %[********->..]
90 %[*********->.]
100%[**********->]
------執行結束------
三、"文字進度條"單行動態重新整理
3.1 單行動態重新整理
重新整理的關鍵是 \r
- 重新整理的本質是:用後列印的字元覆蓋之前的字元
- 不能換行:
print()
需要被控制 - 要能回退:列印後游標退回到之前的位置
\r
注意:IDLE如Pycharm遮蔽了\r
功能
# TextProBarV2.py
import time
for i in range(101):
print("\r{:3}%".format(i), end="")
time.sleep(0.1)
100%
四、"文字進度條"例項完整效果
# TextProBarV3.py
import time
scale = 10
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, '-'))
-執行開始
100%[**********->]1.03s
-執行結束
五、"文字進度條"舉一反三
5.1 舉一反三
計算問題擴充套件
- 文字進度條程式使用了
perf_counter()
計時 - 計時方法適合各類需要統計時間的計算問題
- 例如:比較不同演算法時間、統計部分程式執行時間
進度條應用
- 在任何執行時間需要較長的程式中增加進度條
- 在任何希望提高使用者體驗的應用中增加進度條
- 進度條是人機互動的紐帶之
文字進度條的不同設計函式
設計名稱 | 趨勢 | 設計函式 |
---|---|---|
Linear | Constant | f(x)=xf(x)=x |
Early Pause | Speeds up | f(x)=x+(1−sin(x∗π∗2+π/2)/−8f(x)=x+(1−sin(x∗π∗2+π/2)/−8 |
Late Pause | Slows down | f(x)=x+(1−sin(x∗π∗2+π/2)/8f(x)=x+(1−sin(x∗π∗2+π/2)/8 |
Slow Wavy | Constant | f(x)=x+(1−sin(x∗π∗2+π/2)/8f(x)=x+(1−sin(x∗π∗2+π/2)/8 |
Fast Wavy | Constant | f(x)=x+(1−sin(x∗π∗2+π/2)/8f(x)=x+(1−sin(x∗π∗2+π/2)/8 |
Power | Speeds up | f(x)=(x+(1−x)∗0.03)2f(x)=(x+(1−x)∗0.03)2 |
Inverse Power | Slows down | f(x)=1+(1−x)1.5∗−1f(x)=1+(1−x)1.5∗−1 |
Fast Power | Speeds up | f(x)=(x+(1−x)/2)8f(x)=(x+(1−x)/2)8 |
Inverse Fast Power | Slows down | f(x)=1+(1−x)3∗−1f(x)=1+(1−x)3∗−1 |