020 實例4-文本進度條

1、"文本進度條"問題分析

1.1 文本進度條

用過計算機的都見過算法

  • 進度條什麼原理呢?

020-實例4-文本進度條-01.jpg?x-oss-process=style/watermark

1.2 需求分析

  • 採用字符串方式打印能夠動態變化的文本進度條
  • 進度條須要能在一行中逐漸變化

1.3 問題分析

如何得到文本進度條的變化時間?函數

  • 採用sleep()模擬一個持續的進度
  • 彷佛不那麼難

2、"文本進度條"簡單的開始

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、"文本進度條"單行動態刷新

3.1 單行動態刷新

刷新的關鍵是 \rspa

  • 刷新的本質是:用後打印的字符覆蓋以前的字符
  • 不能換行: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%

4、"文本進度條"實例完整效果

# 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、"文本進度條"觸類旁通

5.1 觸類旁通

計算問題擴展code

  • 文本進度條程序使用了perf_counter()計時
  • 計時方法適合各種須要統計時間的計算問題
  • 例如:比較不一樣算法時間、統計部分程序運行時間

進度條應用orm

  • 在任何運行時間須要較長的程序中增長進度條
  • 在任何但願提升用戶體驗的應用中增長進度條
  • 進度條是人機交互的紐帶之

020-實例4-文本進度條-02.jpg?x-oss-process=style/watermark

文本進度條的不一樣設計函數blog

設計名稱 趨勢 設計函數
Linear Constant \(f(x) = x\)
Early Pause Speeds up \(f(x) = x+(1-sin(x*π*2+π/2)/-8\)
Late Pause Slows down \(f(x) = x+(1-sin(x*π*2+π/2)/8\)
Slow Wavy Constant \(f(x) = x+(1-sin(x*π*2+π/2)/8\)
Fast Wavy Constant \(f(x) = x+(1-sin(x*π*2+π/2)/8\)
Power Speeds up \(f(x) = {(x+(1-x)*0.03)}^2\)
Inverse Power Slows down \(f(x) =1+{(1-x)}^{1.5}*-1\)
Fast Power Speeds up \(f(x) = {(x+(1-x)/2)}^8\)
Inverse Fast Power Slows down \(f(x) = 1+{(1-x)}^3*-1\)
相關文章
相關標籤/搜索