Table of Contents
کار با ماژول `random` در پایتون
در این بخش با ماژولی از کتابخانهٔ استاندارد پایتون آشنا میشویم که برای تولید «اعداد شبهتصادفی» و انجام کارهای تصادفی (مثل انتخاب تصادفی یک آیتم از لیست) استفاده میشود: ماژول random.
در فصل والد، با مفهوم «کتابخانه» و «وارد کردن ماژول» آشنا شدهاید؛ اینجا فقط روی random تمرکز میکنیم.
وارد کردن ماژول `random`
برای استفاده از این ماژول باید آن را وارد (import) کنید:
import random
بعد از این، میتوانید از توابع داخل آن مثل random.randint() یا random.choice() استفاده کنید.
تولید عدد اعشاری تصادفی بین ۰ و ۱
سادهترین تابع:
random.random()
عددی اعشاری (float) در بازهٔ $[0, 1)$ تولید میکند؛ یعنی از ۰ شامل، تا ۱ غیرشامل.
import random
x = random.random()
print(x) # مثلا: 0.3748291012هر بار که برنامه را اجرا کنید، مقدار متفاوتی خواهید دید.
تولید عدد تصادفی در یک بازهٔ مشخص (صحیح و اعشاری)
۱. عدد صحیح با `randint`
random.randint(a, b)
یک عدد صحیح تصادفی بینaوb(هر دو شامل) برمیگرداند.
import random
n = random.randint(1, 6) # شبیه تاس ۶ وجهی
print(n) # 1 تا 6۲. عدد اعشاری در بازه با `uniform`
random.uniform(a, b)
یک عدد اعشاری (float) بینaوbبرمیگرداند (دو سر بازه میتوانند برگردانده شوند).
import random
temperature = random.uniform(20.0, 25.0)
print(temperature) # مثلا: 22.4819انتخاب تصادفی از یک لیست یا رشته
وقتی میخواهید از میان چند گزینه یکی را تصادفی انتخاب کنید:
۱. `choice`
random.choice(sequence)
یک عضو تصادفی از لیست، رشته، تاپل و… برمیگرداند (دنباله نباید خالی باشد).
import random
colors = ["red", "green", "blue", "yellow"]
chosen_color = random.choice(colors)
print(chosen_color)مثال با رشته:
import random
letters = "ABCDE"
ch = random.choice(letters)
print(ch) # یکی از A,B,C,D,E۲. انتخاب چند آیتم بدون تکرار: `sample`
random.sample(population, k)
kعضو متمایز (بدون تکرار) را به صورت تصادفی برمیگرداند.
import random
numbers = [1, 2, 3, 4, 5, 6]
picked = random.sample(numbers, 3)
print(picked) # مثلا: [4, 1, 6]
k نباید بزرگتر از طول لیست باشد.
۳. انتخاب با امکان تکرار: `choices`
random.choices(population, k=...)
kعضو را با امکان تکرار برمیگرداند.
import random
numbers = [1, 2, 3]
picked = random.choices(numbers, k=5)
print(picked) # مثلا: [2, 2, 1, 3, 2]درهمریختن ترتیب یک لیست (`shuffle`)
اگر بخواهید ترتیب عناصر یک لیست را بهطور تصادفی جابهجا کنید:
random.shuffle(x)
لیست را «درجا» (in-place) تغییر میدهد و مقدار بازگشتی ندارد.
import random
cards = ["A", "K", "Q", "J", "10"]
random.shuffle(cards)
print(cards) # ترتیب جدید تصادفی
نکته: shuffle فقط روی لیست (شیء قابل تغییر) کار میکند، نه روی رشتهها.
شبیهسازی ساده: پرتاب سکه و تاس
پرتاب سکه
import random
result = random.choice(["شیر", "خط"])
print("نتیجهٔ پرتاب سکه:", result)پرتاب دو تاس و جمع آنها
import random
die1 = random.randint(1, 6)
die2 = random.randint(1, 6)
total = die1 + die2
print("تاس اول:", die1)
print("تاس دوم:", die2)
print("جمع:", total)چنین الگوهایی در بازیها، شبیهسازیها و تمرینها بسیار کاربردیاند.
تولید رمز عبور ساده با `random`
ترکیب choice با رشتهای از حروف/اعداد:
import random
import string # از کتابخانهٔ استاندارد، برای حروف و اعداد
chars = string.ascii_letters + string.digits # a-z, A-Z, 0-9
length = 8
password = ""
for _ in range(length):
password += random.choice(chars)
print("رمز عبور تصادفی:", password)
(در بخشهای دیگر دوره، پروژهٔ مجزا برای تولید رمز عبور خواهید داشت؛ اینجا صرفا ایدهٔ استفاده از random را میبینید.)
`random.seed()` و تکرارپذیری
ماژول random اعداد «شبهتصادفی» تولید میکند. یعنی اگر «بذر» (seed) اولیه را ثابت بگذارید، توالی اعداد تولیدشده هم همیشه ثابت میماند. این برای تست و اشکالزدایی مفید است.
random.seed(value)
رفتار تولید اعداد را طوری تنظیم میکند که تکرارپذیر شود.
مثال:
import random
random.seed(42) # عدد دلخواه
print(random.randint(1, 10))
print(random.randint(1, 10))
print(random.random())
اگر این کد را چند بار اجرا کنید، هر بار دقیقا همین سه مقدار را میگیرید.
اما اگر seed را حذف کنید، هر اجرا نتایج متفاوتی دارد.
نکته: برای استفادههای عادی (مثلا بازی)، معمولا نیازی به seed ندارید. برای بازتولید نتایج یک شبیهسازی، seed بسیار مفید است.
جمعبندی کاربردهای رایج `random`
چیزهایی که برای یک مبتدی بیشترین کاربرد را دارند:
random.random()→ عدد اعشاری بین ۰ و ۱random.randint(a, b)→ عدد صحیح بینaوb(شامل هر دو)random.uniform(a, b)→ عدد اعشاری در بازهٔ مشخصrandom.choice(seq)→ انتخاب یک عنصر از لیست/رشتهrandom.sample(seq, k)→ انتخاب چند عنصر بدون تکرارrandom.choices(seq, k=...)→ انتخاب چند عنصر با امکان تکرارrandom.shuffle(list)→ درهمریختن ترتیب لیستrandom.seed(value)→ تکرارپذیر کردن توالی اعداد تصادفی
در تمرینها و پروژههای بعدی، مثل «بازی حدس عدد» و «تولیدکنندهٔ رمز عبور»، به طور عملی از این توابع استفاده خواهید کرد.