進度條制作方法


分析:進度條的元素有哪些?

1、進度的數字:5%,10% ----- 直到 100%,結束;

2、進度條長度:>>>>>>>>>>>>>>>,並且是以動態的方式,與進度的數字保持一致;這樣的話進度條的長度要與進度的數字有一定的關聯;

3、進度是動態的,並且有范圍,所以選擇 for 循環,而不是 while 循環;

4、為了打印速度慢下來,要利用時間模塊,.sleep(),

5、另外重要的就是格式輸出,%s()

接下來我們可以試着寫一下:

import time
for i in range(0,101):
    time.sleep(0.1)
    per_str = '%s%% : %s'%(i,'>')
    print(per_str)

# 打印結果為:

0% : >
1% : >
2% : >
3% : >
··· ···
98% : >
99% : >
100% : >

打印出來結果的問題:

1)數字的進度有了,但是打印結果在換行,這顯然不是我們要的結果,

2)進度條沒有增加,進度條應該隨着進度數字的增加而增加

6、首先我們要解決換行的問題,print 其實就是一個函數,打印結束后默認自動換行,print(per_str, end=''),默認 end='\n',改成''空;

7、 進度條增加,就是要‘>’隨着數字增加而增加,也就是隨着‘i’,增加而增加,‘>’ * i;接下來修改一下代碼:

import time
for i in range(0,101):
    time.sleep(0.1)
    per_str = '%s%% : %s'%(i,'>'*i)
    print(per_str, end='')

# 打印結果為如下,進度數字和進度條都沒有了問題,這顯然不是我們想要的結果,我們想要的是在原來的基礎上數字增長,進度條進行增加;
0% : 1% : >2% : >>3% : >>>··· ···100% : >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

 

  

8、‘\r’,默認將指針返回到最開始后輸出(在原位置再次輸出),在“per_str = '\r%s%% : %s'% (i, '>')” 加一個‘\r'

import time
for i in range(0,101):
    time.sleep(0.1)
    per_str = '\r%s%% : %s'%(i,'>'*i)
    print(per_str, end='')

# 打印效果就完全沒有問題了,
100% : >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

 

9、打印效果就完全沒有問題了,不過進度條太長了,我們可以優化一下,在進度數字前加上“任務進行:”並且進度完成后打印一句話“任務執行完成。”,這樣會更加使用。

import time
for i in range(0,101):
    time.sleep(0.1)
    char_num = i // 4  # 進度條的長度數,i 取整除以 4
    per_str = '\r%s: %s%% : %s'%('任務進度',i,'>'* char_num)
    print(per_str,end='')
print('任務執行結束。')

# 打印結果為:目前只有一個問題就是結束后打印的”任務執行結束。“另起一行就好了。
任務進度: 100% : >>>>>>>>>>>>>>>>>>>>>>>>>任務執行結束。

 

import time
for i in range(0,101):
    time.sleep(0.1)
    char_num = i // 4  # 進度條的長度數,i 取整除以 4
    per_str = '\r%s: %s%% : %s'%('任務進度',i,'>'* char_num)
    print(per_str,end='')
print('\n任務執行結束。')

# 打印結果為:
任務進度: 100% : >>>>>>>>>>>>>>>>>>>>>>>>>
任務執行結束。

 

10、看樣子是達到了我們的目的,但是如果用戶來直接調用的話,在打印中加\n,不太方便;最后優化的代碼如下:

import time
for i in range(0,101,2):
    time.sleep(0.1)
    char_num = i // 4  # 進度條的長度數,i 取整除以 4
    per_str = '\r%s: %s%% : %s\n'%('任務進度',i,'>'* char_num) if i == 100 else '\r%s: %s%% : %s'%('任務進度',i,'>'* char_num)
    print(per_str,end='',flush=True)
print('任務執行結束。')

  


免責聲明!

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



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