5

我无法使用回车在 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幕后工作,但我如何让指纹穿插在睡眠中?

4

5 回答 5

8

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

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

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

虽然不知道如何解决第一个问题......

于 2013-07-03T03:32:54.407 回答
1

对于解决方案 1(打印版本),在 print 语句末尾包含逗号将阻止在末尾打印换行符,如docs中所示。但是,正如Brian提到的那样,stdout 仍然需要刷新。

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

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

from __future__ import print_function
for i in range(10):
    print("\rCountdown: %d" % i, end="")
    sys.stdout.flush()
    time.sleep(1)
于 2018-08-02T03:19:14.417 回答
1

我用

import time
for i in range(0,10):
    print "countdown: ",10-i
    time.sleep(1)    
    print chr(12)#clear screen
print "lift off"
于 2020-05-10T20:30:34.500 回答
-1

无处理:

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
于 2018-08-02T07:25:03.847 回答
-2

另一种解决方案:

for i in range(10):
    print "Countdown: %d\r" % i,
    time.sleep(1)
于 2013-09-10T13:59:14.133 回答