簡體   English   中英

Python 2.7 回車倒計時

[英]Python 2.7 carriage return countdown

我在使用回車符在 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(打印版本),在打印語句的末尾包含一個逗號將防止在末尾打印換行符,如docs 所示 但是,正如Brian提到的那樣,仍然需要刷新標准輸出。

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"

處理無:

 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: %d\r" % i,
    time.sleep(1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM