I'm trying to create a code for a countdown timer that stays in place: so that each line overwrites the previous one. This is what I have so far:
import time
def countdown(t):
while t:
mins, secs = divmod(t, 60)
timeformat = "{:02d}:{:02d}".format(mins, secs)
print(timeformat, end='\r')
time.sleep(1)
t -= 1
print("That's the end! You lose...\n\n\n\n\n")
exit()
countdown(10)
The output, however, is:
00:10
00:09
00:08
...
00:00
That's the end! You lose...
Why is the carriage return seemingly not working?
IDLE doesn't support most control characters such as \r, \b.
\r should work if you start Python REPL in a Unix terminal or in Windows console instead.
When \r doesn't work, try \x08 (backspace), and add the flush=True to be safe:
print('\x08' * 5 + timeformat, end='', flush=True)
来源:https://stackoverflow.com/questions/35768165/carriage-return-not-working-in-idle