在 mac 上覆盖 python 3.x 中的打印行

Overwrite printed line in python 3.x on mac

我正在尝试编写一个涉及使用抛硬币、正面或反面的程序,但它会打印 'heads' 然后被 'tails' 替换并继续这样做直到它决定一个答案。

目前,当我 运行 程序时,它每次都会在下一行打印 'heads' 或 'tails'。这在空闲和终端上都会发生。

我试过使用回车 return (\r)、退格键 (\b) 和 sys.stdout.write() 以及 .flush() 但都不起作用,它只是继续在下一行。

是否有其他方法可以擦除已打印的内容,或者我可以使用其他软件吗? 这是我的代码:

import time
import random

offset = random.randint(0,1)

for i in range (0, 20+offset):
    if i % 2 == 0:
        print("Heads")
    else:
        print("Tails")
    print("\r")
    time.sleep(0.1)

print 将一个 \n 字符写到末尾,因此如果您想保持在同一行,则需要修改它。

import time
import random

offset = random.randint(0,1)

for i in range (0, 20+offset):
    if i % 2 == 0:
        print("Heads", end='')
    else:
        print("Tails", end='')
    print("\r", end='')
    time.sleep(0.1)

编辑:这只适用于 python 3,如果你想在 python 2 中使用它,那么你需要写信给 sys.stdout

import time
import random
import sys  

offset = random.randint(0,1)

for i in xrange(0, 20+offset):
    if i % 2 == 0:
        sys.stdout.write("Heads")
    else:
        sys.stdout.write("Tails")
    time.sleep(0.1)
    sys.stdout.flush()  
    sys.stdout.write("\r")  

我知道这可能不是最快的实现,但它有效,我可以稍后输入更快的方法