To jest bardzo stary wątek, ale tutaj jest bardzo dokładna odpowiedź i przykładowy kod.
\rto 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 asciinudne czytanie. Jest \rto 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 CRczęść, CRLFktó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ć) printmożesz zostać zmuszony do funkcji poprzez zaimportowanie jej definicji z __future__modułu. Zaletą tej printfunkcji jest to, że możesz określić, co ma być drukowane na końcu, zastępując domyślne zachowanie \ndrukowania nowego wiersza na końcu każdego print()wywołania.
sys.stdout.flushmó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 -ulub ustawiając zmienną środowiskową PYTHONUNBUFFERED=1, pomijając w ten sposób wywołania import sysi 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()