Python Language
रैंडम मॉड्यूल
खोज…
वाक्य - विन्यास
- random.seed (a = कोई नहीं, संस्करण = 2) (संस्करण केवल अजगर 3.x के लिए उपलब्ध है)
- random.getstate ()
- random.setstate (राज्य)
- random.randint (ए, बी)
- random.randrange (बंद)
- random.randrange (प्रारंभ, रोक, चरण = 1)
- random.choice (सेक)
- random.shuffle (x, random = random.random)
- random.sample (जनसंख्या, k)
यादृच्छिक और अनुक्रम: फेरबदल, पसंद और नमूना
import random
शफ़ल ()
आप एक उत्परिवर्तनीय और अनुक्रमिक अनुक्रम में आइटम को मिक्स / यादृच्छिक करने के लिए random.shuffle()
का उपयोग कर सकते हैं। उदाहरण के लिए एक list
:
laughs = ["Hi", "Ho", "He"]
random.shuffle(laughs) # Shuffles in-place! Don't do: laughs = random.shuffle(laughs)
print(laughs)
# Out: ["He", "Hi", "Ho"] # Output may vary!
विकल्प ()
एक मध्यस्थ अनुक्रम से एक यादृच्छिक तत्व लेता है:
print(random.choice(laughs))
# Out: He # Output may vary!
नमूना ()
पसंद की choice
यह एक मध्यस्थ अनुक्रम से यादृच्छिक तत्व लेता है लेकिन आप यह निर्दिष्ट कर सकते हैं कि कितने:
# |--sequence--|--number--|
print(random.sample( laughs , 1 )) # Take one element
# Out: ['Ho'] # Output may vary!
यह एक ही तत्व को दो बार नहीं लेगा:
print(random.sample(laughs, 3)) # Take 3 random element from the sequence.
# Out: ['Ho', 'He', 'Hi'] # Output may vary!
print(random.sample(laughs, 4)) # Take 4 random element from the 3-item sequence.
ValueError: जनसंख्या से बड़ा नमूना
यादृच्छिक पूर्णांक और फ़्लोट्स बनाना: रैंडिंट, रैंड्रेंज, यादृच्छिक और समान
import random
randint ()
x
और y
(सम्मिलित) के बीच एक यादृच्छिक पूर्णांक देता है:
random.randint(x, y)
उदाहरण के लिए 1
और 8
बीच एक यादृच्छिक संख्या प्राप्त करना:
random.randint(1, 8) # Out: 8
randrange ()
random.randrange
में समान सिंटैक्स होता है range
और random.randint
विपरीत, अंतिम मान समावेशी नहीं होता है:
random.randrange(100) # Random integer between 0 and 99
random.randrange(20, 50) # Random integer between 20 and 49
random.rangrange(10, 20, 3) # Random integer between 10 and 19 with step 3 (10, 13, 16 and 19)
बिना सोचे समझे
0 और 1 के बीच एक यादृच्छिक फ्लोटिंग पॉइंट संख्या देता है:
random.random() # Out: 0.66486093215306317
वर्दी
x
और y
(सम्मिलित) के बीच एक यादृच्छिक फ्लोटिंग पॉइंट संख्या लौटाता है:
random.uniform(1, 8) # Out: 3.726062641730108
यादृच्छिक संख्या: प्रजनन और राज्य
एक विशिष्ट बीज सेट करने से एक निश्चित यादृच्छिक-संख्या श्रृंखला बन जाएगी:
random.seed(5) # Create a fixed state
print(random.randrange(0, 10)) # Get a random integer between 0 and 9
# Out: 9
print(random.randrange(0, 10))
# Out: 4
बीज को रीसेट करने से एक ही "यादृच्छिक" अनुक्रम फिर से बन जाएगा:
random.seed(5) # Reset the random module to the same fixed state.
print(random.randrange(0, 10))
# Out: 9
print(random.randrange(0, 10))
# Out: 4
चूंकि बीज तय हो गया है इसलिए ये परिणाम हमेशा 9
और 4
। यदि विशिष्ट संख्याओं की आवश्यकता ही नहीं है, तो वे मान समान होंगे जो पिछली स्थिति को ठीक करने के लिए केवल getstate
और setstate
का उपयोग कर सकते हैं:
save_state = random.getstate() # Get the current state
print(random.randrange(0, 10))
# Out: 5
print(random.randrange(0, 10))
# Out: 8
random.setstate(save_state) # Reset to saved state
print(random.randrange(0, 10))
# Out: 5
print(random.randrange(0, 10))
# Out: 8
अनुक्रम को फिर से क्रमबद्ध करने के लिए आप फिर से None
साथ seed
None
:
random.seed(None)
या बिना तर्क के seed
विधि को कॉल करें:
random.seed()
क्रिप्टोग्राफिक रूप से सुरक्षित यादृच्छिक संख्या बनाएं
डिफ़ॉल्ट रूप से पायथन रैंडम मॉड्यूल यादृच्छिक संख्या उत्पन्न करने के लिए PRNG
ट्विस्टर PRNG
का उपयोग करता है, जो कि सिमुलेशन जैसे डोमेन में उपयुक्त है, अधिक मांग वाले वातावरण में सुरक्षा आवश्यकताओं को पूरा करने में विफल रहता है।
क्रिप्टोग्राफिक रूप से सुरक्षित छद्म SystemRandom
संख्या बनाने के लिए, एक SystemRandom
उपयोग कर सकता है, जो os.urandom
का उपयोग os.urandom
, एक क्रिप्टोग्राफिक रूप से सुरक्षित छद्म आयामी संख्या जनरेटर, CPRNG के रूप में कार्य करने में सक्षम है।
इसका उपयोग करने का सबसे आसान तरीका बस SystemRandom
क्लास को इनिशियलाइज़ करना है। प्रदान किए गए तरीके यादृच्छिक मॉड्यूल द्वारा निर्यात किए गए समान हैं।
from random import SystemRandom
secure_rand_gen = SystemRandom()
[0, 20]
रेंज में १० int
एस का एक यादृच्छिक क्रम बनाने के लिए, कोई बस randrange()
कह सकता है:
print([secure_rand_gen.randrange(10) for i in range(10)])
# [9, 6, 9, 2, 2, 3, 8, 0, 9, 9]
किसी श्रेणी में एक यादृच्छिक पूर्णांक बनाने के लिए, एक randint
उपयोग कर सकता है:
print(secure_rand_gen.randint(0, 20))
# 5
और, अन्य सभी तरीकों के अनुसार। इंटरफ़ेस बिल्कुल समान है, केवल परिवर्तन अंतर्निहित संख्या जनरेटर है।
आप क्रिप्टोग्राफिक रूप से सुरक्षित यादृच्छिक बाइट प्राप्त करने के लिए सीधे os.urandom
उपयोग कर सकते हैं।
एक यादृच्छिक उपयोगकर्ता पासवर्ड बनाना
एक यादृच्छिक उपयोगकर्ता पासवर्ड बनाने के लिए हम string
मॉड्यूल में दिए गए प्रतीकों का उपयोग कर सकते हैं। punctuation
लिए विशेष रूप से punctuation
चिह्न, ascii_letters
लिए ascii_letters
और digits
लिए अंक:
from string import punctuation, ascii_letters, digits
हम तो एक नाम नामित में इन सभी प्रतीकों को जोड़ सकते हैं symbols
:
symbols = ascii_letters + digits + punctuation
कम तत्वों के साथ प्रतीकों का एक पूल बनाने के लिए इनमें से किसी एक को निकालें।
इसके बाद, हम पासवर्ड बनाने के लिए random.SystemRandom
का उपयोग कर सकते हैं। 10 लंबाई के पासवर्ड के लिए:
secure_random = random.SystemRandom()
password = "".join(secure_random.choice(symbols) for i in range(10))
print(password) # '^@g;J?]M6e'
ध्यान दें कि random
मॉड्यूल द्वारा तुरंत उपलब्ध कराए गए अन्य रूटीन - जैसे कि random.choice
, random.randint
, आदि - क्रिप्टोग्राफ़िक उद्देश्यों के लिए अनुपयुक्त हैं।
पर्दे के पीछे, ये दिनचर्या Mersenne Twister PRNG का उपयोग करती है, जो CSPRNG की आवश्यकताओं को पूरा नहीं करती है । इस प्रकार, विशेष रूप से, आपको उन पासवर्डों को उत्पन्न करने के लिए उपयोग नहीं करना चाहिए जिन्हें आप उपयोग करने की योजना बनाते हैं। हमेशा ऊपर दिखाए गए अनुसार SystemRandom
की एक आवृत्ति का उपयोग करें।
पायथन 3.6 से शुरू होकर, secrets
मॉड्यूल उपलब्ध है, जो क्रिप्टोग्राफिक रूप से सुरक्षित कार्यक्षमता को उजागर करता है।
आधिकारिक दस्तावेज का हवाला देते हुए, "कम से कम एक लोअरकेस चरित्र के साथ एक दस-वर्ण अल्फ़ान्यूमेरिक पासवर्ड, कम से कम एक अपरकेस वर्ण, और कम से कम तीन अंक," आप कर सकते हैं: उत्पन्न करने के लिए।
import string
alphabet = string.ascii_letters + string.digits
while True:
password = ''.join(choice(alphabet) for i in range(10))
if (any(c.islower() for c in password)
and any(c.isupper() for c in password)
and sum(c.isdigit() for c in password) >= 3):
break
रैंडम बाइनरी निर्णय
import random
probability = 0.3
if random.random() < probability:
print("Decision with probability 0.3")
else:
print("Decision with probability 0.7")