تُستخدم مكتبة random في بايثون عندما تريد توليد رقم عشوائي، اختيار عنصر من قائمة، خلط العناصر، أو اختيار عدة عناصر عشوائيًا. وهي مكتبة قياسية تأتي مع بايثون، لذلك لا تحتاج إلى تثبيتها باستخدام pip.
في هذا الدرس من سلسلة أساسيات بايثون ستتعلم أهم دوال random للمبتدئين مثل randint() وchoice() وsample() وchoices() وshuffle()، مع أمثلة عملية ولعبة تخمين رقم وقرعة بسيطة.
الإجابة المختصرة: استخدمrandint()لرقم صحيح عشوائي، وchoice()لاختيار عنصر واحد، وsample()لعدة عناصر بدون تكرار، وchoices()عند السماح بالتكرار، وshuffle()لخلط قائمة. {alertInfo}
{getToc} $title={محتوى المقال}
أهم دوال random للمبتدئين
| الدالة | وظيفتها | مثال |
|---|---|---|
random() |
توليد رقم عشري بين 0 و 1. | random.random() |
randint() |
توليد رقم صحيح بين رقمين، والحد الأخير داخل. | random.randint(1, 10) |
randrange() |
اختيار رقم من نطاق مثل range. | random.randrange(1, 10) |
uniform() |
توليد رقم عشري بين رقمين. | random.uniform(10, 50) |
choice() |
اختيار عنصر واحد من قائمة. | random.choice(names) |
sample() |
اختيار عدة عناصر بدون تكرار. | random.sample(names, 2) |
choices() |
اختيار عدة عناصر مع احتمال التكرار. | random.choices(names, k=3) |
shuffle() |
خلط عناصر القائمة الأصلية. | random.shuffle(items) |
seed() |
تثبيت تسلسل النتائج العشوائية للتجربة. | random.seed(10) |
ما هي مكتبة random في بايثون؟
مكتبة random جزء من المكتبة القياسية في بايثون، لذلك لا تحتاج إلى تثبيتها باستخدام pip. كل ما تحتاجه هو استدعاؤها داخل الكود باستخدام import random.
تُستخدم مكتبة random في مهام كثيرة، مثل:
- توليد رقم عشوائي.
- اختيار عنصر عشوائي من قائمة.
- خلط ترتيب عناصر قائمة.
- اختيار أكثر من عنصر عشوائي.
- بناء لعبة تخمين الرقم.
- اختيار سؤال عشوائي من مجموعة أسئلة.
- محاكاة القرعة أو الاختيار العشوائي.
- إنشاء أمثلة تدريبية متغيرة في كل مرة.
أبسط مثال:
import random
number = random.randint(1, 10)
print(number)
في كل مرة تشغل الكود، قد تحصل على رقم مختلف بين 1 و 10.
ما فائدة random في بايثون؟
في البرامج العادية، أنت تكتب القيم بنفسك، فيكون الناتج معروفًا مسبقًا. لكن أحيانًا تحتاج أن يختار البرنامج شيئًا بطريقة غير ثابتة. مثلًا:
- لعبة تريد فيها أن يختار الكمبيوتر رقمًا سريًا.
- برنامج يريد اختيار اسم فائز من قائمة أسماء.
- تطبيق يعرض سؤالًا عشوائيًا من بنك أسئلة.
- برنامج يخلط ترتيب كلمات أو عناصر.
- تجربة تعليمية تريد فيها أرقامًا مختلفة في كل تشغيل.
هنا تأتي فائدة random، فهي تجعل البرنامج أكثر تفاعلًا وأقرب للمشاريع الحقيقية.
ملاحظة مهمة: مكتبةrandomمناسبة للتعلم، الألعاب، التجارب، والاختيارات العشوائية البسيطة. أما كلمات المرور الحساسة أو التشفير فتحتاج مكتبات أكثر أمانًا مثلsecrets. {alertWarning}
ما الفرق بين random وsecrets في بايثون؟
مكتبة random مناسبة للألعاب والمحاكاة والتمارين والاختيارات العشوائية العادية، لكنها ليست مصممة للأمان والتشفير. إذا كنت تنشئ كلمة مرور حقيقية، رمز تحقق، رابط استعادة، أو قيمة سرية، فاستخدم مكتبة secrets.
| المكتبة | استخدمها في | لا تعتمد عليها في |
|---|---|---|
random |
الألعاب، الاختبارات، المحاكاة، خلط القوائم، اختيار عناصر للتدريب | كلمات المرور والرموز والمفاتيح الأمنية |
secrets |
القيم التي تحتاج عشوائية مناسبة للاستخدامات الأمنية | ليست ضرورية بدل random في الألعاب والتمارين العادية |
استدعاء مكتبة random
قبل استخدام أي دالة من مكتبة random يجب استدعاؤها:
import random
بعدها يمكنك استخدام الدوال الموجودة داخل المكتبة بهذا الشكل:
random.randint(1, 10)
أي أننا نكتب اسم المكتبة random ثم نقطة ثم اسم الدالة التي نريد استخدامها.
توليد رقم عشوائي في بايثون باستخدام randint()
الدالة randint() من أشهر دوال مكتبة random. وهي تُستخدم لتوليد رقم صحيح عشوائي بين رقمين.
import random
number = random.randint(1, 6)
print("الرقم العشوائي هو:", number)
هذا المثال يشبه رمي حجر النرد؛ لأن الناتج سيكون رقمًا من 1 إلى 6.
انتبه: في randint(1, 6) الرقم 1 داخل في الاختيار والرقم 6 أيضًا داخل في الاختيار. {alertInfo}
مثال عملي: محاكاة رمي حجر النرد
يمكننا استخدام randint() لبناء برنامج بسيط يحاكي رمي حجر النرد:
import random
dice = random.randint(1, 6)
print("نتيجة رمي النرد:", dice)
في كل مرة تشغل البرنامج ستحصل غالبًا على نتيجة مختلفة، مثل 2 أو 5 أو 6.
توليد رقم عشري عشوائي باستخدام random()
الدالة random() تولد رقمًا عشريًا شبه عشوائي بحيث يكون أكبر من أو يساوي 0 وأقل من 1، أي في النطاق 0.0 <= x < 1.0.
import random
number = random.random()
print(number)
قد تكون النتيجة مثل:
0.734529152
هذه الدالة مفيدة عندما تحتاج إلى قيمة احتمالية أو رقم عشري عشوائي.
توليد رقم عشري بين قيمتين باستخدام uniform()
إذا أردت رقمًا عشريًا بين رقمين معينين، استخدم uniform().
import random
price = random.uniform(10, 50)
print(price)
قد يعطيك البرنامج رقمًا عشريًا مثل:
27.482913
وإذا أردت تقريب الناتج إلى رقمين بعد الفاصلة، يمكنك استخدام round():
import random
price = random.uniform(10, 50)
price = round(price, 2)
print(price)
الفرق بين randint و randrange
توجد دالة أخرى اسمها randrange()، وهي تشبه range() التي تعلمناها في الحلقات. لكنها تختار رقمًا عشوائيًا من نطاق معين.
import random
number = random.randrange(1, 10)
print(number)
هنا يمكن أن يكون الناتج من 1 إلى 9، لأن الرقم الأخير 10 غير داخل في النطاق.
| الدالة | هل الرقم الأخير داخل؟ | مثال |
|---|---|---|
randint(1, 10) |
نعم، الرقم 10 ممكن يظهر. | من 1 إلى 10 |
randrange(1, 10) |
لا، الرقم 10 لا يظهر. | من 1 إلى 9 |
قاعدة سهلة: إذا أردت رقمًا صحيحًا بين رقمين والرقم الأخير يدخل في الاختيار، استخدمrandint(). وإذا أردت سلوكًا يشبهrange()، استخدمrandrange(). {alertSuccess}
اختيار عنصر عشوائي من قائمة باستخدام choice()
الدالة choice() تُستخدم لاختيار عنصر واحد عشوائي من قائمة أو تسلسل.
import random
names = ["أحمد", "سارة", "محمد", "ليلى"]
winner = random.choice(names)
print("الفائز هو:", winner)
في كل مرة تشغل البرنامج، قد يختار اسمًا مختلفًا من القائمة.
مثال عملي: اختيار سؤال عشوائي
يمكنك استخدام choice() لبناء برنامج يعرض سؤالًا عشوائيًا:
import random
questions = [
"ما هي لغة بايثون؟",
"ما الفرق بين list و tuple؟",
"ما فائدة if في بايثون؟",
"كيف نطبع نصًا باستخدام print؟"
]
question = random.choice(questions)
print("سؤال اليوم:", question)
هذا المثال مناسب لبناء تطبيق مراجعة دروس أو أسئلة تدريبية للمبتدئين.
اختيار عدة عناصر بدون تكرار باستخدام sample()
إذا أردت اختيار أكثر من عنصر من قائمة بدون تكرار، استخدم sample().
import random
students = ["أحمد", "سارة", "محمد", "ليلى", "خالد"]
selected = random.sample(students, 2)
print(selected)
هذا الكود يختار اسمين مختلفين من القائمة.
معلومة مهمة: الدالة sample() لا تكرر العنصر المختار. فإذا اخترت اسمين، فلن يظهر نفس الاسم مرتين في النتيجة. {alertInfo}
اختيار عدة عناصر مع التكرار باستخدام choices()
إذا أردت اختيار أكثر من عنصر مع إمكانية التكرار، استخدم choices().
import random
colors = ["أحمر", "أزرق", "أخضر"]
result = random.choices(colors, k=5)
print(result)
قد تظهر النتيجة مثل:
['أزرق', 'أحمر', 'أزرق', 'أخضر', 'أزرق']
لاحظ أن اللون الأزرق ظهر أكثر من مرة، لأن choices() تسمح بالتكرار.
الفرق بين choice و sample و choices
| الدالة | وظيفتها | هل تسمح بالتكرار؟ |
|---|---|---|
choice() |
اختيار عنصر واحد. | لا ينطبق لأنها تختار عنصرًا واحدًا فقط. |
sample() |
اختيار عدة عناصر بدون تكرار. | لا. |
choices() |
اختيار عدة عناصر مع احتمال التكرار. | نعم. |
خلط عناصر القائمة باستخدام shuffle()
الدالة shuffle() تُستخدم لخلط ترتيب عناصر القائمة نفسها.
import random
numbers = [1, 2, 3, 4, 5]
random.shuffle(numbers)
print(numbers)
قد تكون النتيجة:
[3, 1, 5, 2, 4]
الدالة shuffle() لا تنشئ قائمة جديدة، بل تغير ترتيب القائمة الأصلية نفسها.
انتبه: عند استخدام shuffle() سيتم تعديل القائمة الأصلية. إذا كنت تريد الاحتفاظ بالترتيب القديم، انسخ القائمة أولًا. {alertWarning}
نسخ القائمة قبل خلطها
إذا أردت خلط نسخة من القائمة دون تغيير القائمة الأصلية، يمكنك استخدام copy().
import random
original = ["A", "B", "C", "D"]
shuffled = original.copy()
random.shuffle(shuffled)
print("الأصلية:", original)
print("بعد الخلط:", shuffled)
تكرار نفس التسلسل العشوائي باستخدام seed()
أحيانًا تريد نتيجة عشوائية لكنها ثابتة في كل مرة، خصوصًا أثناء التجربة أو الشرح. هنا نستخدم seed().
import random
random.seed(10)
print(random.randint(1, 100))
print(random.randint(1, 100))
عند استخدام نفس قيمة seed ثم تنفيذ الاستدعاءات نفسها، تحصل على تسلسل قابل للتكرار. وهذا مفيد أثناء الشرح والاختبارات وتصحيح الأخطاء.
معلومة للمبتدئين: مكتبةrandomتولد أرقامًا شبه عشوائية. وتسمح لكseed()بإعادة نفس التسلسل عند استخدام قيمة بداية ثابتة، لذلك هي مفيدة للاختبارات وليست أداة أمنية. {alertInfo}
مثال عملي: لعبة تخمين الرقم
الآن سنستخدم random في مشروع صغير وممتع: لعبة تخمين الرقم. سيختار الكمبيوتر رقمًا عشوائيًا بين 1 و 10، والمستخدم يحاول تخمينه.
import random
secret_number = random.randint(1, 10)
guess = int(input("خمن رقمًا من 1 إلى 10: "))
if guess == secret_number:
print("رائع! لقد خمنت الرقم الصحيح")
else:
print("خطأ، الرقم الصحيح هو:", secret_number)
هذا المثال يجمع بين:
- استخدام مكتبة
random. - توليد رقم عشوائي.
- استقبال إدخال من المستخدم.
- استخدام الشرط
if. - طباعة نتيجة مناسبة.
تحسين لعبة تخمين الرقم باستخدام أكثر من محاولة
لنجعل اللعبة أفضل. سنعطي المستخدم 3 محاولات بدل محاولة واحدة.
import random
secret_number = random.randint(1, 10)
attempts = 3
for attempt in range(attempts):
guess = int(input("خمن الرقم: "))
if guess == secret_number:
print("إجابة صحيحة!")
break
else:
print("إجابة خاطئة")
else:
print("انتهت المحاولات. الرقم الصحيح هو:", secret_number)
لاحظ أننا استخدمنا for لتكرار المحاولات، واستخدمنا break لإيقاف الحلقة إذا خمن المستخدم الرقم الصحيح.
مثال عملي: قرعة اختيار فائز
هذا مثال شائع ومفيد. لدينا قائمة أسماء، ونريد اختيار فائز عشوائي.
import random
participants = [
"أحمد",
"سارة",
"محمد",
"ليلى",
"خالد"
]
winner = random.choice(participants)
print("الفائز في القرعة هو:", winner)
يمكن تطوير هذا المثال لاحقًا بإضافة واجهة بسيطة، أو قراءة الأسماء من ملف، أو منع تكرار الفائز.
مثال عملي: اختيار كلمة عشوائية للتدريب
يمكنك استخدام random.choice() لبناء برنامج تدريب على الكلمات:
import random
words = ["python", "variable", "function", "loop", "list"]
word = random.choice(words)
print("كلمة اليوم:", word)
هذا المثال بسيط، لكنه يمكن أن يكون بداية لتطبيق أكبر يعرض مصطلحات برمجية للمراجعة اليومية.
مثال عملي: خلط أسئلة اختبار
عند بناء اختبار بسيط، قد تريد عرض الأسئلة بترتيب مختلف كل مرة.
import random
questions = [
"ما وظيفة print؟",
"ما الفرق بين list و tuple؟",
"ما فائدة if؟",
"ما هي الدالة input؟"
]
random.shuffle(questions)
for question in questions:
print(question)
هذا الأسلوب يجعل ترتيب الأسئلة مختلفًا في كل تشغيل.
أخطاء شائعة عند استخدام random في بايثون
1. نسيان استدعاء المكتبة
إذا كتبت:
number = random.randint(1, 10)
بدون كتابة:
import random
سيظهر خطأ لأن بايثون لا تعرف ما هو random.
2. الخلط بين randint و randrange
قد يعتقد البعض أن:
random.randrange(1, 10)
يمكن أن يعطي الرقم 10، لكنه لا يعطي 10؛ لأن randrange لا تُدخل الحد الأخير.
3. استخدام shuffle وانتظار قائمة جديدة
الدالة shuffle() تعدل القائمة الأصلية ولا ترجع قائمة جديدة.
import random
numbers = [1, 2, 3]
result = random.shuffle(numbers)
print(result)
قد تكون النتيجة None، لأن shuffle() لا ترجع قائمة جديدة. الصحيح أن تطبع القائمة نفسها بعد خلطها:
import random
numbers = [1, 2, 3]
random.shuffle(numbers)
print(numbers)
4. استخدام random لكلمات مرور حساسة
قد يستخدم المبتدئ مكتبة random لتوليد كلمة مرور، وهذا مناسب للتمارين البسيطة فقط. لكن إذا كنت تريد كلمة مرور حقيقية أو قيمة أمنية حساسة، فاستخدم مكتبة مخصصة مثل secrets.
تحذير مهم: لا تعتمد علىrandomفي الأمور الأمنية الحساسة مثل كلمات المرور الحقيقية أو رموز التحقق. استخدمsecretsبدلًا منها. {alertWarning}
متى أستخدم مكتبة random؟
استخدم مكتبة random عندما تحتاج إلى نتيجة غير ثابتة في كل تشغيل. مثلًا:
- اختيار رقم سري في لعبة.
- اختيار فائز من قائمة أسماء.
- اختيار سؤال عشوائي من بنك أسئلة.
- خلط ترتيب عناصر قائمة.
- اختيار عنصر تدريبي عشوائي.
- محاكاة رمي النرد أو القرعة.
- توليد بيانات عشوائية للتجربة.
لكن لا تستخدمها في الأشياء الأمنية الحساسة مثل كلمات المرور الحقيقية، رموز التأكيد، أو مفاتيح التشفير.
تمرين تطبيقي على مكتبة random
حاول تنفيذ التمرين التالي:
- أنشئ ملفًا باسم
random_practice.py. - استدع مكتبة
random. - أنشئ قائمة تحتوي على 5 أسماء.
- اختر اسمًا عشوائيًا من القائمة.
- ولّد رقمًا عشوائيًا بين 1 و 100.
- اخلط ترتيب القائمة.
- اطبع النتائج للمستخدم.
الحل المقترح:
import random
names = ["أحمد", "سارة", "محمد", "ليلى", "خالد"]
selected_name = random.choice(names)
random_number = random.randint(1, 100)
random.shuffle(names)
print("الاسم المختار:", selected_name)
print("الرقم العشوائي:", random_number)
print("القائمة بعد الخلط:", names)
روابط داخلية مفيدة من بايثون العرب
لفهم هذا الدرس بشكل أفضل، يمكنك مراجعة هذه الدروس من موقع بايثون العرب:
- كورس أساسيات بايثون للمبتدئين
- شرح Modules و import في بايثون للمبتدئين
- شرح الحلقات for و while في بايثون
- شرح if و else في بايثون للمبتدئين
- شرح القوائم Lists في بايثون للمبتدئين
- تعلم بايثون بالمثال
مصادر خارجية رسمية للتوسع
بعد فهم الأساسيات، يمكنك الرجوع إلى التوثيق الرسمي للتوسع أكثر:
الخلاصة
مكتبة random في بايثون تمنحك الأدوات الأساسية لتوليد أرقام عشوائية، اختيار عناصر من القوائم، اختيار عينات، وخلط العناصر. وهي مناسبة للألعاب والتمارين والمحاكاة والمشاريع التعليمية.
ابدأ بـ randint() وchoice() وshuffle()، ثم انتقل إلى sample() وchoices() وseed(). وتذكر أن الاستخدامات الأمنية تحتاج إلى secrets بدلًا من random.
الخلاصة العملية: استخدمrandint()لتوليد رقم صحيح، وchoice()لاختيار عنصر واحد، وsample()لاختيار عدة عناصر بدون تكرار، وshuffle()لخلط عناصر القائمة. {alertSuccess}
أسئلة شائعة مع إجاباتها
هل أحتاج إلى تثبيت مكتبة random؟
لا. مكتبة random من مكتبات بايثون القياسية، لذلك لا تحتاج إلى تثبيتها باستخدام pip. فقط اكتب import random.
ما فائدة مكتبة random في بايثون؟
تُستخدم مكتبة random لتوليد أرقام عشوائية، اختيار عناصر عشوائية من القوائم، خلط القوائم، وبناء برامج مثل الألعاب والقرعة والاختبارات العشوائية.
كيف أعمل رقمًا عشوائيًا من 1 إلى 10 في بايثون؟
استخدم random.randint(1, 10). الدالة randint() تشمل الحدين، لذلك يمكن أن تكون النتيجة أي رقم صحيح من 1 إلى 10.
ما الفرق بين randint و randrange؟
randint(1, 10) يمكن أن يعطي الرقم 10، أما randrange(1, 10) فلا يعطي الرقم 10 لأنه يتبع فكرة range.
كيف أختار عنصرًا عشوائيًا من قائمة؟
استخدم choice():
import random
names = ["أحمد", "سارة", "محمد"]
name = random.choice(names)
print(name)
كيف أخلط عناصر قائمة في بايثون؟
استخدم shuffle():
import random
numbers = [1, 2, 3, 4]
random.shuffle(numbers)
print(numbers)
هل random مناسبة لتوليد كلمات مرور؟
للتدريب فقط يمكن استخدامها، لكن لكلمات المرور الحقيقية أو الأمور الأمنية استخدم مكتبة secrets لأنها مخصصة للأمان.
ما الفرق بين sample و choices؟
sample() تختار عدة عناصر بدون تكرار، بينما choices() يمكن أن تكرر العناصر في النتيجة.
هل يمكن استخدام random في الألعاب؟
نعم، وهي ممتازة للألعاب البسيطة مثل لعبة تخمين الرقم، رمي النرد، اختيار سؤال عشوائي، أو تحريك عناصر بطريقة عشوائية.




