2012-03-25 3 views
11

python 2.7で以前の印刷物を上書きする方法は? 私はpiを計算する簡単なプログラムを作っています。コードは次のとおりです。pythonは前の行を上書きする

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

100000回の計算後に現在のpiが基本的に出力されます。以前の計算を上書きするにはどうすればよいですか?

答えて

19

出力にキャリッジリターン記号'\r'を付加し、改行記号'\n'で終了しないでください。これは現在の行の先頭にカーソルを置くので、出力は前の内容を上書きします。上書きを保証するために後ろに空白を入れてください。例えば。

printで通常の最終値を出力します。

これは、ほとんどの* nix端末エミュレータとWindowsコンソールの両方で動作するはずです。 YMMVですが、これは最も簡単な方法です。

+1

プラットフォームによっては、1文字(バックスペースキーと同様の効果)しか「消去」されない場合があります。その場合は、最後の行が大きく、 '\ r'文字を次の行に挿入するか、単に 'str.rjust(...)'を使用して固定長の出力をパディングします。 –

+0

thx、それだけです。 – Cinder

4

this answerをご覧ください。基本的に\rはうまくいきますが、改行文字なしで印刷するようにする必要があります。

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

新しいラインを毎回印刷し、\r戻ったばかりの前の改行になりますので、これは動作しません。

printステートメントにコンマを追加すると、改行が印刷されないので、\bは、書き込んだ行の先頭に戻り、上書きすることができます。

cnt = 0 
print str(cnt), 
while True: 
    cnt += 1 
    print "\r" + str(cnt), 
関連する問題