分析:進度條的元素有哪些?
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('任務執行結束。')