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

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

تُستخدم مكتبة 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()

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

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

شرح خلط عناصر القائمة في بايثون باستخدام 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 ثم تنفيذ الاستدعاءات نفسها، تحصل على تسلسل قابل للتكرار. وهذا مفيد أثناء الشرح والاختبارات وتصحيح الأخطاء.

معلومة للمبتدئين: مكتبة 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 في بايثون

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

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

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

  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 في بايثون تمنحك الأدوات الأساسية لتوليد أرقام عشوائية، اختيار عناصر من القوائم، اختيار عينات، وخلط العناصر. وهي مناسبة للألعاب والتمارين والمحاكاة والمشاريع التعليمية.

ابدأ بـ 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 في الألعاب؟

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

إرسال تعليق

أحدث أقدم