【问题标题】:python overwrite previous linepython覆盖上一行
【发布时间】:2012-04-09 06:44:36
【问题描述】:

如何在 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


    【解决方案1】:

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

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

    像往常一样使用print 输出最终值。

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

    【讨论】:

    • 在某些平台上 '\r' 仅“擦除”一个字符(类似于退格键的效果),因此在这种情况下,您必须跟踪您的最后一行,并在前面加上很多 ' \r' 字符到你的下一行,或者更简单地说总是有一个填充的固定长度输出(例如使用 str.rjust(...)
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2021-10-27
      • 2013-12-28
      • 1970-01-01
      • 2021-06-24
      • 1970-01-01
      • 1970-01-01
      • 2012-07-02
      • 2011-04-28
      • 2016-05-27
      相关资源
      最近更新 更多