2012-03-25 16 views
11

ओवरराइट करें आप पिछले प्रिंट को पायथन 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 गणनाओं के बाद वर्तमान पीआई आउटपुट करता है। मैं इसे पिछली गणना को ओवरराइट कैसे कर सकता हूं?

उत्तर

19

कैरिज रिटर्न प्रतीक '\r' के साथ अपने आउटपुट को उपसर्ग करें और लाइन फीड प्रतीक '\n' के साथ इसे समाप्त न करें। यह वर्तमान लाइन की शुरुआत में कर्सर रखेगा, इसलिए आउटपुट पिछली सामग्री को ओवरराइट करेगा। ओवरराइट की गारंटी के लिए कुछ पिछली खाली जगह के साथ इसे पैड करें। जैसे

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

print के साथ सामान्य रूप से अंतिम मान आउटपुट करें।

मेरा मानना ​​है कि यह अधिकांश * निक्स टर्मिनल अनुकरणकर्ताओं और विंडोज कंसोल दोनों में काम करना चाहिए। वाईएमएमवी, लेकिन यह सबसे आसान तरीका है।

+1

कुछ प्लेटफॉर्म ' 'पर \ r'' केवल एक वर्ण (एक backspace कुंजी के समान प्रभाव)" मिटा देता है ", तो उस मामले में आप करने के लिए होता है या तो आप बड़े ट्रैक अपने अंतिम पंक्ति था और कई कि पहले जोड़ें '\ 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), 
संबंधित मुद्दे