实例4:文本进度条

代码演示了如何使用Python创建一个文本进度条,通过字符串格式化和time.sleep函数模拟进度更新和动画效果。进度条的完成部分由星号(*)表示,未完成部分由点号(.)表示,百分比动态计算并居中显示。此外,还介绍了如何利用time.perf_counter()计算程序执行时间,提升用户体验。
摘要由CSDN通过智能技术生成

当您运行这段代码时,会看到以下内容逐步打印出来:

```

------执行开始------

 0%[->........]

10%[*->.......]

20%[**->......]

30%[***->.....]

40%[****->....]

50%[*****->...]

60%[******->..]

70%[*******->.]

80%[********->]

90%[*********->]

100%[**********->]

------执行结束------

```

现在让我们逐行解析代码的执行过程:

1. 打印"------执行开始------"作为任务开始的提示信息。

2. 进入循环,范围从0到scale(10)。

3. 在每次循环中,根据当前的进度i生成两个字符串变量:a和b。

   - 变量a是通过将星号(*)重复i次而得到的,表示已完成的进度部分。

   - 变量b是通过将点号(.)重复(scale-i)次而得到的,表示尚未完成的进度部分。

4. 计算当前进度的百分比,并存储在变量c中。计算方式为(i/scale)*100。

5. 使用字符串格式化将当前进度条的情况打印出来。格式化字符串"{:^3.0f}%[{}->{}]"包含三个占位符,依次替换为百分比c、已完成的进度a和尚未完成的进度b。

6. 使用time.sleep(0.1)函数暂停0.1秒,以产生进度条的动画效果。

7. 循环重复执行步骤3至步骤6,直到循环结束。

8. 打印"------执行结束------"作为任务结束的提示信息。

这段代码使用简单的文本方式展示了一个进度条,以可视化地表示任务的执行进度。每次循环迭代,都会更新进度条并打印出来,通过暂停时间可以控制进度条的刷新速度。

-采用字符串方式打印可以动态变化的文本进度条

-进度条需要能在一行中逐渐变化

问题分析

如何获得文本进度条的变化时间?

-采用sleep()模拟一个持续的进度

-似乎不那么难

#TextProBarV1.py

import time

scale = 10                    ---->文本进度条大概的宽度

print("------执行开始------")

for i in range(scale+1):

a = '*' * i

b = '.' * (scale - i)

c = (i/scale)*100

print("{:^3.0f}%[{}->{}]".format(c,a,b))

time.sleep(0.1)

print("------执行结束------")

当使用字符串的`format()`方法来格式化字符串时,花括号 `{}` 用作占位符,指示在字符串中要插入变量的位置。让我们逐个解析这个字符串格式化表达式:`"{:^3.0f}%[{}->{}]"`。

1. `:` 冒号后面的 `^` 表示居中对齐字符串。

2. `3.0` 指定了总的输出宽度为3个字符,其中整数部分占据所有可用空间,小数部分没有指定所以为0位。

3. `f` 表示格式化一个浮点数。

4. `%` 用于给百分比留出位置。

5. `[{}->{}]` 是一个嵌套的占位符格式。内部的两个花括号 `{}` 将会替换成进度条已完成和未完成部分的字符串。

通过将变量 `c` 替换为 `{:^3.0f}`,我们可以确保百分比以居中对齐的形式显示,并且占据三个字符的宽度。

进度条的实际效果是通过将进度条已完成部分的字符串 `a` 和尚未完成部分的字符串 `b` 替换到格式化字符串中的花括号 `{}` 中实现的。

例如,在循环进行到40%时,`c` 的值为40,星号 `*` 重复了4次赋值给 `a`,点号 `.` 重复了6次赋值给 `b`。所以 `"{:^3.0f}%[{}->{}]"` 最终会被格式化为 `40%[****->......]`。

这样的字符串格式化使得打印的进度条具有一致的宽度,并且进度部分和未完成部分的长度根据当前进度而动态变化,从而呈现出一个不断更新的进度条效果。

单行动态刷新:指先像文本进度条一样,在每一行中根据程序的进度,不断的显示文本进度,进度条的信息,但是它并不换行

-刷新的本质是:用后打印的字符覆盖之前的字符

-不能换行:print()需要被控制

-要能退回:打印后光标退回到之前的位置\r

#TextProBarV1.py

import time

for i in range(101):

      print("\r{:3}%".format(i),end="")

time.sleep(0.1)

如果我们希望增加的字符串后面增加什么信息,就在end参数中增加,如果你不希望增加换行,那么就将end参数赋值为空字符串

#TextProBarV1.py

import time

scale = 10                   

print("------执行开始------")

start = time.perf_counter()

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实现光标向行首移动

time.sleep(0.1)

print("\n"+"执行结束".center(scale//2,'-'))

举一反三

计算问题扩展

-文本进度条程序使用了perf_counter()计时

-计时方法适合各类需要统计时间的计算问题

-例如:比较不同算法时间、统计部分程序运行时间

进度条扩展

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

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

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

文本进度条的不同设计函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值