Python переписать предыдущую строку - PullRequest
11 голосов
/ 25 марта 2012

как переписать предыдущий отпечаток в 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 вычислений.Как я могу сделать это перезаписать предыдущий расчет?

Ответы [ 2 ]

19 голосов
/ 25 марта 2012

Добавьте к выводу символ возврата каретки '\r' и не заканчивайте его символом перевода строки '\n'.Это поместит курсор в начало текущей строки, поэтому вывод перезапишет предыдущее его содержимое.Дополните его пробелом, чтобы гарантировать перезапись.Например,

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

Выведите итоговое значение как обычно с помощью print.

. Я считаю, что это должно работать как в большинстве * эмуляторов терминалов nix, так и в консоли Windows.YMMV, но это самый простой способ.

4 голосов
/ 27 ноября 2014

Проверьте этот ответ .В основном \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),
...