12

Python 2.7で以前の印刷物をどのように上書きしますか? 円周率を計算する簡単なプログラムを作成しています。コードは次のとおりです。

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を出力します。以前の計算を上書きするにはどうすればよいですか?

4

2 に答える 2

23

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

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

でいつものように最終値を出力しprintます。

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

于 2012-03-25T14:06:52.983 に答える
4

この回答を確認してください。基本的\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),
于 2014-11-27T16:29:05.667 に答える