मैं एक फ़ंक्शन को कार्यान्वित करना चाहता हूं जहां x और x * 1.1 के बीच randint() के साथ एक मान वृद्धिशील रूप से बढ़ाया जाता है लेकिन जब मैं पर्याप्त बार उपयोग किया जाता हूं तो मैं सीमा को कैप करना चाहता हूं।

क्या रैंडिंट() के गुणों के साथ 'और' जैसे कुछ को जोड़ना संभव है। मैंने थोड़ी देर के लिए बेवकूफ बनाया है लेकिन कुछ ऐसा नहीं आया है जो काम करता है। शायद मुझे कुछ स्पष्ट याद आ रहा है: वाक्यविन्यास।

जैसे new_val = randint(old_val, (old_val * 1.1) और !> max_val)

0
user3479026 27 फरवरी 2017, 19:02
आप if कथन का उपयोग क्यों नहीं कर सकते?
 – 
Taku
27 फरवरी 2017, 19:05
क्या यह for लूप में है? किस मामले में, आप हर बार मान को 1.1 से गुणा क्यों नहीं कर सकते लेकिन randint(int(old_val), int(old_val*1.1)) पर कॉल कर सकते हैं?
 – 
roganjosh
27 फरवरी 2017, 19:07
यह मदद कर सकता है: stackoverflow.com /प्रश्न/1301735/…
 – 
Jacquot
27 फरवरी 2017, 19:22

3 जवाब

यह जनरेटर का उपयोग करने के लिए एक अच्छी जगह की तरह लगता है:

def capped_geometric_series(x, max_val, growth_factor=1.1):
    while True:
        x = randint(x, int(x * growth_factor))
        if x < max_val:
            yield x
        else:
            break

फिर

for x in capped_geometric_series(30, 100):
    print(x)

कुछ ऐसा देता है

33
36
38
40
42
46
48    # Note: this allows the same value to be returned
48    #   multiple times; in fact, if x is too small
48    #   (ie if x * growth_factor < x + 1)
52    #   it will return x an infinite number of times.
56
59
64
67
67
68
69
73
80
82
84
84
86
91
98
98
0
Hugh Bothwell 27 फरवरी 2017, 19:21

अंत में मैं एक उपन्यास समाधान खोजने में कामयाब रहा। मैं फ़ंक्शन को पुनरावर्ती रूप से कॉल करने के लिए लचीलापन चाहता था इसलिए मैंने जनरेटर के बजाय min() का उपयोग किया।

def function(val):
    max_val = 100
    old_val = (min(value,(int(max_aero * 0.9))
    new_val = random.randint(old_val, min(int(val* 1.1), max_val))

मैं जितना चाहूं पढ़ना मुश्किल है, लेकिन लगता है कि यह काम कर रहा है!

0
user3479026user3479026 1 मार्च 2017, 20:39

'मिनट' का प्रयोग करें? ..

new_val = randint(min(old_val,max_val),int(min(old_val*1.1,max_val)))

या यदि आप यही चाहते हैं ..

new_val = randint(old_val,int(old_val*1.1)) if old_val<max_val else None
-1
Abhishek Jebaraj 27 फरवरी 2017, 19:12
1
random.randint(old_val,old_val*1.1) एक ValueError है। आप randint को float तर्क के साथ कॉल नहीं कर सकते।
 – 
roganjosh
27 फरवरी 2017, 19:12