أساسيات بايثون 28: شرح مكتبة random في Python لتوليد الأرقام والاختيارات العشوائية

أساسيات بايثون 28 شرح مكتبة random في Python للمبتدئين

في الدرس السابق من كورس أساسيات بايثون تعلمنا استخدام مكتبة 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

شرح توليد رقم عشوائي في Python باستخدام 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

مثال اختيار عنصر عشوائي من قائمة في Python باستخدام random.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

شرح خلط عناصر القائمة في Python باستخدام random.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

أخطاء شائعة عند استخدام مكتبة random في Python مثل نسيان import

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

حاول تنفيذ التمرين التالي:

  1. أنشئ ملفًا باسم random_practice.py.
  2. استدع مكتبة random.
  3. أنشئ قائمة تحتوي على 5 أسماء.
  4. اختر اسمًا عشوائيًا من القائمة.
  5. ولّد رقمًا عشوائيًا بين 1 و 100.
  6. اخلط ترتيب القائمة.
  7. اطبع النتائج للمستخدم.

الحل المقترح:

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)

روابط داخلية مفيدة من بايثون العرب

لفهم هذا الدرس بشكل أفضل، يمكنك مراجعة هذه الدروس من موقع بايثون العرب:

مصادر خارجية رسمية للتوسع

بعد فهم الأساسيات، يمكنك الرجوع إلى التوثيق الرسمي للتوسع أكثر:

الخلاصة

مكتبة 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 في الألعاب؟

نعم، وهي ممتازة للألعاب البسيطة مثل لعبة تخمين الرقم، رمي النرد، اختيار سؤال عشوائي، أو تحريك عناصر بطريقة عشوائية.

إرسال تعليق

أحدث أقدم