2017-06-12 8 views
6

के बिना एन यादृच्छिक संख्या कैसे उत्पन्न कर सकता हूं मैं 0-9 के बीच 4 यादृच्छिक पूर्णांक उत्पन्न करने की कोशिश कर रहा हूं। मैं आसानी से का उपयोग कर एक के लिए लूप इस प्राप्त कर सकते हैं: सीधे एक के लिए लूप का उपयोग किए बिनामैं लूप

digits = [random.randrange(10) for i in range(4)] 

मान लिया जाये कि यह संभव है, मैं अन्य तरीकों से समान ही परिणाम के बारे में सोच रहा था, शायद। मैं itertools के साथ प्रयोग किया गया था और इस काम नहीं किया:

digits = itertools.repeat(random.randrange(10), 4) 

मेरे सवाल का मुख्य उद्देश्य अपने आप को अतिरिक्त तरीकों को बेनकाब करने के लिए है। धन्यवाद।

+1

अजगर 3.6 में - वहाँ भी है 'random.choices' –

उत्तर

9
numpy.random.randint(0, 10, size=4) 

या itertools

list(map(random.randrange, itertools.repeat(10, 4))) 

या यहाँ तक कि

list(map(random.randrange, [10]*4)) 
+0

आप 'itertools' की आवश्यकता नहीं है: 'सूची (मानचित्र (random.randrange, [10] * 4)) ' – Leon

0

उपयोग करने के लिए यह वास्तव में कुछ है कि मैं क्या करना होगा नहीं है, लेकिन आप तो, अतिरिक्त तरीकों को अपने आप को बेनकाब करने के लिए चाहते हैं के बाद से 0-9 रेंज का लाभ लेते हुए आप निम्नानुसार 4 ऐसे पूर्णांक प्राप्त कर सकते हैं:

map(int, "%04d"%random.randrange(10**4)) 

यह वास्तव में एक चार अंकों की स्ट्रिंग उत्पन्न करता है, और इससे अंकों को निकालता है।

+0

निश्चित रूप से अपरंपरागत, लेकिन दिलचस्प दृष्टिकोण! – maze88

1

जनरेटर और while loop का उपयोग करने के बारे में क्या?

from random import randrange 

def rand(val, repeat=4): 
    j = 1 
    while j <= repeat: 
     yield randrange(val) 
     j += 1 

final = list(rand(10)) 

आउटपुट:

[2, 6, 8, 8] 

इसके अलावा, एक recursion का उपयोग कर:

from random import randrange 

def rand(val, repeat=4, b=1, temp=[]): 
    if b < repeat: 
     temp.append(randrange(val)) 
     return rand(val, b= b+1, temp=temp) 
    else: 
     return temp + [randrange(val)] 

final = rand(10) 
print(final) 

आउटपुट:

[1, 9, 3, 1]