1. مقدمه
در زبان پایتون، تولید عدد تصادفی برای کاربردهای مختلف مانند قرعهکشی، تولید داده تست، شبیهسازی، رمزهای موقت و بازیها بسیار استفاده میشود. اما در بسیاری از مواقع لازم است این اعداد بدون تکرار باشند تا نتیجه معتبر و قابل استفاده باشد.
در این مقاله ابتدا با تولید اعداد تصادفی ساده در پایتون آشنا میشویم و سپس سراغ روشهای تولید اعداد تصادفی غیرتکراری میرویم.
2. تولید عدد تصادفی در پایتون (Random Number)
برای تولید عدد تصادفی در پایتون میتوان از ماژول random
استفاده کرد. چند نمونه ساده:
مثال ۱: تولید عدد صحیح تصادفی در یک بازه
import random
num = random.randint(1, 10)
print(num)
# خروجی: مثلا 7
مثال ۲: تولید عدد اعشاری تصادفی بین 0 و 1
import random
value = random.random()
print(value)
# خروجی: مثلا 0.5382193821
مثال ۳: انتخاب تصادفی از یک لیست
import random
items = [10, 20, 30, 40]
choice = random.choice(items)
print(choice)
# خروجی: مثلا 30
مشکل اصلی این است که در تولید عدد تصادفی ساده، احتمال تکراری بودن مقدارها وجود دارد و باید خودمان این موضوع را مدیریت کنیم.
3. تولید اعداد تصادفی غیرتکراری در پایتون
برای تولید اعداد تصادفی بدون تکرار چند روش کاربردی وجود دارد.
روش اول: استفاده از نمونهگیری با random.sample
این روش بهترین و راحتترین گزینه برای دریافت چند عدد تصادفی بدون تکرار از یک بازه مشخص است.
import random
numbers = random.sample(range(1, 51), 5)
print(numbers)
# خروجی: مثلا [12, 47, 3, 29, 41]
روش دوم: استفاده از Shuffle برای درهمریزی لیست
در این روش ابتدا لیست میسازیم و سپس ترتیب آن را تصادفی میکنیم:
import random
nums = list(range(1, 11))
random.shuffle(nums)
print(nums)
# خروجی: مثلا [7, 2, 9, 1, 10, 3, 8, 5, 6, 4]
روش سوم: جلوگیری از تکرار با استفاده از Set
اگر بخواهیم یکییکی اعداد تولید کنیم و مطمئن باشیم تکراری نیستند:
import random
unique_numbers = set()
while len(unique_numbers) < 5:
unique_numbers.add(random.randint(1, 20))
print(unique_numbers)
# خروجی: مثلا {3, 15, 7, 19, 12}
روش چهارم: تولید یکتا با استفاده از numpy
اگر با اعداد زیاد یا محاسبات علمی کار دارید:
import numpy as np
nums = np.random.choice(range(1, 51), size=7, replace=False)
print(nums)
# خروجی: مثلا [34 2 17 45 9 28 11]
4. مقایسه روشها
روش | سرعت | سادگی | نیاز به ماژول اضافی | توضیح |
---|---|---|---|---|
random.sample | عالی | بسیار ساده | خیر | بهترین گزینه برای لیست محدود |
shuffle | عالی | ساده | خیر | مناسب وقتی کل بازه لازم است |
set + randint | متوسط | متوسط | خیر | کنترل تعداد دلخواه از بازه |
numpy.choice | عالی | خوب | بله | مناسب مقیاس بزرگ |
5. نتیجهگیری
اگر تعداد مشخصی عدد تصادفی بدون تکرار از یک بازه نیاز دارید، random.sample
بهترین و سریعترین روش است.
اگر کل بازه را میخواهید بهصورت تصادفی مرتب کنید، از shuffle
استفاده کنید.
در مواردی که میخواهید تدریجی عدد تولید کنید و تکراری نباشد، set
کاربردی است.
برای پروژههای علمی یا حجم بالا، numpy.choice
گزینه مناسبتری است.
برای افزودن دیدگاه خود، نیاز است ابتدا وارد حساب کاربریتان شوید