To jest bardzo stary wątek, ale tutaj jest bardzo dokładna odpowiedź i przykładowy kod.
\r
to ciąg znaków reprezentujący powrót karetki z zestawu znaków ASCII. Jest taki sam jak ósemkowy 015
[ chr(0o15)
] lub szesnastkowy 0d
[ chr(0x0d)
] lub dziesiętny 13
[ chr(13)
]. Zobacz man ascii
nudne czytanie. Jest \r
to dość przenośna reprezentacja i jest łatwa do odczytania przez ludzi. Po prostu oznacza to przesunięcie karetki na maszynie do pisania do samego początku bez przesuwania papieru. Jest to CR
część, CRLF
która oznacza powrót karetki i przesunięcie linii .
print()
jest funkcją w Pythonie 3. W Pythonie 2 (dowolna wersja, z której chciałbyś skorzystać) print
możesz zostać zmuszony do funkcji poprzez zaimportowanie jej definicji z __future__
modułu. Zaletą tej print
funkcji jest to, że możesz określić, co ma być drukowane na końcu, zastępując domyślne zachowanie \n
drukowania nowego wiersza na końcu każdego print()
wywołania.
sys.stdout.flush
mówi Pythonowi, aby wyczyścił wyjście standardowego wyjścia , czyli tam, gdzie wysyłasz wyjście, print()
chyba że określono inaczej. Możesz także uzyskać to samo zachowanie, uruchamiając python -u
lub ustawiając zmienną środowiskową PYTHONUNBUFFERED=1
, pomijając w ten sposób wywołania import sys
i sys.stdout.flush()
. Kwota, którą zyskasz, robiąc to, jest prawie dokładnie zerowa i nie jest bardzo łatwa do debugowania, jeśli wygodnie zapomnisz, że musisz zrobić ten krok, zanim aplikacja zachowa się poprawnie.
I próbka. Zauważ, że działa to doskonale w Pythonie 2 lub 3.
from __future__ import print_function
import sys
import time
ANS = 42
FACTORS = {n for n in range(1, ANS + 1) if ANS % n == 0}
for i in range(1, ANS + 1):
if i in FACTORS:
print('\r{0:d}'.format(i), end='')
sys.stdout.flush()
time.sleep(ANS / 100.0)
else:
print()