في الدرس السابق من كورس أساسيات بايثون تعلمنا استخدام مكتبة datetime للتعامل مع التاريخ والوقت، وعرفنا كيف نحسب الفرق بين التواريخ وننسق الوقت داخل البرامج.
في هذا الدرس سننتقل إلى مكتبة مهمة وممتعة جدًا في Python، وهي مكتبة random. هذه المكتبة تُستخدم لتوليد أرقام عشوائية، اختيار عنصر عشوائي من قائمة، خلط عناصر قائمة، وبناء برامج بسيطة مثل لعبة تخمين الرقم، القرعة، اختيار اسم عشوائي، أو توليد نتيجة عشوائية.
{getToc} $title={محتوى المقال}
الفكرة ببساطة: مكتبة random تساعدك على جعل البرنامج يختار أو يولد قيمة بطريقة عشوائية، بدل أن تكون كل النتائج ثابتة ومتوقعة. {alertInfo}
هذا الدرس مهم جدًا للمبتدئين؛ لأن العشوائية تدخل في كثير من التمارين والمشاريع الصغيرة، وهي تجعل تعلم البرمجة أكثر متعة. بدل أن تكتب برنامجًا يعطي نفس النتيجة كل مرة، يمكنك أن تجعل البرنامج يختار رقمًا أو اسمًا أو سؤالًا أو ترتيبًا مختلفًا في كل تشغيل.
ما هي مكتبة random في Python؟
مكتبة random هي مكتبة قياسية تأتي مع Python، لذلك لا تحتاج إلى تثبيتها باستخدام pip. كل ما تحتاجه هو استدعاؤها داخل الكود باستخدام import random.
تُستخدم مكتبة random في مهام كثيرة، مثل:
- توليد رقم عشوائي.
- اختيار عنصر عشوائي من قائمة.
- خلط ترتيب عناصر قائمة.
- اختيار أكثر من عنصر عشوائي.
- بناء لعبة تخمين الرقم.
- اختيار سؤال عشوائي من مجموعة أسئلة.
- محاكاة القرعة أو الاختيار العشوائي.
- إنشاء أمثلة تدريبية متغيرة في كل مرة.
أبسط مثال:
import random
number = random.randint(1, 10)
print(number)
في كل مرة تشغل الكود، قد تحصل على رقم مختلف بين 1 و 10.
لماذا نستخدم random في Python؟
في البرامج العادية، أنت تكتب القيم بنفسك، فيكون الناتج معروفًا مسبقًا. لكن أحيانًا تحتاج أن يختار البرنامج شيئًا بطريقة غير ثابتة. مثلًا:
- لعبة تريد فيها أن يختار الكمبيوتر رقمًا سريًا.
- برنامج يريد اختيار اسم فائز من قائمة أسماء.
- تطبيق يعرض سؤالًا عشوائيًا من بنك أسئلة.
- برنامج يخلط ترتيب كلمات أو عناصر.
- تجربة تعليمية تريد فيها أرقامًا مختلفة في كل تشغيل.
هنا تأتي فائدة random، فهي تجعل البرنامج أكثر تفاعلًا وأقرب للمشاريع الحقيقية.
ملاحظة مهمة: مكتبةrandomمناسبة للتعلم، الألعاب، التجارب، والاختيارات العشوائية البسيطة. أما كلمات المرور الحساسة أو التشفير فتحتاج مكتبات أكثر أمانًا مثلsecrets. {alertWarning}
استدعاء مكتبة 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.
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 = [
"ما هي لغة Python؟",
"ما الفرق بين list و tuple؟",
"ما فائدة if في Python؟",
"كيف نطبع نصًا باستخدام 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، ستحصل على نفس التسلسل غالبًا. هذا مفيد عند شرح مثال أو اختبار كود.
معلومة للمبتدئين: استخدام 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
سيظهر خطأ لأن Python لا تعرف ما هو 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() |
توليد رقم عشري بين 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 عندما تحتاج إلى نتيجة غير ثابتة في كل تشغيل. مثلًا:
- اختيار رقم سري في لعبة.
- اختيار فائز من قائمة أسماء.
- اختيار سؤال عشوائي من بنك أسئلة.
- خلط ترتيب عناصر قائمة.
- اختيار عنصر تدريبي عشوائي.
- محاكاة رمي النرد أو القرعة.
- توليد بيانات عشوائية للتجربة.
لكن لا تستخدمها في الأشياء الأمنية الحساسة مثل كلمات المرور الحقيقية، رموز التأكيد، أو مفاتيح التشفير.
تمرين تطبيقي على 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 في Python للمبتدئين
- شرح الحلقات for و while في Python
- شرح if و else في Python للمبتدئين
- شرح القوائم Lists في Python للمبتدئين
- تعلم بايثون بالمثال
مصادر خارجية رسمية للتوسع
بعد فهم الأساسيات، يمكنك الرجوع إلى التوثيق الرسمي للتوسع أكثر:
الخلاصة
مكتبة random من أكثر مكتبات Python متعة وفائدة للمبتدئين، لأنها تساعدك على توليد أرقام عشوائية، اختيار عناصر من القوائم، خلط العناصر، وبناء مشاريع بسيطة مثل لعبة تخمين الرقم أو برنامج القرعة.
تعلمك لهذه المكتبة سيجعلك قادرًا على كتابة برامج أكثر تفاعلًا، بدل البرامج التي تعطي نفس النتيجة كل مرة. ابدأ بالدوال الأساسية مثل randint() و choice() و shuffle()، ثم جرّب بناء مشاريع صغيرة عليها.
الخلاصة العملية: استخدمrandint()لتوليد رقم صحيح، وchoice()لاختيار عنصر واحد، وsample()لاختيار عدة عناصر بدون تكرار، وshuffle()لخلط عناصر القائمة. {alertSuccess}
أسئلة شائعة مع إجاباتها
هل أحتاج إلى تثبيت مكتبة random؟
لا. مكتبة random من مكتبات Python القياسية، لذلك لا تحتاج إلى تثبيتها باستخدام pip. فقط اكتب import random.
ما فائدة مكتبة random في Python؟
تُستخدم مكتبة random لتوليد أرقام عشوائية، اختيار عناصر عشوائية من القوائم، خلط القوائم، وبناء برامج مثل الألعاب والقرعة والاختبارات العشوائية.
ما الفرق بين randint و randrange؟
randint(1, 10) يمكن أن يعطي الرقم 10، أما randrange(1, 10) فلا يعطي الرقم 10 لأنه يتبع فكرة range.
كيف أختار عنصرًا عشوائيًا من قائمة؟
استخدم choice():
import random
names = ["أحمد", "سارة", "محمد"]
name = random.choice(names)
print(name)
كيف أخلط عناصر قائمة في Python؟
استخدم shuffle():
import random
numbers = [1, 2, 3, 4]
random.shuffle(numbers)
print(numbers)
هل random مناسبة لتوليد كلمات مرور؟
للتدريب فقط يمكن استخدامها، لكن لكلمات المرور الحقيقية أو الأمور الأمنية استخدم مكتبة secrets لأنها مخصصة للأمان.
ما الفرق بين sample و choices؟
sample() تختار عدة عناصر بدون تكرار، بينما choices() يمكن أن تكرر العناصر في النتيجة.
هل يمكن استخدام random في الألعاب؟
نعم، وهي ممتازة للألعاب البسيطة مثل لعبة تخمين الرقم، رمي النرد، اختيار سؤال عشوائي، أو تحريك عناصر بطريقة عشوائية.




