进度条制作方法

分析:进度条的元素有哪些?

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('任务执行结束。')

  

posted @ 2019-05-02 22:27  我要变大神  阅读(1792)  评论(0编辑  收藏  举报