2012-06-17 11 views
12

पायथन में, कुछ निश्चित बीज का उपयोग करके कुछ यादृच्छिक संख्या उत्पन्न करने का सबसे अच्छा तरीका क्या है लेकिन वैश्विक स्थिति का शोध किए बिना? जावा, आप बस लिख सकते हैं:यादृच्छिक बीज अस्थायी रूप से सेट करें, जैसे "नया रैंडम()"

Random r = new Random(seed); 
r.nextDouble(); 

और मानक Math.random() प्रभावित नहीं किया जाएगा। पायथन में, सबसे अच्छा समाधान जो मैं देख सकता हूं वह है:

old_state = random.getstate() 
random.seed(seed) 
random.random() 
random.setstate(old_state) 

क्या यह बेवकूफ पायथन है? यह जावा समाधान की तुलना में बहुत कम साफ लगता है जिसे पुराने बीज को "बहाल करने" की आवश्यकता नहीं होती है। मुझे यह जानना अच्छा लगेगा कि ऐसा करने का एक बेहतर तरीका है या नहीं।

उत्तर

22

आप अपने Random ऑब्जेक्ट को तुरंत चालू कर सकते हैं।

myrandom = random.Random(myseed) 

random मॉड्यूल Random का अपना ही उदाहरण है, जो myrandom में किए गए परिवर्तनों से अप्रभावित रहेंगे प्रबंधन करता है।

+0

ओह, किसी भी तरह से मैंने [यादृच्छिक दस्तावेज़] (http://docs.python.org/library/random.html) पर इस टिप्पणी को याद किया: "आप जेनरेटर प्राप्त करने के लिए रैंडम के अपने उदाहरणों को तुरंत चालू कर सकते हैं जो नहीं राज्य साझा करें। " धन्यवाद! –

+2

@ बेन अलर्ट, हाँ, मैंने भी किया जब मैं उन्हें दोबारा जांचने गया। लेकिन मुझे पता था कि मैंने 'रैंडम' को 'डीआईआर (यादृच्छिक)' में पहले देखा था, और जब मैंने देखा तो स्रोत में था। सुनिश्चित नहीं है कि 'रैंडम' कक्षा में दस्तावेज़ों में स्वयं की सूची क्यों नहीं है। – senderle

+0

यह हमेशा मेरे लिए आश्चर्यजनक होता है जब किसी को दस्तावेज में क्या है ... [http://stackoverflow.com/a/3909907/355230) सहित इंगित करने के लिए बहुत सारे वोट प्राप्त होते हैं। उन प्रश्नों के लिए जो उत्तर देकर उत्तर दे सकते थे ... – martineau

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