python覆盖上一行

python覆盖上一行,python,python-2.7,printing,overwrite,pi,Python,Python 2.7,Printing,Overwrite,Pi,如何在python 2.7中覆盖以前的打印? 我正在做一个简单的程序来计算圆周率。代码如下: 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 "precisio

如何在python 2.7中覆盖以前的打印? 我正在做一个简单的程序来计算圆周率。代码如下:

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))
o=0
hpi=1.0
i=1
打印“pi计算器”
acc=int(原始输入(“输入精度:”)
如果(acc>99999):
打印“警告:这可能需要很长时间。若要终止,请按CTRL+Z”
打印“精度:”+str(acc)
而我:
如果(o==0):
hpi*=(1.0+i)/i
o=1
elif(o==1):
hpi*=i/(1.0+i)
o=0
其他:
打印“循环错误”
i+=1
如果i%100000==0:
打印str(hpi*2))
打印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),

在某些平台上,
'\r'
仅“擦除”一个字符(类似于退格键的效果),因此在这种情况下,您必须跟踪上一行的大小,并在下一行中预加那么多的'\r'字符,或者更简单地说,始终具有填充的固定长度输出(例如,使用
str.rjust(…)