12

你如何在 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。我怎样才能让它覆盖以前的计算?

4

2 回答 2

23

在输出前加上回车符号'\r',不要以换行符号结束'\n'。这会将光标放在当前行的开头,因此输出将覆盖之前的内容。用一些尾随空格填充它以保证覆盖。例如

sys.stdout.write('\r' + str(hpi) + ' ' * 20)
sys.stdout.flush() # important

像往常一样输出最终值print

我相信这应该适用于大多数 *nix 终端模拟器和 Windows 控制台。YMMV,但这是最简单的方法。

于 2012-03-25T14:06:52.983 回答
4

看看这个答案。基本上\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),
于 2014-11-27T16:29:05.667 回答