Python入门程序练习题-文本进度条
- 程序来自BITmooc
- 此程序涉及到time里的一些函数和print的更深一步的用法
- 题目说明:
采用字符串方式打印可以动态变化的文本进度条,进度条需要能在一行中逐渐变化
要求如下:
(1) 采用 sleep() 模拟一个持续的进度,获得文本进度条的变化时间;
(2) 通过print()函数实现单行动态刷新,在print()函数中更换参数end的默认值为’’,每次使用print()函数输出时不能换行;
(3) 要能回退:打印后光标到之前的位置 \r。
- 代码
import time
scale=eval(input('please type the scale:')) #eval将str转为对应的数值类型
print('Start'.center(50//2,'-'))
#center(x,'-')表示居中,宽度为x,其余用'-'填充
start=time.perf_counter()
#调用一次perf_counter(),从计算机系统里随机选一个时间点A
#计算其距离当前时间点B1有多少秒。
#当第二次调用该函数时,默认从第一次调用的时间点A算起,
#距离当前时间点B2有多少秒。
#两个函数取差,即实现从时间点B1到B2的计时功能。
for i in range(scale+1):
a=i*'*'
b='.'*(scale-i)
c=(i/scale)*100
dur=time.perf_counter()-start
print('\r{:>3.0f}%[{}->{}]{:.2f}s'.format(c,a,b,dur),end='')
#\r用来在每次输出完成后,将光标移至行首
#这样保证进度条始终在同一行输出,即在一行不断刷新的效果
#{:^3.0f},输出格式为居中,占3位,小数点后0位,浮点型数,对应输出的数为c
#第二个{},对应输出的数为a
#第三个{},对应输出的数为b
#{:.2f},输出有两位小数的浮点数,对应输出的数为dur
#end='',用来保证不换行,不加这句默认换行
#这个输出形式是需要记住的
time.sleep(0.1)
#在输出下一个百分之几的进度前,停止0.1秒
print('\n'+'end'.center(50//2,'-'))```