如何在 python 2.7 中覆盖之前的打印内容? 我正在编写一个简单的程序来计算 pi。这是代码:
o = 0
hpi = 1.0
i = 1
print "pi calculator"
acc= int(raw_input("enter accuracy:"))
if(acc>999999):
print "WARNING: this might take a VERY long time. to terminate, press CTRL+Z"
print "precision: " + str(acc)
while i < acc:
if(o==0):
hpi *= (1.0+i)/i
o = 1
elif(o==1):
hpi *= i/(1.0+i)
o = 0
else:
print "loop error."
i += 1
if i % 100000 == 0:
print str(hpi*2))
print str(hpi*2))
它基本上是经过100000次计算后输出当前的pi。我怎样才能让它覆盖之前的计算?
在输出前添加回车符
'\r'
,并且不要以换行符 '\n'
结尾。这会将光标置于当前行的开头,因此输出将覆盖之前的内容。用一些尾随空格填充它以保证覆盖。例如
sys.stdout.write('\r' + str(hpi) + ' ' * 20)
sys.stdout.flush() # important
照常使用
print
输出最终值。
我相信这应该适用于大多数 *nix 终端模拟器和 Windows 控制台。 YMMV,但这是最简单的方法。
查看这个答案。基本上
\r
工作正常,但你必须确保打印时没有换行符。
cnt = 0
print str(cnt)
while True:
cnt += 1
print "\r" + str(cnt)
这是行不通的,因为你每次都会打印一个新行,而
\r
只会返回到上一个换行符。
在
print
语句中添加逗号将阻止其打印换行符,因此 \b
将返回到您刚刚写入的行的开头,并且您可以覆盖它。
cnt = 0
print str(cnt),
while True:
cnt += 1
print "\r" + str(cnt),
cnt = 0 而真实: 碳纳米管 += 1 打印 (” “,cnt,结束=“”)