जवाबों:
एक यादृच्छिक 3-अंकीय संख्या प्राप्त करने के लिए:
from random import randint
randint(100, 999) # randint is inclusive at both ends
(यह मानकर कि आपके पास "तीन अंकों तक" के बजाय वास्तव में तीन अंक हैं।)
अंकों की एक मनमानी संख्या का उपयोग करने के लिए:
from random import randint
def random_with_N_digits(n):
range_start = 10**(n-1)
range_end = (10**n)-1
return randint(range_start, range_end)
print random_with_N_digits(2)
print random_with_N_digits(3)
print random_with_N_digits(4)
आउटपुट:
33
124
5127
यदि आपको 3 अंकों की संख्या चाहिए और 001-099 मान्य नंबर चाहिए, तो आपको अभी भी रैंडरेंज / रैंडिंट का उपयोग करना चाहिए क्योंकि यह विकल्पों की तुलना में तेज है। स्ट्रिंग में कनवर्ट करते समय बस नेक्सेसरी पूर्ववर्ती शून्य जोड़ें।
import random
num = random.randrange(1, 10**3)
# using format
num_with_zeros = '{:03}'.format(num)
# using string's zfill
num_with_zeros = str(num).zfill(3)
वैकल्पिक रूप से यदि आप यादृच्छिक संख्या को एक इंट के रूप में सहेजना नहीं चाहते हैं, तो आप इसे एक ऑनलाइनर के रूप में कर सकते हैं:
'{:03}'.format(random.randrange(1, 10**3))
अजगर 3.6+ केवल ऑनलाइनर:
f'{random.randrange(1, 10**3):03}'
ऊपर के उदाहरण आउटपुट हैं:
एक समारोह के रूप में लागू:
import random
def n_len_rand(len_, floor=1):
top = 10**len_
if floor > top:
raise ValueError(f"Floor {floor} must be less than requested top {top}")
return f'{random.randrange(floor, top):0{len_}}'
क्या 0 पहले संभावित अंक के रूप में गिना जाता है? यदि हां, तो आपको जरूरत है random.randint(0,10**n-1)
। हैं, तो नहीं random.randint(10**(n-1),10**n-1)
। और यदि शून्य की अनुमति कभी नहीं है , तो आपको स्पष्ट रूप से उन में शून्य के साथ संख्याओं को अस्वीकार करना होगा, या n
random.randint(1,9)
संख्याओं को आकर्षित करना होगा ।
एक तरफ: यह दिलचस्प है कि randint(a,b)
यादृच्छिक संख्या प्राप्त करने के लिए कुछ गैर-पाइथोनिक "इंडेक्सिंग" का उपयोग करता है a <= n <= b
। किसी ने उम्मीद की होगी कि वह काम करेगा range
, और एक यादृच्छिक संख्या का उत्पादन करेगा a <= n < b
। (बंद ऊपरी अंतराल पर ध्यान दें।)
के बारे में टिप्पणियों में प्रतिक्रियाओं को देखते हुए randrange
, ध्यान दें कि इन्हें क्लीनर से बदला जा सकता है random.randrange(0,10**n)
, random.randrange(10**(n-1),10**n)
और random.randrange(1,10)
।
a <= n <= b
मुझे भी हैरान कर दिया। मैं -1
अपने कोड में उस अतिरिक्त को रखने से नाराज था । :-)
randint
वास्तव में सिर्फ कॉल के लिए (यह Lib / random.py में है) पायथन कोड randrange(a, b+1)
!
आप अपने आप को थोड़ा सा कार्य करने के लिए लिख सकते हैं जो आप चाहते हैं:
import random
def randomDigits(digits):
lower = 10**(digits-1)
upper = 10**digits - 1
return random.randint(lower, upper)
मूल रूप से, 10**(digits-1)
आपको सबसे छोटा {अंक} -digit नंबर 10**digits - 1
देता है , और आपको सबसे बड़ा {अंक} -digit नंबर देता है (जो सबसे छोटा {अंक + 1} -digit संख्या शून्य से 1 होता है!)। फिर हम उस सीमा से एक यादृच्छिक पूर्णांक लेते हैं।
मुझे वास्तव में रिचीहिंडल का जवाब पसंद आया, हालांकि मुझे अभ्यास के रूप में सवाल पसंद आया। यहाँ स्ट्रिंग्स का उपयोग कर एक क्रूर बल कार्यान्वयन है :)
import random
first = random.randint(1,9)
first = str(first)
n = 5
nrs = [str(random.randrange(10)) for i in range(n-1)]
for i in range(len(nrs)) :
first += str(nrs[i])
print str(first)
से आधिकारिक दस्तावेज है, ऐसा नहीं प्रतीत होता है नमूना () विधि इस उद्देश्य के लिए उचित है?
import random
def random_digits(n):
num = range(0, 10)
lst = random.sample(num, n)
print str(lst).strip('[]')
आउटपुट:
>>>random_digits(5)
2, 5, 1, 0, 4
आप एक फंक्शन बना सकते हैं, जो इंट की सूची का उपभोग करता है, स्ट्रिंग में कंसट्रेट में रूपांतरित करता है और कास्ट फिर से इंट करता है, कुछ इस तरह है:
import random
def generate_random_number(length):
return int(''.join([str(random.randint(0,10)) for _ in range(length)]))