زبان برنامهنویسی پایتون تعداد زیادی ماژول و کتابخانه برای کمک به حل سادهتر مسائل در اختیار برنامهنویسان گذاشته است. در میان انبوه ماژولها و کتابخانهها، ماژول Random در پایتون به عنوان ابزاری قدرتمند برای تولید اعداد تصادفی، اتخاذ تصمیمات بر مبنای شانس و پیادهسازی طیف وسعی از الگوریتمهای احتمالی خودنمایی میکند. فرقی نمیکند که در حال توسعه بازی، اجرای عملیات شبیهسازی یا اضافه کردن متغیرهای تصادفی به اپلیکیشن خودتان هستید. بههرحال ماژول random
جزئی ضروری از ابزار پایتونی برای تولید اپلیکیشن مورد نظرتان خواهد بود.
در این مطلب از مجله فرادرس، به بررسی دقیق و کامل ماژول Random در پایتون پرداختهایم. تواناییها و توابع این ماژول را بررسی خواهیم کرد و میبینیم که چگونه میتوان قدرت این کتابخانه را برای تعریف عملیات تصادفی در برنامههای خود به خدمت بگیریم. از تولید اعداد صحیح تصادفی گرفته تا بُر زدن محتویات لیستها و انتخاب عناصر تصادفی، این ماژول فیچرهای خیلی زیادی برای ارتقای کارایی پروژههای برنامهنویسی ارائه میدهد.
ماژول Random در پایتون چیست؟
ماژول Random برای استفاده در کدهای پایتونی، اعداد تصادفی تولید میکند. این اعداد «شبه تصادفی» (Pseudo-Random) هستند به این معنا که واقعا عدد تصادفی نیستند و بر حسب تصادف تولید نشدهاند. این ماژول برای اجرای فعالیتهای تصادفی مانند تولید اعداد تصادفی، مقداردهی مقادیر رندم به عناصر لیستها، تاپلها یا سایر ساختارهای ذخیره داده پیمایشپذیر بهکار گرفته میشود.
ماژول random
یکی از ماژولهای درونی پایتون است. یعنی برای استفاده از این ماژول نیاز به نصب هیچ پکیج خاصی نیست. این ماژول همزمان و در کنار فایلهای پایتون نصب میشود. فقط کافی است که به محیط کدنویسی خود وارد کرده و استفاده کنید. ماژول random
برای پیادهسازی الگوریتمهای تولید تصادفی دادهها نیز بسیار سودمند است. همچنین از این ماژول برای تولید اعداد صحیح از درون محدوده مشخص شده به صورت تصادفی نیز کمک گرفته میشود. به علاوه این ویژگی را هم در اختیار برنامهنویسها قرار میدهد که لیستی از عناصر تعریف کنند. سپس با کمک ابزار این ماژول از بین اعضای این لیست عنصری را به صورت تصادفی انتخاب کنند.
البته که باید به یاد داشته باشیم که این ماژول اعداد را به روش شبه تصادفی تولید میکند. در نتیجه اگر به صورت عمیق به مکانیزم عملکرد پشت پرده این ماژول بپردازیم خواهیم دید که اعداد تولید شده به معنای واقعی تصادفی نیستند. اما بههرحال دادههای تولید شده توسط ماژول Random در پایتون برای استفاده به عنوان داده تصادفی کارایی خوبی دارند. در این مطلب به بررسی توابع متفاوت ماژول random
همراه با مثال و توضیح لازم برای هر کدام پرداختهایم.
تثبیت الگوریتم کنترل تصادفی اعداد
با استفاده از تابع seed()
میتوانیم عملیات seed یا دانهگذاری انجام بدهیم. در واقع با این روش یکبار عددی تصادفی تولید میکنیم – بذر تولید عدد تصادفی را میکاریم – و همان روند را میتوانیم چندبار تکرار کنیم. یعنی یک عدد تصادفی تولید شده را میتوانیم بارها تولید کنیم. از این تابع به عنوان ابزاری برای تعریف نقطه شروع تولید اعداد به روش ثابت استفاده میشود. دفعه اول که این نقطه شروع به صورت تصادفی تثبیت شد، تمام مقادیری که بر اساس این نقطه شروع تعریف میشوند دارای ارزش و مقدار ثابتی خواهند بود.
در کد پایین مثالی از عملیات seed با استفاده از ماژول Random در پایتون را پیادهسازی کردهایم.
1import random
2
3# Seed the random number generator
4random.seed(2)
5
6# Generate 4 random numbers
7for i in range(4):
8 print(random.random())
9 random.seed(2)
خروجی حاصل از اجرای کد بالا به صورت زیر است.
0.9560342718892494 0.9560342718892494 0.9560342718892494 0.9560342718892494
تسلط به زبان برنامه نویسی پایتون با فرادرس
برای اینکه بتوانیم بهطور بهتری مسائل و کدهای پیادهسازی شده در این مطلب را درک کنیم باید حداقل آشنایی را با زبان برنامهنویسی پایتون داشته باشیم. بهترین شیوه آموزش در حال حاضر استفاده از فیلمهای آموزشی است. فیلمهای آموزشی که از منابع معتبر تهیه شوند، در ویدئوها و مطالب و فهرستبندی مطالب آموزشی، کیفیت تضمین شدهای را ارائه میدهند.
از آنجا که وبسایت آموزشی فرادرس فیلمهای آموزشی خوبی را برای اکثر رشتهها تهیه کرده و درباره آموزش زبان پایتون نیز فیلمهای آموزشی بسیار خوبی تهیه کرده است. بهخصوص، کسانی که به تازگی با زبان برنامهنویسی پایتون آشنا شدهاند، میتوانند از فیلم آموزشی رایگان پایتون در ۱۴۰ دقیقه استفاده کنند. دورههای زیر نیز چند نمونه از فیلمهای آموزشی هستند که اگر در سطح مبتدی هستید برای شما بسیار مفید خواهند بود.
برای افرادی که حرفهایتر هستند و میخواهند با مسائل پیشرفتهتری کار کنند میتوانیم از چند فیلم آموزشی دیگر مثال بزنیم.
در صورت تمایل به دیدن فهرست کامل فیلمهای آموزشی زبان برنامه نویسی پایتون میتوانید روی عکس بالا کلیک کرده و به صفحه مجموعه آموزش برنامهنویسی پایتون منتقل شوید.
فهرستی از همه توابع ماژول Random در پایتون
توابع متفاوت و زیادی در ماژول random
برای تولید دادههای تصادفی وجود دارند. در این بخش از مطلب، همه توابع موجود در ماژول random
را همراه با توضیح مختصری برای هر کدام، در جدول زیر گردآوری کردهایم.
نام تابع | توضیحات |
seed() | مولد اعداد تصادفی را مقداردهی اولیه میکند. |
getstate() | شیء را برمیگرداند که نمایانگر وضعیت داخلی مولد اعداد تصادفی است. |
setstate() | بازگرداندن وضعیت مولد اعداد تصادفی به وضعیت از پیش تعیین شده |
getrandbits() | عدد صحیحی با تعداد محدودی بیت تولید میکند. |
randrange() | انتخاب عددی از درون یک محدوده مشخص به صورت تصادفی |
randint() | انتخاب عدد صحیحی از درون یک محدوده مشخص به صورت تصادفی |
choice() | انتخاب عنصری به صورت تصادفی از درون لیست، تاپل یا رشته |
choices() | انتخاب چند عنصر به صورت تصادفی از درون لیست، تاپل یا رشته |
sample() | انتخاب لیستی از عناصر به صورت تصادفی از درون دنباله داده شده |
random() | عدد اعشار تصادفی تولید میکند. |
uniform() | تولید عدد اعشار تصادفی، از بین محدوده مشخص |
triangular() | تولید عدد اعشار تصادفی از بین محدوده مشخص |
betavariate() | تولید عدد اعشار تصادفی با توزیع بتا. مقدار جواب بین ۰ و ۱ است. |
expovariate() | عدد اعشار تصادفی با توزیع نمایی تولید میکند. |
gammavariate() | عدد اعشار تصادفی با توزیع گاما تولید میکند. |
gauss() | عدد اعشار تصادفی با توزیع گاوسی تولید میکند. |
lognormvariate() | عدد اعشار تصادفی با توزیع نرمال لگاریتمی تولید میکند. |
normalvariate() | عدد اعشار تصادفی با توزیع نرمال تولید میکند. |
vonmisesvariate() | عدد اعشار تصادفی با توزیع von Mises یا نرمال دایرهای تولید میکند. |
paretovariate() | عدد اعشار تصادفی با توزیع Pareto تولید میکند. |
weibullvariate() | عدد اعشار تصادفی با توزیع Weibull تولید میکند. |
تولید اعداد تصادفی
برای شروع، تا اینجای مطلب درباره ماژول Random در پایتون اطلاعات خوبی بدست آوردهایم. در این قسمت توابع مختلف در ماژول random
را برای تولید انواع اعداد تصادفی بررسی کردهایم. با استفاده از کتابخانه Random بسته به نیاز برنامه، میتوان به روشهای متفاوتی عدد تصادفی تولید کرد.
مقدار اعشار بین ۰ و ۱
در کد نمایش داده شده پایین با استفاده از تابع random()
اعداد اعشار تصادفی بین 0.0
و 1.0
تولید میکنیم. این کد تضمین میکند که اعداد تولید شده حتما بزرگتر یا مساوری 0.0
و کوچکتر یا مساوی 1.0
هستند.
1import random
2
3# Generating random float
4print(random.random())
خروجی کد بالا به صورت زیر است اما این عدد قطعی نیست. یعنی در صورت آزمایش این کد در کامپیوتر شما مقدار جواب، حتما بین 0.0
و 1.0
خواهد بود اما به احتمال زیاد، با عدد نمایش داده شده پایین تفاوت خواهد کرد.
0.23671507374354974
عدد صحیح در محدوده دلخواه کاربر
اگر بخواهیم که عدد صحیحی را در محدوده خواصی تولید کنیم، از تابع randint()
استفاده میکنیم.
این تابع گزینه ایدهئالی است که دو پارامتر مجزا دریافت میکند. فرض کنیم پارامترهای a
و b
را به این تابع ارسال کردیم. این پارامترها باید عدد صحیح باشند. همچنین پارامتر اول کوچکتر از پارامتر دوم باشد. تابع randint()
عدد صحیحی بین پارامترهای دریافت شده تولید میکند. البته خود پارامترهای دریافت شده نیز در محدوده جستوجو برای اعداد تصادفی صحیح قرار دارند.
1import random
2
3#Generating Random integer
4print(random.randint(1, 10))
خروجی کد بالا برابر مقدار زیر است. توجه کنید که همانند مثال قبل این عدد تصادفی است.
4
عدد اعشار در محدوده دلخواه کاربر
این عملیات را نیز مشابه تولید عدد صحیح تصادفی، بین دو مقدار داده شده انجام میدهیم. فرض کنیم پارامترهای a
و b
را به عنوان محدوده در نظر گرفتهایم. برای تولید عدد اعشار تصادفی در محدوده مورد نظر از تابع uniform()
استفاده میکنیم. کدی که در ادامه آمده کارکردی شبیه به کد بالا دارد.
1import random
2
3#Generating Random float
4print(random.uniform(1, 10))
خروجی کد بالا برابر مقدار زیر است. توجه کنید که همانند مثالهای قبل این عدد نیز تصادفی است.
7.581086804968139
کار با دنباله ها
کاربرد ماژول Random در پایتون، فقط محدود به مقادیر مجزا مانند دادههای «Integer» یا «Float» نیست. از ابزار موجود در این تابع بر روی دنبالهها نیز میتوان استفاده کرد.
برداشت تصادفی K عنصر از لیست به صورت غیر تکراری
در این مورد، ساختار ذخیره دادهای از نوع لیست در پایتون داریم. میخواهیم K عنصر از این لیست را انتخاب کنیم. به این صورت که همه عناصر انتخاب شده باید تصادفی و غیر تکراری باشند. برای انجام این عملیات میتوانیم از تابع sample(l,k)
استفاده کنیم. در این تابع پارامتر l
نام همان لیستی است که باید از محتواتش انتخاب کنیم و پارامتر k
تعداد عناصر مورد نیاز را نشان میدهد.
1import random
2items = [ 2, 3, 4, 5, 37, 8, 9, 10]
3print(random.sample(items, 3))
خروجی کد بالا برابر با مقدار تصادفی زیر است.
[37, 9, 5]
در صورت تمایل به بررسی تخصصیتر تولید اعداد تصادفی با پایتون میتوانید مطلب مربوط به تولید اعداد تصادفی در پایتون به زبان ساده از مجله فرادرس را مطالعه بفرمایید.
برداشت تصادفی K عنصر از لیست با امکان انتخاب عنصر تکراری
در چنین سناریویی، که دنبالهای وجود دارد و از این دنباله باید به صورت تصادفی K عنصر انتخاب شوند با این حالت که امکان انتخاب عنصر تکراری نیز وجود دارد، میتوان از تابع choice()
استفاده کرد. تابع choice()
گزینه جایگزین خوبی برای تابع sample()
است. با استفاده از تابع choice()
میتوان از درون دنبالهها بسته به تصادف، عناصر تکراری را نیز چندین بار، انتخاب کرد. این تابع هم مانند تابع sample()
دارای پارامترهای k
و l
است. در کد زیر با استفاده از این تابع k
عنصر از دنباله l
را به صورت تصادفی انتخاب میکنیم.
1import random
2
3items = [2, 3, 4, 25, 7, 38, 9]
4print(random.choices(items, k=3))
خروجی کد بالا برابر با مقدار تصادفی زیر است.
[2, 3, 3]
در تابع choice()
بر عکس تابع sample()
مقدار k
هیچ محدودیتی ندارد.
بُر زدن دنباله ها
برای اینکه بتوانیم عناصر درون لیستی را با نظم تصادفی بُر بزنیم از تابع shuffle()
استفاده میکنیم. این تابع به صورت اختصاصی برای اجرای این عملیات طراحی شده است.
1import random
2
3# Shuffling Sequences
4items = [11, 2, 3, 4, 5, 6, 7, 8, 9, 10]
5random.shuffle(items)
6print(items)
خروجی کد بالا با حالت چیدمان تصادفی عناصر لیست به صورت زیر است.
[5, 8, 6, 11, 3, 10, 9, 4, 7, 2]
تولید رشته های تصادفی
با استفاده از ماژول Random در پایتون، میتوانیم رشتههایی تصادفی با طول مشخص شده توسط کاربر، تولید کنیم.
کد پایین، رشتهای از ۱۰ کاراکتر در «مبنای شمارش ۱۶تایی» (Hexadecimal) ایجاد میکند. سپس، رشته ایجاد شده را به فرمت base64 منتقل و در این مبنا رمزنگاری میکند. در فرمت base64 از مجموعه متفاوتی از کاراکترها برای نمایش داده استفاده میشود. در نهایت، این رشته رمزنگاری شده را به عنوان خروجی تابع به بیرون برمیگرداند.
1import random
2
3# Generating Random Strings
4print(random.hex(10))
5print(random.b64encode(10))
خروجی کد بالا با حالت چیدمان تصادفی کاراکترهای رشته به صورت زیر است.
'8b7c11d1f2' b'Lp0RRmV7tg=='
پکیج اعداد تصادفی Numpy برای آرایه های چندبعدی
PRNG سرنامی از «مولد اعداد شبه تصادفی» (Pseudo-Random Number Generator) است. همانطور که میدانید با استفاده از ماژول Random در پایتون میتوانیم اعداد و دادههای تصادفی به صورت خطی تولید کنیم.
برای تولید کردن آرایههای چندبعدی از اعداد تصادفی، باید از کتابخانه تخصصی NumPy استفاده کنیم. کتابخانه NumPy پکیجی به شکل numpy.random
دارد. این پکیج، توابع گوناگونی برای تولید آرایههای N بُعدی با دادههای تصادفی در انواع مختلف توزیعها را ارائه میدهد.
تولید آرایه N بُعدی با اعداد اعشار تصادفی
برای تولید آرایه N بُعدی با اعداد اعشار تصادفی با استفاده از پکیج numpy.random
دو تکنیک عمده و اختصاصی وجود دارد که در ادامه فهرست کردهایم.
- از تابع random.rand(d0, d1, …, dn)
برای تولید آرایه N بُعدی از اعداد اعشار تصادفی در محدوده [0.0, 1.0)
استفاده میشود.
- از سینتکس تابع (که در زیر آورده شده)، برای تولید آرایه N بُعدی با اعداد اعشار تصادفی در محدوده [low, high)
استفاده میشود.
random.uniform(low=0.0, high=1.0, size=None)
برای هر کدام از تکنیکهای بالا در کد پیادهسازی شده پایین مثالی زدهایم.
1import numpy as np
2
3random_array = np.random.rand(2, 2)
4print("2x2 array for random numbers", random_array, "n")
5
6random_float_array = np.random.uniform(25.5, 99.5, size=(3, 2))
7print("3 X 2 array of random float numbers in range [25.5, 99.5]", random_float_array)
خروجی کد بالا به صورت زیر در کنسول پایتون نمایش داده میشود.
2x2 array for random numbers [[0.47248707 0.44770557] [0.33280813 0.64284777]] 3 X 2 array of random float numbers in range [25.5, 99.5] [[52.27782303 49.67787027] [28.33494049 37.99789879] [27.19170587 76.69219575]]
کتابخانه تخصصی Numpy برای اجرای عملیات حرفهای ریاضی بر روی دادهها و آرایههای بزرگ و چندبعدی تولید شده است. این کتابخانه یکی از ستونهای آمادهسازی دادههای برای Train و تولید انواع مدلهای هوش مصنوعی در پایتون است. در صورت تمایل داشتن به بررسی و کار با این کتابخانه بسیار جذاب، پیشنهاد میکنیم که فیلم آموزشی کار با کتابخانه NumPy برای محاسبات علمی در پایتون از وبسایت فرادرس که به رایگان انتشار یافته را مشاهده کنید.
تولید آرایه N بُعدی با اعداد صحیح تصادفی
برای تولید آرایه N بُعدی با اعداد صحیح تصادفی باید از سینتکس تابع استفاده کنیم که در زیر آورده شده است. در این تابع آرگومانهای high
و size
اختیاری هستند.
random.random_integers(low, high=None, size=None)
- low
: مقدار کمترین حد محدوده را نشان میدهد و باید از نوع عدد صحیح باشد. اما اگر پارامتر high
بر روی None
تنظیم شده باشد این مقدار به عنوان بیشترین حد محدوده در نظر گرفته میشود.
- high
: این مقدار باید از نوع عدد صحیح باشد و وجودش اختیاری است. این آرگومان مقدار بزرگترین عدد در محدوده را نمایش میدهد. اگر مقداردهی نشود، به صورت پیش فرض مقدار None
را میپذیرد.
- size
: مقدار این آگومان باید از نوع عدد صحیح یا تاپلی از اعداد صحیح باشد. وجود این آرگومان اختیاری است. آرگومان size
شکل نتیجه خروجی تابع را نمایش میدهید. برفرض مثال اگر size=(m, n, k)
باشد در نتیجه داده خروجی نمونههایی به شکل m * n * k
خواهند بود. بهطور پیشفرض None
است. با شکل پیش فرض این آرگومان، فقط یک عدد مجزا برگشت داده میشود.
1import numpy as np
2
3random_integer_array = np.random.random_integers(5, size=(3, 2))
4print("2-dimensional random integer array", random_integer_array)
خروجی کد بالا به صورت زیر در کنسول پایتون نمایش داده میشود. البته که اعداد نمایش داده شده به صورت تصادفی انتخاب شدهاند و با هربار اجرای کد ممکن است که تغییر کنند.
2-dimensional random integer array [[2 3] [3 4] [3 2]]
آموزش پروژه محور پایتون
در صورتی که مهارتهای پایتونی خود را تا حد قابل قبولی ارتقا دادهاید و تقریبا با بیشتر مفاهیم مربوط به زبان برنامهنویسی پایتون آشنا شدهاید، اکنون زمان آموختن تکنیکهای پیشرفتهتر و کاربردیتر است. زبان برنامهنویسی پایتون زبانی سطح بالا و همه کاره است. از تولید برنامههای شبکهای و اینترنتمحور گرفته تا طراحی مدلهای هوش مصنوعی، همهجا پایتون توانسته خود را اثبات کند و پروژههای قدرتمندی را به جهان صنعت ارائه دهد. در این بخش هم چند نمونه از فیلمهای آموزشی پروژه محور پایتون را از وبسایت آموزشی فرادرس معرفی کردهایم.
برای دیدن فیلمهای آموزشی بیشتر فرادرس به صورت پروژهمحور، چه در زبان برنامهنویسی پایتون و چه در سایر زبانهای برنامهنویسی، میتوانید روی عکس بالا کلیک کنید و به طور مستقیم به صفحه مجموعه آموزشهای پروژهمحور برنامهنویسی فرادرس منتقل شوید.
تولید کننده کلمه عبور با استفاده از ماژول Random در پایتون
بعد از مطالعه درباره تواناییهای ماژول Random در پایتون و توابعی که این ماژول ارائه میدهد، مرحله بعد بهکار گرفتن این دانش در سناریوهای عملی است. برای انجام این کار در این بخش از مطلب، برنامه تولید کننده پسورد را پیادهسازی کردهایم.
1import random
2import string
3
4# Generating Random Passwords
5def generatePassword(n):
6 characters = string.ascii_letters + string.digits + string.punctuation
7 password = ''.join(random.choices(characters, k=n))
8 return password
9
10print("Enter the length of password you want to generate:-")
11while True:
12 password = generatePassword(int(input()))
13 print("Your password is: ",password)
14 inp = input("Do you agree with password. Press Y or N - ")
15 if inp == "Y":
16 print("Password was changed!")
17 break
خروجی کد بالا به صورت زیر به کاربر نمایش داده میشود.
Enter if you want to generate password:- Your password is: vB%N&N[TG[eK6zF#Nl-@ Do you agree with password. Press Y or N - Y Password was changed!
توضیح کد بالا به صورتی است که در پایین فهرست کردهایم.
- تابع برنامه «Random Password Generator» که نوشتهایم در ابتدای کار مقداری را به صورت عدد در ورودی از کاربر میگیرد. این مقدار ورودی، طول کلمه عبوری که باید تولید شود را نشان میهد.
- سپس کد، رشتهای را به نام characters
ایجاد میکند که شامل اعداد، حروف الفبا و علائم نگارشی است. مقادیر تصادفی که برای تولید کلمه عبور استفاده میشوند از کاراکترهای این رشته بزرگ انتخاب خواهند شد.
- در این کد از تابع choice()
برای انتخاب مقادیر تصادفی از بین کاراکترهای این رشته استفاده شده است. مقادیر تصادفی که تابع choice()
انتخاب میکند برای ساخت کلمه عبور استفاده میشوند.
- در نهایت، کاربر به انتخاب بین ادامه با کلمه عبور تولید شده یا خروج از برنامه دعوت میشود.
جمع بندی
ماژول Random در پایتون مرجع قدرتمندی برای استفاده از مقادیر تصادفی در برنامهها و پروژههای پایتونی است. تفاوتی ندارد که در حال ساخت بازی کامپیوتری، پیادهسازی شبیهسازی یا برنامهای هستید که نیاز به اخذ تصمیماتی بر مبنای احتمال دارد. این ماژول مجموعه قدرتمندی از توابع را برای کمک به رسیدن به هدفتان فراهم کرده است. ماژول random
برای انجام طیف وسیعی از پروژههای برنامهنویسی از تولید اعداد تصادفی با توزیعهای مختلف و بُر زدن دنبالهها گرفته تا انتخاب عناصر تصادفی از بین مجموعههای داده را انجام میدهد.
همینطور که به بررسی ماژول Random در پایتون ادامه میدهیم، باید به خاطر داشته باشیم که نیازمندیهای خاص پروژه خود را نیز در نظر داشته باشیم. تکنیک گزینش تصادفی، محدوده انتخابها و تابع مورد استفاده خود را باید با دقت انتخاب کنیم تا مطمئن شویم که انتخاب تصادفی مورد نظرمان وظیفه اصلی خود را انجام میدهد. با استفاده از ماژول random
، میتوانیم پیشبینیناپذیری و پویایی را در پروژههای پایتون خود درج کنیم و کارایی و جذابیت آنها را افزایش دهیم. در این مطلب از مجله فرادرس با ماژول Random در پایتون آشنا شدیم. همه توابع این ماژول را در جدولی مشاهده کردیم و با بعضی از توابع پراستفاده این ماژول، مثالهایی را کدنویسی کردیم.
source