Python 2.7 回车倒计时



我在使用回车符在python中实现简单的倒计时时遇到了问题。 我有两个版本,每个版本都有问题。

印刷版:

for i in range(10):
    print "rCountdown: %d" % i
    time.sleep(1)

问题:r不执行任何操作,因为最后打印了一个换行符,因此它给出了输出:

Countdown: 0
Countdown: 1
Countdown: 2
Countdown: 3
Countdown: 4
Countdown: 5
Countdown: 6
Countdown: 7
Countdown: 8
Countdown: 9

Sys.stdout.write 版本:

for i in range(10):
    sys.stdout.write("rCountdown: %d" % i)
    time.sleep(1)
print "n"

问题:所有睡眠都发生在开始时,睡眠 10 秒后,它只会Countdown: 9打印到屏幕上。 我可以看到r在幕后工作,但是如何让打印件穿插在睡眠中呢?

对于解决方案 2,您需要刷新标准输出。

for i in range(10):
    sys.stdout.write("rCountdown: %d" % i)
    sys.stdout.flush()
    time.sleep(1)
print ''

另外,只需打印一个空字符串,因为打印将附加换行符。或者,如果您认为 print 'n' , 更具可读性,请使用它,因为尾随逗号会抑制通常会附加的换行符。

不知道如何解决第一个...

对于解决方案 1(打印版本(,在打印语句末尾包含逗号将阻止在末尾打印换行符,如文档中所示。然而,正如布莱恩所提到的,标准输出仍然需要冲洗。

for i in range(10):
    print "rCountdown: %d" % i,
    sys.stdout.flush()
    time.sleep(1)

另一种方法是使用打印功能,但仍需要sys.stdout.flush()

from __future__ import print_function
for i in range(10):
    print("rCountdown: %d" % i, end="")
    sys.stdout.flush()
    time.sleep(1)

我使用

import time
for i in range(0,10):
    print "countdown: ",10-i
    time.sleep(1)    
    print chr(12)#clear screen
print "lift off"

HANDLE NONE:

for i in xrange(10):
    print "COUNTDOWN: %d" %i, time.sleep(1)
# OP
# Countdown: 0 None
# Countdown: 1 None
# Countdown: 2 None
# Countdown: 3 None
# Countdown: 4 None
# Countdown: 5 None
# Countdown: 6 None
# Countdown: 7 None
# Countdown: 8 None
# Countdown: 9 None

另一种解决方案:

for i in range(10):
    print "Countdown: %dr" % i,
    time.sleep(1)

最新更新