как вы перезаписываете предыдущий отпечаток в 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 вычислений. как я могу заставить его перезаписать предыдущий расчет?
Ответ 1 · рейтинг 21 · rkhayrov
Префикс вашего вывода символом возврата каретки '\r' и не заканчивайте его символом перевода строки '\n'. Это поместит курсор в начало текущей строки, поэтому вывод будет перезаписывать предыдущее его содержимое. Заполните его некоторым конечным пустым пространством, чтобы гарантировать перезапись. Например.
sys.stdout.write('\r' + str(hpi) + ' ' * 20)
sys.stdout.flush() # important
Как обычно, выведите окончательное значение с помощью print.
Я считаю, что это должно работать как в большинстве эмуляторов терминала * nix, так и в консоли Windows. YMMV, но это самый простой способ.
Ответ 2 · рейтинг 4 · Anubian Noob
Ознакомьтесь с этим ответом. В основном \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),