2012-03-25 21 views
11

¿cómo se sobrescribe la impresión anterior en python 2.7? Estoy haciendo un programa simple para calcular pi. aquí está el código:python sobrescribir la línea anterior

o = 0 
hpi = 1.0 
i = 1 
print "pi calculator" 
acc= int(raw_input("enter accuracy:")) 
if(acc>999999): 
     print "WARNING: this might take a VERY long time. to terminate, press CTRL+Z" 
print "precision: " + str(acc) 
while i < acc: 
     if(o==0): 
       hpi *= (1.0+i)/i 
       o = 1 
     elif(o==1): 
       hpi *= i/(1.0+i) 
       o = 0 
     else: 
       print "loop error." 
     i += 1 
     if i % 100000 == 0: 
       print str(hpi*2)) 
print str(hpi*2)) 

Emite básicamente el pi actual después de 100000 cálculos. ¿Cómo puedo sobrescribir el cálculo anterior?

Respuesta

19

Prefijo su salida con el símbolo de retorno de carro '\r' y no lo termine con el símbolo de avance de línea '\n'. Esto colocará el cursor al comienzo de la línea actual, por lo que la salida sobrescribirá su contenido anterior. Rellene con espacio en blanco al final para garantizar la sobrescritura. P.ej.

sys.stdout.write('\r' + str(hpi) + ' ' * 20) 
sys.stdout.flush() # important 

salida el valor final como de costumbre con print.

Creo que esto debería funcionar tanto en la mayoría de los emuladores de terminal * nix y en la consola de Windows. YMMV, pero esta es la forma más simple.

+1

En algunas plataformas ' '\ r'' única 'borra' un carácter (efecto similar a una tecla de retroceso), por lo que en ese caso tendría que realizar un seguimiento, ya sea que el tamaño de su última línea era anteponer y que muchos '\ r' caracteres en su próxima línea, o más simplemente simplemente tenga una salida de longitud fija acolchada (por ejemplo, usando 'str.rjust (...)') –

+0

thx, eso es justo lo que necesito. – Cinder

4

Echa un vistazo this answer. Básicamente, \r funciona bien, pero debe asegurarse de imprimir sin los caracteres de nueva línea.

cnt = 0 
print str(cnt) 
while True: 
    cnt += 1 
    print "\r" + str(cnt) 

Esto no va a funcionar porque se imprime una nueva línea cada vez, y \r simplemente se remonta a la nueva línea anterior.

Agregar una coma a la declaración print evitará que imprima una nueva línea, por lo que \b volverá al principio de la línea que acaba de escribir, y puede escribir sobre ella.

cnt = 0 
print str(cnt), 
while True: 
    cnt += 1 
    print "\r" + str(cnt), 
Cuestiones relacionadas