[英]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.