2012-03-25 5 views
11

어떻게 파이썬 2.7에서 이전 프린트를 덮어 씁니까? 나는 pi를 계산할 간단한 프로그램을 만들고 있습니다. 코드는 다음과 같습니다.파이썬은 이전 라인을 덮어 씁니다.

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

일부 플랫폼에서는 '\ r'은 한 문자 만 삭제합니다 (백 스페이스 키와 비슷한 효과). 따라서이 경우에는 마지막 행이 길었던 부분을 추적하고 그 앞에 많은 문자를 추가해야합니다 '\ 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), 
관련 문제