पायथन में 0 से 9 तक यादृच्छिक अंक उत्पन्न करने के दो स्पष्ट तरीके हैं। एक 0 और 1 के बीच एक यादृच्छिक फ्लोटिंग पॉइंट नंबर उत्पन्न कर सकता है, 10 से गुणा कर सकता है और नीचे कर सकता है। वैकल्पिक रूप से, कोई भी random.randint
विधि का उपयोग कर सकता है ।
import random
def random_digit_1():
return int(10 * random.random())
def random_digit_2():
return random.randint(0, 9)
मैं उत्सुक था कि यदि कोई 0 और 1 के बीच एक यादृच्छिक संख्या उत्पन्न करता है, तो अंतिम अंक क्या होगा। मुझे उम्मीद नहीं थी कि वितरण समान होगा, लेकिन मुझे इसका परिणाम काफी आश्चर्यजनक लगा।
from random import random, seed
from collections import Counter
seed(0)
counts = Counter(int(str(random())[-1]) for _ in range(1_000_000))
print(counts)
आउटपुट:
Counter({1: 84206,
5: 130245,
3: 119433,
6: 129835,
8: 101488,
2: 100861,
9: 84796,
4: 129088,
7: 120048})
एक हिस्टोग्राम नीचे दिखाया गया है। ध्यान दें कि 0 दिखाई नहीं देता है, क्योंकि अनुगामी शून्य को काट दिया जाता है। लेकिन क्या कोई समझा सकता है कि अंक 4, 5, और 6 बाकी की तुलना में अधिक सामान्य क्यों हैं? मैंने पायथन 3.6.10 का उपयोग किया, लेकिन परिणाम पायथन 3.8.0a4 में समान थे।
str
इसे बेस -10 में परिवर्तित करता है जो समस्याओं का कारण है। उदाहरण के लिए 1-बिट फ्लोट मंटिसा b0 -> 1.0
और b1 -> 1.5
। "पिछले अंक" हमेशा हो जाएगा 0
या 5
।
random.randrange(10)
और भी स्पष्ट है, IMHO। random.randint
(जो random.randrange
हुड के तहत कॉल करता है) बाद में random
उन लोगों के लिए मॉड्यूल के अलावा था, जो यह नहीं समझते कि पायथन में रेंज कैसे काम करते हैं। ;)
randrange
होने के बाद उन्होंने वास्तव में दूसरा फैसला किया randint
।