我试图使一个进度计,计数到100%,但我不能使它取代行,而是它打印出来:0%1%
2%那么我如何只用一行来改变它呢?
这是我的代码:
x = range(101)
for n in x:
timefluc = random.uniform(0, 1.2)
time.sleep(timefluc)
print("{0}%".format(n))
默认情况下,print
在打印完所有参数后添加一个换行符'n'
,将您移动到下一行。传递给它end='r'
(回车),使它返回到当前行的开头,而不前进到下一行。要确保输出没有缓冲(stdout
在连接到终端时通常是行缓冲的),请确保将flush=True
也传递给print
,以获得最终结果:
for n in range(101):
timefluc = random.uniform(0, 1.2)
time.sleep(timefluc)
print("{0}%".format(n), end='r', flush=True)
请注意,r
不会擦除该行,所以这只会起作用,因为在您的代码中,保证每个新输出至少与前一行一样长(因此将覆盖最后一行的全部数据)。如果您可能先输出长行,然后输出短行,则需要确保在所有输出中填充足够的空格,以匹配或超过最长可能行的长度(不超过终端宽度)。
这取决于您的终端/控制台应用程序,并且没有真正的标准方法,但是您可以尝试打印'回车'字符以进入行首:
x = range(101)
for n in x:
timefluc = random.uniform(0, 1.2)
time.sleep(timefluc)
print("r{0}%".format(n), end='')
注意r
和end=''
参数的用法。r
是回车"end
参数阻止print
在输出百分比后转到下一行。
你也可以使用{0:3}
来格式化,它将使文件保持3个字符长,自动在左边添加空格来填充,这样百分比就不会在你从1%到10%到100%的时候跳跃。