Python练习实例:文本进度条——数据类型的综合应用

问题描述

采用字符串的方式,打印可以动态变化的文本进度条‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬,进度条需要能在一行中逐渐变化。

问题分析

首先,这个问题要求打印出类似进度条的字符串,这就会涉及到字符串操作符、字符串函数、字符串输出格式化等知识;
其次,这个问题要求进度条在一行中逐渐变化,这就要求每次字符串的输出不换行且覆盖原来输出的内容,要求会使用转义符“\r”,“\n”等。
最后,设计好程序的结构,即输入和输出,结合上面分析的程序主体,即可完成问题。

求解过程

问题简化

为了更快的将程序主体设计好,我们将问题尽可能的简化。
这个问题,我们可以先将它简化成:
制作几个格式符合要求的的字符串,并将他们逐一输出。

#referes_bar.py
import time as t
start_t=t.perf_counter()
print("安装开始".center(10,"="))
for i in range(11):
    a=i*"*"
    b=(10-i)*"."
    c=i*10
    d=t.perf_counter()-start_t
    print("{:3}% [{}>{}] {:.2f}s".format(c,a,b,d))
    t.sleep(0.1)
print("安装结束".center(10,"="))

输出结果如下:

=== RESTART: E:/Python3/Doc/class/Lesson3.Number Structure/refresh_bar.py ===
===安装开始===
  0% [>..........] 0.04s
 10% [*>.........] 0.16s
 20% [**>........] 0.39s
 30% [***>.......] 0.52s
 40% [****>......] 0.64s
 50% [*****>.....] 0.78s
 60% [******>....] 0.90s
 70% [*******>...] 1.01s
 80% [********>..] 1.13s
 90% [*********>.] 1.35s
100% [**********>] 1.47s
===安装结束===

问题具体化

我们只需要将每一次的输出内容稍作调整,即可达成我们需要的功能:打印可以动态变化的文本进度条‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬,进度条需要能在一行中逐渐变化。

    print("\r{:3}% [{}>{}] {:.2f}s".format(c,a,b,d),end="")

其中,"\r"作为转义符是回到本行行首的命令,也就是说我们每一次输出都是在光标所在行的行首开始输出;end="",在输出的结果后面添加一个空字符,因为每次输出会默认在结尾输入“\n”,因此造成每次都是在第二行行首开始输出,而end=""可以以空字符结尾,取缔“\n”,使得程序可以在同一行进行输出,从而产生刷新的效果。

最终程序

#referes_bar.py
import time as t
start_t=t.perf_counter()
print("安装开始".center(10,"="))
for i in range(11):
    a=i*"*"
    b=(10-i)*"."
    c=i*10
    d=t.perf_counter()-start_t
    print("\r{:3}% [{}>{}] {:.2f}s".format(c,a,b,d),end="")
    t.sleep(0.1)
print(“\n”,"安装结束".center(10,"="))

你可能感兴趣的:(Python,练习)