2011-02-08 9 views
15

मैं 001 के चरण आकार का उपयोग करके 0 से 1 तक लूप करने की कोशिश कर रहा हूं (उदाहरण के लिए)। मैं ऐसा कैसे कर पाऊंगा? for i in range(start, stop, step) केवल पूर्णांक तर्क लेता है इसलिए फ्लोट काम नहीं करेगा।पायथन में लूप वृद्धि पर अधिक नियंत्रण कैसे प्राप्त करें?

+1

http://stackoverflow.com/questions/477486/python-decimal- श्रेणी-चरण-मूल्य –

उत्तर

16
for i in [float(j)/100 for j in range(0, 100, 1)]: 
    print i 
+2

+1 यह – eumiro

+0

चरणों की संख्या की गारंटी देता है ध्यान रखें कि अंतिम मुद्रित मूल्य यहां 0.9 9 है, और 1.0 नहीं, लेकिन यह केवल इसलिए है क्योंकि 'श्रेणी' द्वारा लौटाया गया अंतिम मूल्य 99 है और 100 नहीं। –

+1

यदि आप 0.00 चाहते हैं 1.00 समावेशी, फिर उपयोग करें: 'रेंज (0, 101, 1)'। – Santa

0

ठीक है, आप अपने लूप को 1 से 100 के चरण के साथ 0 से 100 तक जा सकते हैं जो आपको वही कदम देगा। फिर आप जो कुछ भी करने जा रहे थे उसके लिए मैं 100 से विभाजित कर सकता हूं।

+0

@ जेम्स हां, हम लूप के दौरान केवल अनंत बना सकते हैं, और लूप के अंदर काउंटर बनाए रख सकते हैं। हालांकि, मैं पाइथन सीखने की कोशिश कर रहा हूं और मुझे लगा कि यह जानना अच्छा होगा। – efficiencyIsBliss

+2

यहां एक मुद्दा यह है कि एक चर को 0.0 से प्रारंभ करना और 0.01 जोड़ना 100 बार करना आवश्यक रूप से बिल्कुल 1.0 में परिणाम नहीं होगा। तो ऐसा करने का "सही" तरीका इस बात पर निर्भर करता है कि मूल्यों का उपयोग कैसे किया जाता है। – garyjohn

+0

@ दक्षताIsBliss - आपको सीखने की पहली चीज़ यह है कि फ्लोट उतनी सटीक नहीं है जितनी आप उन्हें उम्मीद कर सकते हैं। की तरह। पाइथन दुभाषिया पर जाएं, 'ए = 0.4' टाइप करें, फिर एंटर करें, फिर 'ए' टाइप करें और दर्ज करें। – dotalchemy

1

एक विकल्प:

def drange(start, stop, step): 
    while start < stop: 
      yield start 
      start += step 

उपयोग:

for i in drange(0, 1, 0.01): 
    print i 
+0

-1: यदि समस्या को फ़्लोटिंग पॉइंट नंबर द्वारा बिल्कुल सही नहीं किया जा सकता है तो इसमें कोई समस्या हो सकती है। उदाहरण के लिए 'ड्रेंज (0,13,0.13) 'के लिए अंतिम तत्व 12.870000000000024 (** 100 ** तत्व) है, और' ड्रेंज (0,11,0.11)' के लिए अंतिम तत्व 10.9 99 99 99 99 99 99 5 (** 101 ** है) तत्व)। – eumiro

+0

यहां तक ​​कि सरल: 'सूची (ड्रेंज (0,10,1)) ऐसा लगता है कि यह' रेंज 'की तरह व्यवहार करता है: '0, 1, 2, 3, 4, 5, 6, 7, 8, 9]' लेकिन ' सूची (ड्रेंज (0,1,0.1)) 'एक अतिरिक्त तत्व देता है: '[0, 0.1, 0.2, 0.30000000000000004, 0.4, 0.5, 0.6, 0.7, 0.7 99 99 99 99 99 99 999, 0.8 99 99 99 99 99 99 999, 0.9 99 99 99 99 99 99 999]'। – Duncan

4

बचें इस दृष्टिकोण के साथ चल बिन्दु त्रुटियों समझौता। चरणों की संख्या अपेक्षित है, जबकि मूल्य प्रत्येक चरण के लिए गणना की जाती है।

def drange2(start, stop, step): 
    numelements = int((stop-start)/float(step)) 
    for i in range(numelements+1): 
      yield start + i*step 
Usage: 

for i in drange2(0, 1, 0.01): 
    print i 
-1

अपने कोड

for i in range(0,100,0.01): 

बजाय अगर आप बहुत ज्यादा नाव को लेकर चिंतित हैं नाव

for i in range(0,10000,1): 

का उपयोग करने का एक बहुत ही सरल तरीके से प्राप्त किया जा सकता है तो आप https://stackoverflow.com/a/4935466/2225357 साथ जा सकते हैं

+0

उसके बाद, लूप के लिए 'dec = float (i)/100' का उपयोग करें, यदि आप अभी भी दशमलव मान चाहते हैं –

0

आप सूची समझ का उपयोग कर सकते हैं:

print([i for i in [float(j)/100 for j in range(0, 100, 1)]]) 

आप मुद्रण पर नियंत्रण चाहते हैं अगर मैं तो जैसे कुछ कार्य करें:

print(['something {} something'.format(i) for i in [float(j)/100 for j in range(0, 100, 1)]]) 

या

list(i for i in [float(j)/100 for j in range(0, 100, 1)]) 
संबंधित मुद्दे