مشروع مصغّر: لعبة تخمين الرقم — أساسيات 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
اختبر فهمك