\r in Python non elimina l'intera riga
ho un problema abbastanza complesso, ma ecco la "versione più semplice" in modo che tu possa capirlo meglio.
import time
for i in range(10):
time.sleep(1)
print('{}\r'.format(i), end="")
e qui funziona tutto bene, il problema arriva quando provo a fare un conto alla rovescia
import time
for i in range(10):
time.sleep(1)
print('{}\r'.format(10-i), end="")
l'output è 10... quindi 90... 80... 70 e così via, sembra che la seconda cifra del 10 non venga cancellata. qualcuno sa dirmi perché?
Risposte
\rsposta il cursore all'inizio della riga, ma non "cancella" nulla di già stampato a meno che non lo sovrascrivi (questo potrebbe dipendere dalla piattaforma). Pertanto, il 0personaggio rimarrà visibile. Puoi gestirlo stampando sempre una colonna "a larghezza fissa", in modo che gli spazi vuoti vengano stampati per cancellare tutto ciò che è rimasto prima. Puoi anche semplicemente inserire il CR nel endparametro.
Così:
import time
for i in range(10):
time.sleep(1)
print('{: <3}'.format(10-i), end='\r')
Questo utilizza un identificatore di formato per indicare una colonna -width piena di spazio, <allineata a sinistra. 3Puoi cambiare il 3numero in un numero più alto a seconda di quante cifre ha bisogno il tuo contatore.
È causato da un semplice errore, manca uno spazio prima di \r:
Il tuo codice:
print('{}\r'.format(10-i), end="")
# > 10,90,80
Cambialo in:
print('{} \r'.format(10-i),
#> 10, 9, 8
Il problema è come le vecchie macchine da scrivere quando si preme \ril ritorno a capo va all'inizio della riga e cambia un carattere da lì. quindi 10 diventerà 90 quando il primo carattere cambia.
import time
for i in range(10):
time.sleep(1)
print('{:02d}'.format(10-i), end="\r")
Quindi una possibile soluzione è correggere la larghezza. qui ho fatto 2 cifre