软件测试学习 之 Python 模拟倒计时、百分比进度

转载自-百度经验
作者:BinnLZeng
原文:怎么用Python的print在一行中打印(计时器功能)


场景设计

最典型的这样一种场景:我们在控制台内需要一个倒计时的功能,例如提示,程序将在x秒后启动。或者用python开发下载程序,用于在一行中显示下载百分比进度。

我们来看看这两个程序:

第一个是倒计时:

第二个是显示百分比进度:

我们要实现的就是这样的功能。

实现倒计时功能

我们要实现这样的功能,我们就必须要开启print的缓冲区让print不换行

我们仔细看看print的参数:

print(value,sep=' ',end='\n',file=sys.stdout,flush=False)

value 是我们要打印的字符串,

sep 是value之间的间隔(我们可以print("Hello","Python")看到中间确实有一个空格间隔开了)

end 是打印完成之后要打印的事,print默认在结束的时候打印一个\n,即换行(我们想要print不换行,只要把end参数换成''即可)。

file=sys.stdout 则是打印到哪里 sys.stdout是系统的控制台,即标准输出设备

flush=False 是说明print不开启缓冲区(部分终端会延迟输出,不会即时显示),开启缓冲区只需把flush设置成True即可。

这些说明,我们可以在python IDLE(Python)中输入print(看到,如图


注:python IDLE是Python软件包自带的一个集成开发环境,初学者可以利用它方便地创建、运行、测试和调试Python程序。IDLE是跟Python一起安装的,不过要确保安装时选中了“Tcl/Tk”组件,准确地说,应该是不要取消该组件,因为默认时该组件是处于选中状态的。
“开始”菜单→“所有程序”→“Python 2.7”→“IDLE(Python GUI)

OK,我们来开始写第一个程序,倒计时程序,这里小编倒计时5秒。
我们要使用倒计时的话,要用到time模块

#-*- coding:utf-8 -*-
import time

print("倒计时程序")
for x in range(5,-1,-1):
    mystr = "倒计时" + str(x) + "秒"
    print(mystr,end = "")
    print("\b" * (len(mystr)*2),end = "",flush=True)
    time.sleep(1)

 但是我们不能直接按下F5在Python IDLE的Shell中运行,Python的IDLE无法识别\b字符,所以我们只能在控制台看到正确的结果。

注:

range(5,-1,-1):
        使用range产生一个列表,从5开始到-1之前结束。range的用法是range(开始,结束,步长),因为我们是要从大到小,所以我            们用-1表示步长为-1,意味着每次-1,如果是-2,那就是每次-2
str(x):
        把x变量转换成字符串
 print(mystr,end = "") :
        我们打印字符串之后,不换行,即end=""
print("\b" * (len(mystr)*2),end = "",flush=True):
        "\b" * (len(mystr)*2)这句话的意思是,打印'\b'这个转义字符,然后打印len(mystr)*2次。len得到字符串长度,为什么要*2              呢?要知道,我们用的字符串是中文,而1个中文字符 = 2个英文字符(占位),所以,如果字符串是英语,我们完全可以            不*2,但是中文字符就不同了。具体小伙伴可以把*2去掉试试看
flush = True:
        开启缓冲区
\b转义字符:
        退格功能,相当于在编辑文件的时候按下BackSpace键,从光标位置往前删掉一个字符
time.sleep(1):
        让程序暂停1秒

这样做的就能每次print之后,\b帮我们把一行内的字符都清光,这就是我们为什么要获得字符串长度的原因

实现百分比进度功能

让我们做第二个显示百分比进度的程序:

#-*- coding:utf-8 -*-

import time

print("显示百分比")
for x in range(101):
    mystr = "百分比" + str(x) + "%"
    print(mystr,end = "")
    print("\b" * (len(mystr)*2),end = "",flush=True)
    time.sleep(0.5)

 原理和倒计时程序一样,同样不能在IDLE中运行哦。

附:
循环(10次)输出动态【loading......】效果(参考以上方法手动实现)

import time

print("Loading", end="")
temp_time = 0
while temp_time < 10:
    for i in range(6):
        print(".", end="")
        time.sleep(0.3)
    print("\b" * 6, end="")
    temp_time += 1

扩展阅读

python的print(flush=True)实现动态loading......效果
作者:Granthoo 出处:csdn

python实现原地刷新方式输出-可用于百分比进度显示输出
作者:weixin_33736048 出处:csdn

展开阅读全文

没有更多推荐了,返回首页