وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

معرفی ماژول تصادفی پایتون

0 30
زمان لازم برای مطالعه: 5 دقیقه


معرفی

حتی برای کسی که علاقه ای به برنامه نویسی کامپیوتری ندارد، مفید بودن تولید اعداد تصادفی در شرایط خاص چیزی آشکار است. در اکثر بازی‌های رومیزی، ما تاس می‌اندازیم تا عددی غیرقابل پیش‌بینی تولید کنیم که حرکت بعدی بازیکن را مشخص می‌کند. همچنین، همه می‌توانیم موافق باشیم که انجام هر بازی با ورق بدون جابجایی مناسب بین راندها بی‌معنی خواهد بود.

اما اعداد تصادفی نه تنها در زمینه های نسبتاً بی اهمیت مانند سرگرمی یا قمار مهم هستند. آنها به ویژه در زمینه رمزنگاری بسیار مهم هستند. به منظور اطمینان از انتقال ایمن داده ها، هر بار که اتصال ایمن لازم است، یک کلید تصادفی باید تولید شود. بسیاری از انواع مختلف ارتباطات الکترونیکی از این نوع امنیت استفاده می کنند. بسیار مهم است که حدس زدن کلید دشوار باشد – بهترین راه برای اطمینان از آن، تصادفی کردن آن است زیرا از لحظه‌ای که کسی کلید را حدس می‌زند، می‌تواند پیام را رمزگشایی کند – و ارتباط دیگر امن نیست.

تصادفی واقعی در مقابل شبه تصادفی

اعداد تصادفی را می توان در نتیجه استفاده از روش هایی به نام مولد اعداد تصادفی (RNG) به دست آورد که می توان آنها را به دو دسته تقسیم کرد: مولد اعداد تصادفی واقعی (TRNG – که مولد اعداد تصادفی سخت افزاری نیز نامیده می شود) و مولد اعداد شبه تصادفی (PRNGS). ).

مولد اعداد تصادفی واقعی

مولدهای اعداد تصادفی واقعی روش هایی هستند که تصادفی بودن یا غیرقابل پیش بینی بودن را از جنبه های غیرقابل پیش بینی فرآیندهای فیزیکی استخراج می کنند. این روش‌ها مستقیماً اعداد را تولید نمی‌کنند، بلکه حالت‌هایی را تولید می‌کنند که می‌توان آن‌ها را به‌عنوان اعداد تفسیر کرد – به همین دلیل است که معمولاً نامیده می‌شوند. مولدهای رویداد تصادفی (REGs). برخی از آنها، که از رویدادهای ماکروسکوپی استفاده می کنند، معمولاً شناخته شده هستند – روش هایی مانند پرتاب تاس، چرخاندن سکه یا به هم زدن کارت ها.

این مولدهای اعداد تصادفی واقعی اغلب از پدیده های فیزیکی پیچیده تری استفاده می کنند. برخی از آنها، مانند واپاشی رادیواکتیو، نویز حرارتی یا نویز رادیویی، غیرقابل پیش بینی بودن خود را از ویژگی های مکانیک کوانتومی می گیرند. روش های دیگر از غیر قابل پیش بینی بودن استفاده می کنند نویز اتمسفر یا حتی رفتار لامپ های گدازه.

مولد اعداد تصادفی شبه

حقیقت این است که اغلب تولید اعدادی که واقعاً تصادفی هستند، ضروری نیست. در بسیاری از موارد، تنها چیزی که نیاز داریم مجموعه‌ای از اعداد است که به نظر می رسد تصادفی. این نوع داده ها را می توان از مولد اعداد شبه تصادفی. اینها الگوریتم‌هایی هستند که از بخش کوچکی از اطلاعات (به نام دانه) استفاده می‌کنند و سپس فرمول‌های پیچیده ریاضی را به منظور تولید مجموعه‌های قطعی از اعداد شبیه مجموعه‌های واقعا تصادفی اعمال می‌کنند. Seed ممکن است مقداری باشد که از یک مولد اعداد تصادفی واقعی یا منبع دیگری مانند ساعت سیستم یا زمان تاریخ فعلی مشتق شده است.

پیشنهاد می‌کنیم بخوانید:  ویژگی های پنهان پایتون

چندین بار راه اندازی ژنراتور با استفاده از یک دانه، هر بار خروجی یکسانی را به همراه خواهد داشت. اعداد حاصل عمدتاً از اعداد مشتق شده از مولدهای اعداد تصادفی واقعی غیرقابل تشخیص هستند، اگرچه در واقع برخی از نظم های پنهان در توزیع آنها وجود دارد. با این حال، برای بسیاری از کاربردها، این نوع شبه تصادفی قطعی کاملاً کافی است.

ماژول تصادفی پایتون

پایتون، به طور مشخص یک جعبه ابزار بسیار آسان برای مدیریت اعداد تصادفی ارائه می دهد. یک ماژول، به دلایلی نامیده می شود random، یک مولد اعداد شبه تصادفی را پیاده سازی می کند و شامل روش هایی است که به ما اجازه می دهد مستقیماً بسیاری از مسائل برنامه نویسی مختلف را که تصادفی بودن در بازی وجود دارد حل کنیم.

را random ماژول مبتنی است روی Marsenne Twister – یک الگوریتم بسیار محبوب، که تولید کننده اعداد شبه تصادفی پیش فرض نه تنها برای پایتون، بلکه برای بسیاری از سیستم های نرم افزاری محبوب دیگر مانند Microsoft Excel، MATLAB، R یا PHP است. مزایای مهم آن شامل مجوز مجاز، شباهت تصادفی تایید شده توسط بسیاری از تست های آماری و سرعت نسبتا بالا در مقایسه با سایر PRNG ها است.

روش تصادفی()

مهمترین روش از random ماژول است random() روش. بیشتر توابع دیگر بستگی دارند روی آی تی. را random() روش یک شناور تصادفی در محدوده (0.0، 1.0) تولید می کند.

>>> import random
>>> random.random()
0.8474337369372327

روش ()seed

اگر برای تولید اعداد شبه تصادفی seed تنظیم نکنیم، seed پیش فرض زمان فعلی سیستم است. با این حال، می‌توانیم مقدار دقیق دانه را به صورت دستی تنظیم کنیم – که به خصوص اگر بخواهیم نتایج شبه تصادفی خود را در آینده تکرار کنیم، بسیار مفید است. برای این منظور می توانیم از random.seed() روش.

>>> random.seed(5)
>>> random.random()
0.6229016948897019
>>> random.random()
0.7417869892607294
>>> random.random()
0.7951935655656966
>>> random.seed(5)
>>> random.random()
0.6229016948897019

را random.seed() روش بر همه روش‌ها تأثیر می‌گذارد random ماژولی که پس از فراخوانی از آن استفاده می کنیم. در مثالی که در بالا نشان داده شده است، seed را روی قرار دادیم 5 و سپس اجرا کنید random.random() چندین بار عملکرد توجه به این نکته مهم است که دانه تعریف شده توسط کاربر فقط برای اولین بار استفاده می شود random روش اجرا می شود – پس از آن، دانه های روش های زیر با استفاده از مقادیر تصادفی قبلی ایجاد شده اصلاح می شوند.

پیشنهاد می‌کنیم بخوانید:  مثال: یک فایل را با Boto در AWS S3 آپلود کنید

این به پایتون اجازه می دهد تا هر بار اعداد جدیدی ارائه دهد. اما همچنان، پس از تنظیم مجدد دانه با استفاده از random.seed() روش، ما می توانیم دقیقا همان دنباله اعداد شبه تصادفی را در هر زمان بازتولید کنیم. این برای مواردی مانند اجرای تست بسیار مفید است. اگر هر بار که آزمایشی را انجام می دهید، همان دانه را بدهید که از یکی از آنها استفاده می کند randomبا استفاده از روش‌ها، همچنان می‌توانید بدانید که خروجی آزمایش‌ها چه خواهد بود.

نمونه های دیگر از ماژول تصادفی

را random.random() روشی که یک مقدار شناور تصادفی از یک محدوده خاص به ما می دهد، حتی برای یک توسعه دهنده بی تجربه پایتون برای طراحی هر نوع دستکاری مبتنی بر تصادفی در اطراف آن کافی است. شما احتمالاً می توانید تصور کنید که یک را پرتاب کنید if یا دو تا برای نوشتن تابعی که به صورت تصادفی مقداری را از یک لیست می گیرد یا به جای یک float یک عدد صحیح تصادفی برمی گرداند. خوب، random ماژول به ما اجازه می دهد تا به طور خودکار از آن وظایف نیز مراقبت کنیم. در زیر، من چند روش جالب را نشان می دهم که عملیات تصادفی رایج را ساده می کند. شما می توانید با کل پتانسیل آن آشنا شوید random ماژول در مستندات رسمی پایتون.

>>> random.randint(1,10)
4

را random.randint() متد دو آرگومان می گیرد که محدوده ای را که متد از آن یک عدد صحیح تصادفی می کشد را توصیف می کند.

>>> random.randrange(2,10,2)
2
>>> random.randrange(2,10,2)
4
>>> random.randrange(2,10,2)
8
>>> random.randrange(2,10,2)
6

در اسکریپت بالا، random.randrange() روش مشابه است random.randint() اما به ما اجازه می دهد تا آرگومان سوم را که نقطه گام محدوده تعریف شده است تعریف کنیم. در مثال بالا، ما فقط به اعداد زوج از محدوده بین 2 تا 10 نیاز داریم.

>>> cards = ('ace_spades','10_hearts','3_diamonds','king_hearts')
>>> random.choice(cards)
'10_hearts'

در اسکریپت بالا، random.choice() متد یک عنصر تصادفی را از لیست انتخاب می کند.

>>> cards = ('ace_spades','10_hearts','3_diamonds','king_hearts')
>>> random.shuffle(cards)
>>> print(cards)
('king_hearts', '3_diamonds', 'ace_spades', '10_hearts')

در اسکریپت قبلی، random.shuffle() متد لیستی از عناصر را به هم می‌ریزد. مهم است که توجه داشته باشید که لیست را در جای خود تغییر می دهد – به این معنی که برمی گردد None و در واقع ما را اصلاح می کند cards متغیر.

نتیجه گیری

بدست آوردن اعداد تصادفی خوب، برای کاربردهای جدی مانند رمزنگاری، کار آسانی نیست. اما هنگامی که یک عدد شبه تصادفی ثابت برای برنامه ما کافی است، پایتون، مانند همیشه، با تعدادی روش فوق العاده ساده برای رسیدن سریع به هدفمان همراه است.

(برچسب‌ها به ترجمه)# python



منتشر شده در 1403-01-25 14:06:06

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید