2015-06-19 3 views
5

मैंने एक ऐसा फ़ंक्शन लिखा है जो कुछ स्थान और समय को बचाने के लिए एक चरण विकल्प के साथ दो अंकों के समूहों के बीच एक टेक्स्ट फ़ाइल में सहेजता है, और मैं यह समझ नहीं पाया कि प्रतिशत मूल्य कैसे दिखाया जाए, इसलिए मैंने कोशिश की ।पुनरावृत्त ऑपरेशन के प्रतिशत की गणना करने का सबसे अच्छा तरीका क्या है?

for length in range(int(limit_min), int(limit_max) + 1): 

    percent_quotient = 0 
    j=0 
    while j <= (int(length * "9")): 
     while len(str(j)) < length: 
      j = "0" + str(j) 

     percent_quotient+=1 
     j = int(j) + int(step) # increasing dummy variable 

for length in range(int(limit_min), int(limit_max) + 1): 
    counter=1 
    i = 0 
    while i <= (int(length * "9")): 
     while len(str(i)) < length: 
      i = "0" + str(i) # 

     print "Writing %s to file. Progress: %.2f percent." % (str(i),(float(counter)/percent_quotient)*100) 
     a.write(str(i) + "\n") # this is where everything actually gets written 
     i = int(i) + int(step) # increasing i 
     counter+=1 
    if length != int(limit_max): 
     print "Length %i done. Moving on to length of %i." % (length, length + 1) 
    else: 
     print "Length %i done." % (length) 
a.close() # closing file stream 
print "All done. Closed file stream. New file size: %.2f megabytes." % (os.path.getsize(path)/float((1024 ** 2))) 
print "Returning to main..." 

मैं यहाँ करने की कोशिश की क्या था कार्यक्रम बनाने के लिए एक यात्रा के रूप में कई बार यह आम तौर पर यह करना होगा के रूप में करते हैं, लेकिन किसी फ़ाइल के लिए लिखने की बजाय, मैं सिर्फ percent_quotient चर गिनती कितनी बार यात्रा वास्तव में है बनाया दोहराया जा रहा है। (मैंने j डमी वैरिएबल कहा क्योंकि यह केवल लूप को तोड़ने के लिए है; मुझे खेद है कि इसके लिए कोई और अभिव्यक्ति है।) दूसरा भाग वास्तविक काम है और मैंने काउंटर वैरिएबल डाला है, और मैं इसे percent_quotient से विभाजित करता हूं और साथ गुणा करता हूं प्रतिशत प्राप्त करने के लिए 100।

समस्या यह है कि, जब मैंने 1 से लंबाई की लंबाई से 1 शब्दकोश बनाने की कोशिश की, तो वास्तव में सब कुछ गिनने में एक मिनट लग गया। मुझे लगता है कि अगर मैं भी बड़ा शब्दकोश बनाना चाहता हूं तो इसमें अधिक समय लगेगा।

मेरा सवाल है, क्या ऐसा करने का एक बेहतर/तेज़ तरीका है?

+2

आपकी पोस्ट में थोड़ी सी डरावनी लम्बाई थी इसलिए मैंने कुछ पृष्ठभूमि कहानी को छीन लिया जो मुझे लगता है कि यहां बहुत सारे उपयोगकर्ता अप्रासंगिक मानेंगे। उम्मीद है कि मैंने बहुत ज्यादा कटौती नहीं की है। बेशक पूछने वाले के रूप में आप मेरे संपादन को वापस करने के लिए स्वतंत्र हैं (जैसा कि उनके प्रतिनिधि के आधार पर यहां कई अन्य उपयोगकर्ता हैं)। –

+0

नहीं, सब ठीक है, मुझे खेद है। असल में, धन्यवाद, मुझे लगता है कि अगर लोग इसे बहुत लंबे समय तक पाते हैं तो अधिक लोग इसे बच जाएंगे। – Meaty

उत्तर

0

ठीक है, चरण चर मुझे बहुत सिरदर्द दे रहा है, लेकिन इसके बिना, यह गणना करने का सही तरीका होगा कि कितने संख्याएं लिखी जा रही हैं।

percent_quota=0 #starting value  
for i in range(limit_min,limit_max+1): #we make sure all lengths are covered 
    percent_quota+=(10**i)-1 #we subtract 1 because for length of 2, max is 99 

टेस्सेलिंगहेकलर, धन्यवाद, आपके उत्तर ने मुझे यह समझने में मदद की!

3

मैं वास्तव में यह नहीं कर सकता कि यह क्या कर रहा है। लेकिन यह है कि यह मोटे तौर पर यह कर रहा है दिखता है:

a = file('d:/whatever.txt', 'wb') 
limit_min = 1 
limit_max = 5 
step = 2 

percent_quotient = (10 ** (limit_max - limit_min))/step 

for i in range(limit_min, 10**limit_max, step): 
    output = str(i).zfill(limit_max) + '\r\n' 
    a.write(output) 

    if i % 100 < 2: 
     print "Writing %s to file. Progress: %.2f percent." % (str(i),(float(i)/percent_quotient)*100) 

a.close() 

अगर यह सही है, तो मेरा सुझाव है:

  • के बजाय while len(str(num)) < length: "0" + str(num)
  • डॉन कम कोड पाशन और अधिक गणित
  • उपयोग string.zfill() करो ' कंसोल को प्रत्येक एकल संख्या के साथ कंसोल को जबरदस्त नहीं करते हैं, केवल प्रत्येक सौ संख्याओं, या हर हज़ार संख्याओं, या तो एक स्थिति अद्यतन मुद्रित करें।
  • तंग छोरों के अंदर क्या कम str(int(str(int(str(int(str(int(...
  • बचें "" + blah, यदि संभव हो, यह कारण बनता तार हर बार पुनर्निर्माण की और यह विशेष रूप धीमी है।
+0

जैसा कि मैंने देखा है कि मेरा संस्करण 1400% पूर्ण और गिनती पर चढ़ रहा है ... lol। मुझे शायद खुद को और गणित करना चाहिए। – TessellatingHeckler

+0

आपकी मदद के लिए धन्यवाद, सब कुछ थोड़ा भ्रमित लगता है क्योंकि मैं पहली बार zfill() जैसी कुछ विधियों को देख रहा हूं। सुनिश्चित नहीं है कि प्रतिशत_quotient अच्छा है क्योंकि यह चरण से प्रभावित होता है। मुझे संक्षेप में इसका वर्णन करने की कोशिश करें। (क्षमा करें अगर मुझे यहां कुछ गड़बड़ है) असल में, मेरे कार्यक्रम का आउटपुट होगा: 0,2,4,6,8,00,02,04,06,08 99 994,99996,99998 तक सभी तरह से।(निश्चित रूप से \ n के साथ) आपके मामले में, मुझे लगता है कि जब "मैं" लूप के अंत तक पहुंच जाता है और 10 ** सीमा_मैक्स बन जाता है, तो प्रतिशत वास्तव में 100 * limit_min के बराबर होता है। इस मामले में, यह 100% होगा, लेकिन उदाहरण के लिए यदि सीमा_मिन 2 थी तो क्या होगा? – Meaty

+0

हालांकि, आपके कोड ने मुझे बहुत मदद की है, और अगर मुझे कुछ गलत मिला, तो मुझे खेद है। मैं इसे सुबह में पढ़ूंगा और इसे चलाने की कोशिश करता हूं, बस अगर मैंने कुछ गलत समझा। मुझे कुछ और जानकारी इकट्ठा करने दो, बस कुछ और जानकारी एकत्र करने के लिए, लेकिन इसके अलावा, मुझे मिल गया। कम लूपिंग, अधिक गणित। धन्यवाद! – Meaty

संबंधित मुद्दे

 संबंधित मुद्दे