تخطَّ إلى المحتوى

مشروع Python: لعبة تخمين الرقم

الدرس 16 من 25 · Python

أنهيت أساسيات Python! حان الوقت لتجمع كل ما تعلمته حتى الآن في مشروع حقيقي: لعبة يفكر فيها الكمبيوتر في رقم سري بين 1 و 100، وأنت تحاول تخمينه. بعد كل محاولة يخبرك البرنامج: «أكبر» أو «أصغر»، حتى تصل للرقم الصحيح. سنبني اللعبة خطوة بخطوة، وكل خطوة تستخدم مفهوماً من دروس سابقة.

الخطوة 1: الرقم العشوائي

Section titled “الخطوة 1: الرقم العشوائي”

نحتاج أن يختار الكمبيوتر رقماً لا نعرفه. Python فيها مكتبة (Module) جاهزة اسمها random للأرقام العشوائية. المكتبة مثل صندوق أدوات إضافي، نستدعيه بالكلمة import:

import random
secret = random.randint(1, 100)
print(secret)

الدالة randint(1, 100) تختار رقماً صحيحاً عشوائياً بين 1 و 100، والرقمان 1 و 100 داخلان (على عكس range). شغّل الكود عدة مرات، وستحصل على رقم مختلف كل مرة.

لنبدأ بأبسط نسخة: يخمّن المستخدم مرة واحدة، ونقارن تخمينه بالرقم السري:

import random
secret = random.randint(1, 100)
guess = int(input("خمّن الرقم: "))
if guess < secret:
print("أكبر من ذلك!")
elif guess > secret:
print("أصغر من ذلك!")
else:
print("صح! أحسنت")

هنا استخدمنا input وتحويل الأنواع، والشروط if و elif و else.

الخطوة 3: التكرار حتى الفوز

Section titled “الخطوة 3: التكرار حتى الفوز”

محاولة واحدة لا تكفي. نريد أن نكرر السؤال حتى يخمّن المستخدم الرقم الصحيح، ولا نعرف كم محاولة سيحتاج. إذن نستخدم while True مع break:

while True:
guess = int(input("تخمينك: "))
if guess < secret:
print("أكبر من ذلك!")
elif guess > secret:
print("أصغر من ذلك!")
else:
print("صح! أحسنت")
break

لنجعل اللعبة أكثر تحدياً، نعدّ عدد المحاولات بمتغير يبدأ من صفر، ونزيده بعد كل تخمين:

attempts = 0
while True:
guess = int(input("تخمينك: "))
attempts += 1
...

الخطوة 5: حماية اللعبة من الأخطاء

Section titled “الخطوة 5: حماية اللعبة من الأخطاء”

ماذا لو كتب المستخدم «عشرة» بدلاً من 10؟ ستتوقف اللعبة بخطأ ValueError. نحميها بـ try و except، ونستخدم continue لإعادة السؤال دون احتساب محاولة. ونتأكد أيضاً أن الرقم بين 1 و 100.

guess.py
import random
secret = random.randint(1, 100)
attempts = 0
print("فكرت في رقم بين 1 و 100. حاول أن تخمّنه!")
while True:
text = input("تخمينك: ")
try:
guess = int(text)
except ValueError:
print("من فضلك اكتب رقماً صحيحاً")
continue
if guess < 1 or guess > 100:
print("الرقم يجب أن يكون بين 1 و 100")
continue
attempts += 1
if guess < secret:
print("أكبر من ذلك!")
elif guess > secret:
print("أصغر من ذلك!")
else:
print(f"صح! الرقم هو {secret}، وعرفته في {attempts} محاولات")
break

مثال على جولة لعب (لنفترض أن الرقم السري كان 42):

الناتج
فكرت في رقم بين 1 و 100. حاول أن تخمّنه!
تخمينك: 50
أصغر من ذلك!
تخمينك: 25
أكبر من ذلك!
تخمينك: عشرة
من فضلك اكتب رقماً صحيحاً
تخمينك: 37
أكبر من ذلك!
تخمينك: 42
صح! الرقم هو 42، وعرفته في 4 محاولات

لاحظ أن «عشرة» لم تُحسب محاولة، لأن continue أعادت السؤال قبل سطر attempts += 1.

ماذا استخدمنا من الكورس؟

Section titled “ماذا استخدمنا من الكورس؟”
  • المتغيرات لحفظ الرقم السري وعدد المحاولات.
  • input وتحويل الأنواع لقراءة التخمين.
  • الشروط للمقارنة وتحديد «أكبر» أو «أصغر».
  • حلقة while True مع break و continue.
  • try و except لحماية اللعبة من الإدخال الخاطئ.
  • f-strings لرسالة الفوز.
  • مكتبة random للرقم العشوائي.

جرّب بنفسك: طوّر اللعبة

Section titled “جرّب بنفسك: طوّر اللعبة”

انسخ الكود في ملف guess.py وشغّله والعب عدة جولات. ثم جرّب هذه التطويرات واحداً تلو الآخر:

  1. حد أقصى للمحاولات: إذا وصل المستخدم إلى 7 محاولات بدون فوز، أخبره بالرقم وأنهِ اللعبة.
  2. مستويات صعوبة: اسأل المستخدم في البداية عن المستوى: سهل (1 إلى 10)، أو متوسط (1 إلى 100)، أو صعب (1 إلى 1000).
  3. العب مرة أخرى: بعد الفوز اسأل «هل تريد اللعب مرة أخرى؟»، وضع اللعبة كلها داخل حلقة أكبر.
  4. أفضل نتيجة: احفظ أقل عدد محاولات حققه اللاعب عبر الجولات.
  • وضع random.randint داخل الحلقة: سيتغير الرقم السري مع كل تخمين، فتصبح اللعبة مستحيلة! اختره مرة واحدة قبل الحلقة.
  • زيادة العدّاد قبل التحقق من الإدخال: ستُحسب المحاولات الخاطئة. ضع attempts += 1 بعد التأكد من صحة الرقم.
  • نسيان break عند الفوز: تستمر اللعبة في السؤال للأبد.

سؤال

ما الأرقام الممكنة من random.randint(1, 6)؟

سؤال

لماذا استخدمنا continue بعد خطأ الإدخال؟

  • import random ثم random.randint(أ, ب) يعطيك رقماً عشوائياً يشمل الطرفين.
  • while True مع break مثالية لتكرار السؤال حتى يتحقق الهدف.
  • try و except مع continue تحمي البرنامج من الإدخال الخاطئ.
  • المشاريع الحقيقية تجمع عدة مفاهيم بسيطة معاً.
  • اختر الرقم العشوائي مرة واحدة خارج الحلقة.