2012-01-25 11 views
9

मुझे random.randrange टाइप करने के लिए उपयोग किया जाता है। अब से त्रुटि को देखने के लिए मैं from random import Random करूँगा।पाइथन यादृच्छिक कैसे करता है। यादृच्छिक.सेड काम?

उत्पादन प्रक्रिया से जुड़े एक खेल के लिए (नहीं, नहीं एक Minecraft क्लोन: पी) मैं कई अलग छद्म यादृच्छिक संख्या जनरेटर रखने के लिए करना चाहते हैं:

  • दुनिया की पीढ़ी के लिए एक (परिदृश्य, quests, आदि),
  • एक यादृच्छिक घटनाओं के लिए जो दुनिया में हो सकता है (जैसे लड़ाई के दौरान नुकसान)।

तर्क यह है कि मैं पहले पुन: उत्पन्न करने में सक्षम होना चाहता हूं, इसलिए मैं दूसरे को हस्तक्षेप नहीं करना चाहता हूं।

मैंने सोचा कि random.Random इसके लिए बनाया गया था। हालांकि कुछ मुझे परेशान कर रहा है:

import random 
rnd = random.Random() 
rnd.seed(0) 
print [random.randrange(5) for i in range(10)] 
rnd.seed(0) 
print [random.randrange(5) for i in range(10)] 

दो अलग-अलग अनुक्रम उत्पन्न करता है। जब मैं rnd = random करता हूं तो चीजें अपेक्षित काम करती हैं, लेकिन मुझे कई जनरेटर की आवश्यकता होती है।

मुझे क्या याद आ रही है?

+1

वास्तव में मुझे यह देखने के लिए कुछ मिनट लग गए। हम सभी को बुरा महसूस न करें, खुशी है कि यह हल हो गया है :) –

उत्तर

13

यह लगभग ठीक करने की कोशिश की लेकिन rnd.seed() rnd वस्तु

पर लागू होता है बस

rnd = random.Random(0) # <<-- or set it here 
rnd.seed(7) 
print [rnd.randrange(5) for i in range(10)] 

या का उपयोग इस तरह वैश्विक बीज की स्थापना, द्वारा के रूप में काम करता है:

random.seed(7) 
print [random.randrange(5) for i in range(10)] 
4

Random के निर्माता को बीज पास करें:

>>> import random 
>>> rnd = random.Random(0) 
>>> [rnd.randint(0, 10) for i in range(10)] 
[9, 8, 4, 2, 5, 4, 8, 3, 5, 6] 
>>> rnd = random.Random(0) 
>>> [rnd.randint(0, 10) for i in range(10)] 
[9, 8, 4, 2, 5, 4, 8, 3, 5, 6] 
>>> rnd = random.Random(1) 
>>> [rnd.randint(0, 10) for i in range(10)] 
[1, 9, 8, 2, 5, 4, 7, 8, 1, 0] 
संबंधित मुद्दे