Kodax

مشروع مصغّر: لعبة تخمين الرقم — أساسيات Python

مشروع مصغّر: لعبة تخمين الرقم

حان وقت جمع ما تعلمته في برنامج حقيقي. سنبني لعبة يختار فيها الحاسوب رقماً عشوائياً ويحاول اللاعب تخمينه.

المتطلبات

1. يختار البرنامج رقماً سرياً بين 1 و 100.

2. يطلب من اللاعب تخميناً، ويخبره: "أكبر" أو "أصغر".

3. يتجاهل الإدخال غير الرقمي دون أن يتوقف البرنامج.

4. يحدّ المحاولات بـ 7، ويعرض الرقم إذا خسر اللاعب.

5. يعرض عدد المحاولات عند الفوز، ويسأل: هل تريد اللعب مرة أخرى؟

التخطيط قبل الكود

قبل الكتابة، قسّم المشكلة:

- الحالة: الرقم السري، عدد المحاولات، هل فاز اللاعب.

- الحلقة: while تستمر حتى يفوز أو تنفد المحاولات.

- القرار: if / elif / else لمقارنة التخمين بالسر.

- الحماية: isdigit() قبل التحويل إلى رقم.

الخطوة 1: الرقم السري

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

الخطوة 2: حلقة المحاولات

attempts = 0
max_attempts = 7
while attempts < max_attempts:
    guess_text = input("خمّن الرقم: ")
    if not guess_text.isdigit():
        print("أدخل رقماً صحيحاً")
        continue          # لا تُحتسب محاولة
    guess = int(guess_text)
    attempts += 1
    ...

الخطوة 3: المقارنة والفوز

استخدم break عند الفوز، و else الخاصة بالحلقة لرسالة الخسارة (تُنفَّذ فقط إذا انتهت المحاولات دون break).

الخطوة 4: اللعب مرة أخرى

ضع اللعبة كلها داخل while True خارجية، واخرج بـ break إذا أجاب اللاعب بغير "نعم".

لماذا `random.seed` في المثال؟

لجعل النتيجة قابلة للتكرار عند الاختبار فقط؛ احذف السطر لتصبح اللعبة عشوائية فعلاً.

أفكار للتطوير

- مستويات صعوبة (1–10، 1–100، 1–1000) مع عدد محاولات مختلف.

- تلميح "قريب جداً" إذا كان الفرق أقل من 5.

- حفظ أفضل نتيجة.

ما الذي تدربت عليه؟

الإدخال والتحويل، الشروط المتعددة، while مع break و continue و else، الوحدات الجاهزة (random)، ومتغيرات الحالة.

import random

random.seed(1)  # لجعل النتائج قابلة للتكرار أثناء الاختبار فقط

def play_round():
    secret = random.randint(1, 100)
    max_attempts = 7
    attempts = 0
    while attempts < max_attempts:
        guess_text = input(f"المحاولة {attempts + 1}/{max_attempts} - خمّن الرقم: ")
        if not guess_text.isdigit():
            print("أدخل رقماً صحيحاً (لن تُحتسب محاولة)")
            continue
        guess = int(guess_text)
        attempts += 1
        if guess < secret:
            print("أكبر ⬆️")
        elif guess > secret:
            print("أصغر ⬇️")
        else:
            print(f"أحسنت! وجدت الرقم في {attempts} محاولات 🎉")
            break
    else:
        print(f"انتهت المحاولات. الرقم كان {secret}")

while True:
    play_round()
    again = input("هل تريد اللعب مرة أخرى؟ (نعم/لا): ").strip()
    if again != "نعم":
        print("شكراً للعب!")
        break
اختبر فهمك