python 覆盖上一行

问题描述 投票:0回答:3

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

python python-2.7 printing overwrite pi
3个回答
23
投票

在输出前添加回车符

'\r'
,并且不要以换行符
'\n'
结尾。这会将光标置于当前行的开头,因此输出将覆盖之前的内容。用一些尾随空格填充它以保证覆盖。例如

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

照常使用

print
输出最终值。

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


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

0
投票

cnt = 0 而真实: 碳纳米管 += 1 打印 (” “,cnt,结束=“”)

前面的空格(由第一个“,”引起)是为了更易读的输出

© www.soinside.com 2019 - 2024. All rights reserved.