[Python] 使用print作进度条(解决end=''时print不显示的问题)

2022-09-26 10:53:12 浏览数 (2)

0x00

Python的print()末尾自带n,如果不想要末尾的n可以使用end=''控制末尾的字符。 例如这样:

代码语言:javascript复制
# 示例一
print("12",end='')
print("34")

# 打印
# 1234

# 示例一
print("12",end='-')
print("34")

# 打印
# 12-34

0x01

假如现在要写一个加载进度条,大部分人下意识会这样用:

为了展示方便使用延时

代码语言:javascript复制
import time

print('加载中',end="")
for n in range(0,10):
    print(".",end="")
    time.sleep(0.5)
print("n加载成功!")

显示如下:

代码语言:javascript复制
加载中..........
加载成功!

虽然结果看着没问题,但过程有问题。 理想中的进度条.应该是渐渐出现的,就像这样:

代码语言:javascript复制
加载中.
加载中..
加载中...
加载中....

可这个程序的加载中..........是整个出现的,就像这样:

代码语言:javascript复制
// 运行
// 1s
// 2s
// 3s
// 4s
// 5s
加载中..........

0x02

经过查询得知,print只有在接收到n时才会把数据送到控制台显示。 例如:

代码语言:javascript复制
# 示例一

print('1',end='') # 控制台不显示
print('2',end='') # 控制台不显示
print('3') # 控制台显示 123

# 示例二

print('1',end='') # 控制台不显示
print('2',end='') # 控制台不显示
print('') # 控制台显示 12

# 示例三

print('1',end='') # 控制台不显示
print('2',end='') # 控制台不显示
print('3n',end='') # 控制台显示 123

0x03

解决起来也很简单,给print()加一个flush=True即可。 例如上面的0x01的程序,只要改成这样就能实现理想中的效果了。

代码语言:javascript复制
import time

print('加载中',end="",flush=True)
for n in range(0,10):
    print(".",end="",flush=True)
    time.sleep(0.5)
print("n加载成功!")

0 人点赞