python覆盖上一行

时间:2012-03-25 13:55:07

标签: python python-2.7 printing overwrite pi

如何在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。如何让它覆盖以前的计算?

2 个答案:

答案 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),