如何在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。如何让它覆盖以前的计算?
答案 0 :(得分:19)
使用回车符号'\r'
作为输出前缀,不要以换行符号'\n'
结束。这会将光标放在当前行的开头,因此输出将覆盖其先前的内容。用一些尾随空格填充它以保证覆盖。 E.g。
sys.stdout.write('\r' + str(hpi) + ' ' * 20)
sys.stdout.flush() # important
使用print
照常输出最终值。
我相信这应该适用于大多数* nix终端模拟器和Windows控制台。 YMMV,但这是最简单的方法。
答案 1 :(得分:4)
结帐this answer。基本上\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),