2012-03-25 13 views
11

jak nadpisać poprzedni wydruk w python 2.7? Tworzę prosty program do obliczania pi. tutaj jest kod:python zastąpić poprzednią linię

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

Zasadniczo wyprowadza bieżące pi po 100000 obliczeniach. jak mogę nadpisać poprzednie obliczenia?

Odpowiedz

19

Przedrostek wydruku z symbolem powrotu karetki '\r' i nie kończ go symbolem przesunięcia linii '\n'. Spowoduje to umieszczenie kursora na początku bieżącej linii, więc wynik będzie nadpisał poprzednią zawartość. Podeprzyj go z pewnym końcem pustego miejsca, aby zagwarantować nadpisanie. Na przykład.

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

Ostatnią wartość wyjściową należy wysiać jak zwykle, korzystając z print.

Wierzę, że powinno to działać zarówno w większości * nix emulatorów terminali i konsoli Windows. YMMV, ale jest to najprostszy sposób.

+1

Na niektórych platformach ' '\ r'' tylko«usuwa»jeden znak (podobny efekt do klawisza Backspace), więc w tym przypadku trzeba by albo śledzić cię wielka Twoja ostatnia linia była i poprzedzić że wiele "\ r" znaków do następnej linii, lub po prostu po prostu zawsze mieć wyściełane wyjście o stałej długości (np. używając 'str.rjust (...)') –

+0

thx, to właśnie to, czego potrzebuję. – Cinder

4

Zapoznaj się z this answer. Zasadniczo \r działa dobrze, ale musisz upewnić się, że drukujesz bez znaków nowej linii.

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

To nie zadziała, ponieważ za każdym razem drukować nową linię, a \r prostu wraca do poprzedniego znaku nowej linii.

Dodanie przecinka do instrukcji print uniemożliwi wydrukowanie nowej linii, dzięki czemu \b powróci na początek właśnie napisanej linii i możesz ją napisać.

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