020 實例4-文本進度條


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

1.1 文本進度條

用過計算機的都見過

  • 進度條什么原理呢?

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

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()計時
  • 計時方法適合各類需要統計時間的計算問題
  • 例如:比較不同算法時間、統計部分程序運行時間

進度條應用

  • 在任何運行時間需要較長的程序中增加進度條
  • 在任何希望提高用戶體驗的應用中增加進度條
  • 進度條是人機交互的紐帶之

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

文本進度條的不同設計函數

設計名稱 趨勢 設計函數
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\)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM