如何在Python

时间:2017-08-30 11:23:56

标签: python python-3.x printing sys

我创建了一个简单的python程序,最多可以计算10个

我想要实现的是程序删除以前的号码并打印新号码

这是我创建的代码:

import sys
import time
for i in range(10):
    text = "\r" + str(i)
    sys.stdout.write(text)
    sys.stdout.flush()
    time.sleep(1)

哪个输出:

0123456789

"\r"之后更改代码以使str(i)无效

import sys
import time
for i in range(10):
    text = str(i) + "\r"
    sys.stdout.write(text)
    sys.stdout.flush()
    time.sleep(1)

这也导致了:

0123456789

我一直在寻找它,并且最后只显示9,但它不会覆盖之前的数字

修改

我正在使用Windows,Python3

编辑2:

How to overwrite the previous print to stdout in python?不给我一个有效的答案,它仍然没有做我想要的

因此,由于我出色的推理,它不是重复的:P

6 个答案:

答案 0 :(得分:3)

作为替代方案,您可以使用os.system("cls")

清除整个窗口

答案 1 :(得分:0)

虚拟终端接受一些控制符号。其中一个是'\ b',将一个carret移回一个地方。这个也在Windows上被接受,我将在下面的示例中使用它。 Unix终端接受更多控件,包括颜色变化等等。



from time import sleep
import sys, os

def clear ():
    os.system("cls" if sys.platform.startswith("win") else "clear")

clear()

s = "1"
sys.stdout.write(s)
for x in range(2, 21):
    sleep(1)
    # Return carret to beginning of line:
    l = len(s)
    s = l*"\b"
    sys.stdout.write(s)
    # Clear line (just in case):
    s = l*" "
    sys.stdout.write(s)
    # Return to the beginning again:
    s = l*"\b"
    sys.stdout.write(s)
    # Write over new text:
    s = str(x)
    sys.stdout.write(s)

答案 2 :(得分:0)

使用end参数将“ \ r”指定为行结束。

import time
for i in range(10):
    print(i, end="\r")
    time.sleep(1)

答案 3 :(得分:-1)

我会这样做:

for x in range(10):
    print("{}".format(x), end="\r")

答案 4 :(得分:-1)

为什么不使用python的标准打印?在许多调试器屏幕中给出了Althougth,这往往不起作用。在终端(ubuntu)它确实

import time

for i in range (10):
    print(i, end='\r')
    time.sleep(1)

也许stdout也存在某些东西,但在这种情况下我通常使用python3的打印

答案 5 :(得分:-1)

我相信你的代码应该可以正常工作。问题应该是您使用的是 Windows终端。尝试使用Linux。大多数代码在Windows中不起作用。您可以参考此link来了解为什么必须在Windows上停止使用python。

这也是您可以尝试的替代代码。

    import time
    for i in range(10):
        text = str(i)
        print(text,end = "\r")
        time.sleep(1)