[Python] Come stampare su schermo senza generare nuove righe

Lorenzo Sutton lorenzofsutton a gmail.com
Mer 18 Apr 2012 12:36:35 CEST


On 17/04/12 22:20, Diego Barrera wrote:
> On 17/04/2012 16:03, Marco Beri wrote:
>> 2012/4/17 Karim Gorjux <lemieliste a gmail.com 
>> <mailto:lemieliste a gmail.com>>
>>
>>     Salve, mi piacerebbe poter stampare su schermo delle stringhe di
>>     output, ma senza doverle sempre ripetere.
>>      Ad esempio, se volessi fare un conto alla rovescia, vorrei che i
>>     numeri fossero scritti sempre nello stesso posto e non così
>>
>>     4
>>     3
>>     2
>>     1
>>     via!
>>
>>     o così (con la virgola dopo il print)
>>
>>     4 3 2 1 via!
>>
>>     Sapete indicarmi anche solo dove posso trovare doc su internet?
>>     Io pensavo che fosse il sys.stdout.flush(), ma penso di essermi
>>     sbagliato
>>
>>
>> Prova questo:
>>
>>     import sys
>>     import time
>>     for x in range(10):
>>         sys.stdout.write("%d\r" % x)
>>         sys.stdout.flush()
>>         time.sleep(0.5)
>>
>>
>
> A me se provo per il conto alla rovescia
>
> sys.stdout.write("%d\r" % (10-x))
>
> rimane lo zero del numero 10...
> invece di 9 mi dice 90
> invece di 8 , 80 etc.
>
> Visto che mi ha incuriosito, c'e' un modo per far sparire proprio 
> tutte le cifre/caratteri?
> A me viene tipo
>
> import sys
> import time
> for x in range(10):
>     message="%d\r" % (10-x)
>     sys.stdout.write(message)
>     sys.stdout.flush()
>     time.sleep(0.5)
>     sys.stdout.write(' ' * len(message) + '\r')
>     sys.stdout.flush()
>
> Pero' non mi pare tanto bello :)

Anche così forse (però mette il padding a sinistra dei numeri minori di 
10)...

import sys
import time
for x in range(10, 0, -1):
     sys.stdout.write("%2d\r" % x)
     sys.stdout.flush()
     time.sleep(0.5)
print("VIA!")


Maggiori informazioni sulla lista Python