2012-03-25 11 views
11

Wie überschreiben Sie den vorherigen Druck in Python 2.7? Ich mache ein einfaches Programm, um Pi zu berechnen. hier ist der Code:Python überschreiben vorherige Zeile

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)) 

basicly Es gibt das aktuelle pi nach 100000 Berechnungen. Wie kann ich die vorherige Berechnung überschreiben?

Antwort

19

Setzen Sie Ihre Ausgabe mit dem Wagenrücklaufsymbol '\r' vor und beenden Sie sie nicht mit dem Zeilenvorschubsymbol '\n'. Dadurch wird der Cursor an den Anfang der aktuellen Zeile gesetzt, so dass die Ausgabe ihren vorherigen Inhalt überschreibt. Pad es mit einigen Leerzeichen, um Überschreiben zu garantieren. Z.B.

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

Ausgabe des endgültigen Wertes wie üblich mit print.

Ich glaube, das sollte sowohl in den meisten * nix-Terminal-Emulatoren und Windows-Konsole funktionieren. YMMV, aber das ist der einfachste Weg.

+1

Auf einigen Plattformen ' '\ r'' nur‚löscht‘ein Zeichen (ähnlich Wirkung wie eine Rücktaste), so dass in diesem Fall, dass Sie haben, würde man entweder groß Ihre letzte Zeile war verfolgen und vorangestellt wird, dass viele '\ r' Zeichen in Ihre nächste Zeile, oder einfach nur immer eine gepolsterte Ausgabe fester Länge (zB mit 'str.rjust (...)') –

+0

thx, das ist genau das, was ich brauche. – Cinder

4

Auschecken this answer. Grundsätzlich \r funktioniert gut, aber Sie müssen sicherstellen, dass Sie ohne die Newline-Zeichen drucken.

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

Das wird nicht funktionieren, weil Sie eine neue Zeile jedes Mal drucken, und \r gehen nur zurück zum vorherigen Newline.

Wenn Sie der Anweisung print ein Komma hinzufügen, wird verhindert, dass ein Zeilenumbruch gedruckt wird. Daher wird \b an den Anfang der gerade geschriebenen Zeile zurückgehen, und Sie können darüber schreiben.

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