“文本进度条”实例(2)

"文本进度条"单行动态刷新

像文本进度条一样,它能够在每一行中根据程序的进度不断的显示文本进度条的信息

刷新的关键是\r

刷新的本质:用后打印的字符覆盖之前的字符

不能换行:print()需要被控制,使其输出在同一行

要能回退:打印后光标退回到之前的位置\r,使其后打印的字符可以覆盖之前的字符,即也是从之前字符输出的位置进行输出。

进行分析后我们了解到:我要输出一个字符串,但是输出之前可以先把光标放到行的行首(即\r放到行首),然后再输出,输出之后也不要换行(即end的参数为空字符串,即end=""),下一次再循环的时候,光标还要回到行首再输出信息,还不要换行,循环执行它。

示例代码如下:

import time
for i in range(101):
    print("\r{:3}%".format(i),end="")
    '''
    \r:在打印字符串输出之前,能够使光标退回到当前行的行首
    其中end="",他是print函数的一个参数,默认情况下我们不增加它,指的是在输出一个信息之后,默认在最后增加一个换行换到下一行
    如果我们在输出的信息之后增加end=""这样一个参数,能够改变每一次print输出最后增加的那个信息
    通俗点说即为输出字符中增加什么信息,我们就在end参数里增加什么信息。
    如果不希望增加换行,则end的参数即被赋值为空字符串。
    '''
    time.sleep(0.1)#让程序休眠0.1秒输出。

运行界面如下所示: 

“文本进度条”实例(2)_第1张图片

“文本进度条”实例(2)_第2张图片

 在IDLE编程环境中,由于他为编写程序的开发环境,并不是程序运行的主要环境,而且在这个环境中我们屏蔽了\r的功能,所以出来的运行效果可能为全部输出,并不覆盖,所以我们采用命令提示符和PyCharm进行输出。在文章上面我们已经体现了在pycharm中的运行,在下面体现命令提示符里面的输出效果。

当我们把代码编写上去后,进行两次回车,两次点击enter,即可出现如下效果。

代码示例如下:

“文本进度条”实例(2)_第3张图片

 运行界面如下所示:

“文本进度条”实例(2)_第4张图片

结合文本进度条详解(1)里面的代码示例,两者进行结合一下,即可出现完整的文本进度条实例效果。

代码如下所示:

import  time#采用import函数调用time库
scale=50#变量scale=50,这样子文本进度条的宽度为50
print("{:-^25}".format('执行开始'))#文本进度条的输出宽度为20,居中输出,用-进行填充。
start=time.perf_counter()#使用time.perf_counter()函数进行测量时间。
for i in range(scale+1):#循环次数为scale+1次,即0-10.即0%-100%。因为他的输出格式里面有两类填充字符,所以我们需要分类别进行循环。
    a='*'*i  #n*x或x*n: 复制n次字符串x,即复制i次字符串'*',i值为临时变量,用于保存每次循环访问的目标对象中的元素,即从0开始。
    # 同时'*'*i指当前的百分比所表达的信息。即%几有几个*。
    b='.'*(scale-i)#文本进度条的宽度为scale=10,里面除了字符*之外剩下的即为.,所以通过循环的改变,*之外即为.。与当前剩余的进度条的比例的乘积。
    c=(i/scale)*100#即进度条所进行的进度的百分比
    dur=time.perf_counter()-start#过程时间为循环结束后的时间减去开始时间即为过程时间。
    print("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c,a,b,dur),end="")
    '''
    3.0f与3f输出的结果不一样,会有精度的影响。
    \r:在打印字符串输出之前,能够使光标退回到当前行的行首
    其中end="",他是print函数的一个参数,默认情况下我们不增加它,指的是在输出一个信息之后,默认在最后增加一个换行换到下一行
    如果我们在输出的信息之后增加end=""这样一个参数,能够改变每一次print输出最后增加的那个信息
    通俗点说即为输出字符中增加什么信息,我们就在end参数里增加什么信息。
    如果不希望增加换行,则end的参数即被赋值为空字符串。
    '''
    time.sleep(0.1)#time库的sleep函数,让程序去休眠或产生一定的时间
print("\n"+"执行结束".center(scale//2,'-'))
'''字符串的对齐方法之一为.center方法,
格式为str.center(width[,fillchar),其中width为字符串的宽度,fillchar为参数width指定的长度大于原字符串长度时填充的字符,默认为空格。
宽度为scale//2,填充字符为-。其中//为整除:使两个操作数相除,获取商的整数部分。
'''

运行效果如图:

“文本进度条”实例(2)_第5张图片

“文本进度条”实例(2)_第6张图片

举一反三:

计算问题扩展

文本进度条使用了perf_counter()计算

计时方法适合各类需要统计时间的计算问题

例如:比较不同算法时间,统计部分程序运行时间

用法示例如下:

import time

start=time.perf_counter

dur=time.perf_counter-start

即为代码程序运行的时间。其中dur在程序停止运行时放置。

进度条扩展:

在任何运行时间需要较长的程序中增加进度条

在任何希望提高用户体验的应用中增加进度条

进度条是人机交互的纽带之一。

你可能感兴趣的:(python基础,python)