像文本进度条一样,它能够在每一行中根据程序的进度不断的显示文本进度条的信息
刷新的关键是\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秒输出。
运行界面如下所示:
在IDLE编程环境中,由于他为编写程序的开发环境,并不是程序运行的主要环境,而且在这个环境中我们屏蔽了\r的功能,所以出来的运行效果可能为全部输出,并不覆盖,所以我们采用命令提示符和PyCharm进行输出。在文章上面我们已经体现了在pycharm中的运行,在下面体现命令提示符里面的输出效果。
当我们把代码编写上去后,进行两次回车,两次点击enter,即可出现如下效果。
代码示例如下:
运行界面如下所示:
结合文本进度条详解(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,填充字符为-。其中//为整除:使两个操作数相除,获取商的整数部分。 '''
运行效果如图:
举一反三:
文本进度条使用了perf_counter()计算
计时方法适合各类需要统计时间的计算问题
例如:比较不同算法时间,统计部分程序运行时间
用法示例如下:
import time
start=time.perf_counter
dur=time.perf_counter-start
即为代码程序运行的时间。其中dur在程序停止运行时放置。
进度条扩展:
在任何运行时间需要较长的程序中增加进度条
在任何希望提高用户体验的应用中增加进度条
进度条是人机交互的纽带之一。