“文本进度条”实例(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秒输出。

运行界面如下所示: 

 在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在程序停止运行时放置。

进度条扩展:

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

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

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

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一直再追梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值