الشروط في بايثون: علّم برنامجك أن يقرّر بنفسه
تعلّم الشروط في بايثون: المقارنات والقيم المنطقية True و False، وجمل if و elif و else، وربط الشروط بـ and و or و not.
في لعبتك المفضّلة، عندما تجمع 100 نقطة تنتقل إلى المستوى التالي. وإذا خسرت كل القلوب، تظهر شاشة “انتهت اللعبة”. كيف تعرف اللعبة متى تفعل كل شيء؟ إنها تسأل نفسها أسئلة، ثم تقرّر. في هذا الدرس ستعلّم برنامجك أن يسأل ويقرّر بنفسه.
🎯 ماذا ستتعلم؟
بنهاية هذا الدرس ستكون قادرًا على:
- مقارنة قيمتين والحصول على
TrueأوFalse. - كتابة جملة
ifلتنفيذ كود عند تحقّق شرط. - استخدام
elifوelseلاختيار مسار واحد من عدّة مسارات. - ربط أكثر من شرط بـ
andوorوnot. - التحقّق من وجود عنصر في قائمة بـ
in.
🧰 ماذا تحتاج قبل أن تبدأ؟
يجب أن تعرف المتغيّرات وأنواع البيانات، وأن تكون رأيت القائمة من قبل. إن احتجت مراجعة، اقرأ المتغيّرات وأنواع البيانات في بايثون ثم القوائم في بايثون. ويفيدك أيضًا درس العمليات الأساسية. كل الأمثلة تعمل في مترجم بايثون في المتصفح بدون تثبيت.
الفكرة ببساطة
تخيّل أنك تقف أمام باب المدرسة في الصباح. تسأل نفسك: “هل السماء تمطر؟”. إذا كان الجواب نعم، تفتح المظلّة. وإذا كان الجواب لا، تمشي بدون مظلّة.
هذا بالضبط ما يفعله الشرط (condition) في بايثون. البرنامج يطرح سؤالًا جوابه نعم أو لا، ثم ينفّذ كودًا مختلفًا حسب الجواب.
وفي بايثون، “نعم” اسمها True و“لا” اسمها False. هاتان القيمتان تسمّيان القيم المنطقية (boolean)، وهما أساس كل قرار يتّخذه برنامجك.
الخطوة 1: المقارنة تعطيك True أو False
قبل أن تقرّر، تحتاج أن تسأل. السؤال في بايثون هو المقارنة (comparison). مثلًا: هل نقاطي تساوي 100؟ هل درجتي أكبر من 50؟
score = 100
print(score == 100)
print(score == 50)
print(score > 50)
True
False
True
لاحظ علامة == بعلامتي يساوي. علامة واحدة = تعني “ضع القيمة في المتغيّر”، أما == فتعني “هل القيمتان متساويتان؟”. هذا الفرق يخلط فيه كل المبتدئين، فانتبه له.
إليك جدول المقارنات التي ستستخدمها:
| العلامة | معناها | مثال | النتيجة |
|---|---|---|---|
== |
يساوي | 5 == 5 |
True |
!= |
لا يساوي | 5 != 3 |
True |
> |
أكبر من | 3 > 7 |
False |
< |
أصغر من | 3 < 7 |
True |
>= |
أكبر من أو يساوي | 7 >= 7 |
True |
<= |
أصغر من أو يساوي | 8 <= 7 |
False |
ويمكنك مقارنة النصوص أيضًا. هنا نتحقّق هل اليوم هو يوم الجمعة:
day = "الجمعة"
print(day == "الجمعة")
print(day != "السبت")
True
True
الخطوة 2: جملة if
الآن صار عندك سؤال جوابه True أو False. جملة if تقول: “إذا كان الجواب True، نفّذ الأسطر التي تحتي”.
score = 120
if score >= 100:
print("مبروك! انتقلت إلى المستوى التالي 🎉")
print("انتهى البرنامج")
مبروك! انتقلت إلى المستوى التالي 🎉
انتهى البرنامج
انظر إلى ثلاثة أشياء في هذا الكود:
- بعد
ifنكتب الشرط، ثم نقطتين رأسيتين:. - السطر الذي ينتمي إلى
ifيبدأ بأربع مسافات. هذه المسافة البادئة (indentation) هي طريقة بايثون لمعرفة ما بداخل الشرط. - السطر الأخير بدون مسافة بادئة، لذلك يُنفَّذ دائمًا، سواء تحقّق الشرط أم لا.
جرّب أن تغيّر score إلى 80. سترى أن رسالة التهنئة اختفت، وبقي سطر “انتهى البرنامج”.
الخطوة 3: else عندما لا يتحقّق الشرط
ماذا لو أردت أن تطبع رسالة أخرى عندما يكون الشرط False؟ هنا تأتي else، ومعناها “وإلّا”.
temperature = 18
if temperature >= 25:
print("الجو حار، خذ معك ماء 💧")
else:
print("الجو لطيف، استمتع بيومك")
الجو لطيف، استمتع بيومك
البرنامج ينفّذ واحدًا من المسارين فقط. إن كانت الحرارة 25 أو أكثر، يطبع تحذير الماء. وإلّا يطبع الرسالة الثانية. لا يمكن أن يطبع الاثنين معًا.
الخطوة 4: elif لأكثر من احتمال
أحيانًا يكون عندك أكثر من احتمالين. مثلًا تقدير الدرجات: ممتاز، جيد جدًا، جيد، أو راسب. هنا تستخدم elif، وهي اختصار “else if” أي “وإلّا إذا”.
grade = 85
if grade >= 90:
print("ممتاز 🌟")
elif grade >= 80:
print("جيد جدًا")
elif grade >= 60:
print("جيد")
else:
print("تحتاج إلى مراجعة الدرس")
جيد جدًا
بايثون تفحص الشروط بالترتيب من الأعلى. الدرجة 85 ليست 90 أو أكثر، فتنتقل إلى الشرط الثاني. 85 أكبر من 80، فتطبع “جيد جدًا” وتتوقّف. الشروط التي بعدها لا تُفحص أبدًا.
لهذا الترتيب مهم جدًا. لو وضعت grade >= 60 في الأعلى، لكانت كل الدرجات من 60 فما فوق تحصل على “جيد” فقط.
🚀 للمتقدمين: تستطيع كتابة مقارنة مزدوجة مثل
60 <= grade < 80في شرط واحد. بايثون تفهمها كما في الرياضيات: هل الدرجة بين 60 و 80؟ جرّبها بدل الشروط المتسلسلة.
الخطوة 5: ربط الشروط بـ and و or و not
ماذا لو كان القرار يعتمد على سؤالين معًا؟ لدخول ملعب كرة القدم مثلًا، يجب أن يكون معك تذكرة و أن يكون عمرك 12 أو أكثر. الكلمة and تعني “و”، ولا تعطي True إلا إذا تحقّق الشرطان معًا.
age = 14
has_ticket = True
if age >= 12 and has_ticket:
print("تفضّل بالدخول إلى الملعب ⚽")
else:
print("عذرًا، لا يمكنك الدخول")
تفضّل بالدخول إلى الملعب ⚽
لاحظ أن has_ticket قيمة منطقية جاهزة، فلا نحتاج أن نكتب has_ticket == True. الشرط if has_ticket يكفي.
أما or فتعني “أو”، وتعطي True إذا تحقّق شرط واحد على الأقل. هنا نتحقّق هل اليوم عطلة:
day = "السبت"
if day == "الجمعة" or day == "السبت":
print("اليوم عطلة، وقت اللعب 🎮")
else:
print("اليوم دراسة")
اليوم عطلة، وقت اللعب 🎮
والكلمة not تقلب الجواب. not True تصبح False، وnot False تصبح True. تفيدك عندما تريد فعل شيء لأن الشرط لم يتحقّق:
finished_homework = False
if not finished_homework:
print("أنهِ واجبك أولًا ثم العب 📚")
أنهِ واجبك أولًا ثم العب 📚
الخطوة 6: هل العنصر موجود؟ استخدم in
عندك قائمة بأسماء الطلاب المشتركين في الرحلة. كيف تعرف هل اسم معيّن بينهم؟ بدل مقارنات كثيرة بـ or، استخدم in التي تعني “موجود في”.
trip_students = ["سالم", "نورة", "خالد", "ليلى"]
name = "نورة"
if name in trip_students:
print(name, "مشتركة في الرحلة 🚌")
else:
print(name, "غير مشتركة")
نورة مشتركة في الرحلة 🚌
تعمل in مع النصوص أيضًا. الشرط "ب" in "بايثون" يعطي True لأن الحرف موجود في الكلمة.
🚀 للمتقدمين: كل قيمة في بايثون لها “وزن منطقي”. القائمة الفارغة
[]والنص الفارغ""والرقم0كلها تُعامل كـFalse. لذلكif trip_students:تعني “هل القائمة فيها عناصر؟”. وهناك أيضًاisالتي تفحص هل المتغيّران هما الشيء نفسه في الذاكرة، لا هل قيمتاهما متساويتان. جرّبx = [1, 2]ثمy = [1, 2]واطبعx == yوx is y. ستحصل علىTrueثمFalse، لأنهما قائمتان مختلفتان بمحتوى متطابق.
⚠️ أخطاء شائعة
هذه الأخطاء يقع فيها الجميع في البداية، ورؤيتها الآن ستوفّر عليك وقتًا طويلًا لاحقًا.
1. علامة يساوي واحدة في الشرط
❌
score = 100
if score = 100:
print("فزت")
SyntaxError: invalid syntax
العلامة = للتخزين، و== للمقارنة. داخل الشرط استخدم دائمًا ==:
# ✅
score = 100
if score == 100:
print("فزت")
فزت
2. نسيان النقطتين أو المسافة البادئة
❌
age = 15
if age >= 12
print("مسموح")
SyntaxError: expected ':'
بعد الشرط لا بدّ من :، وبعدها لا بدّ من مسافة بادئة في السطر التالي:
# ✅
age = 15
if age >= 12:
print("مسموح")
مسموح
3. مقارنة رقم بنص
❌
grade = "85"
if grade >= 80:
print("جيد جدًا")
TypeError: '>=' not supported between instances of 'str' and 'int'
النص “85” بين علامتي تنصيص ليس رقمًا. حوّله إلى رقم أولًا بـ int()، أو اكتبه رقمًا من البداية:
# ✅
grade = int("85")
if grade >= 80:
print("جيد جدًا")
جيد جدًا
🧪 جرّب بنفسك
التحدي 1: هل يمكنني اللعب؟
عندك متغيّر لعدد ساعات الدراسة اليوم. اطبع “يمكنك اللعب الآن” إذا درست ساعتين أو أكثر، وإلّا اطبع “ادرس قليلًا بعد”.
study_hours = 3
# اكتب الشرط هنا
print(study_hours)
3
💡 اضغط لرؤية الحل
study_hours = 3
if study_hours >= 2:
print("يمكنك اللعب الآن")
else:
print("ادرس قليلًا بعد")
يمكنك اللعب الآن
التحدي 2: مستوى اللاعب
حوّل نقاط اللاعب إلى مستوى: 0 إلى 49 “مبتدئ”، 50 إلى 99 “محترف”، 100 فأكثر “أسطورة”. استخدم if و elif و else. تذكّر أن الترتيب مهم.
points = 75
# اطبع المستوى المناسب
print(points)
75
💡 اضغط لرؤية الحل
points = 75
if points >= 100:
print("أسطورة")
elif points >= 50:
print("محترف")
else:
print("مبتدئ")
محترف
التحدي 3: بوّابة الرحلة
عندك قائمة بأسماء المشتركين في الرحلة، واسم طالب، وهل دفع الرسوم. اطبع “مرحبًا بك في الحافلة” فقط إذا كان اسمه في القائمة و دفع الرسوم. وإلّا اطبع “راجع المعلّم”.
trip_students = ["سالم", "نورة", "خالد"]
name = "خالد"
paid = True
# اكتب الشرط المركّب هنا
print(name)
خالد
💡 اضغط لرؤية الحل
trip_students = ["سالم", "نورة", "خالد"]
name = "خالد"
paid = True
if name in trip_students and paid:
print("مرحبًا بك في الحافلة")
else:
print("راجع المعلّم")
مرحبًا بك في الحافلة
✅ اختبر نفسك
-
ماذا يطبع
print(7 != 7)؟- أ)
True - ب)
False - ج) خطأ
- أ)
-
عندك
if x > 10:ثمelif x > 5:ثمelse:. إذا كانتx = 20، كم سطرًا من الثلاثة يُنفَّذ؟- أ) سطر واحد فقط
- ب) سطران
- ج) الثلاثة
-
صح أم خطأ: الشرط
True or FalseنتيجتهFalse.
💡 اضغط لرؤية الإجابات
- ب)
False، لأن 7 يساوي 7، فعبارة “لا يساوي” غير صحيحة. - أ) سطر واحد فقط. بايثون تنفّذ أول شرط يتحقّق ثم تتجاهل الباقي.
- خطأ.
orتعطيTrueإذا تحقّق أحد الطرفين، وTrueمتحقّق.
📝 الخلاصة
- المقارنة مثل
==و>و<تعطيك قيمة منطقية:TrueأوFalse. ifتنفّذ الكود الذي تحتها فقط عندما يكون الشرطTrue.elifوelseتعطيك مسارات إضافية، وبايثون تختار أول مسار يتحقّق.andتحتاج أن يتحقّق الشرطان، وorتكتفي بواحد، وnotتقلب النتيجة.inتتحقّق هل العنصر موجود في قائمة أو نص.
⏭️ الخطوة التالية
صار برنامجك يقرّر بنفسه. جرّب أن تكتب برنامجًا يحوّل درجة الحرارة إلى نصيحة ملابس، أو يحدّد هل تستطيع شراء لعبة بمصروفك. وفي الدرس القادم ستتعلّم الحلقات في بايثون، وهي التي تجعل برنامجك يكرّر الشيء نفسه مئات المرات بدون أن تكتبه مرتين. إلى ذلك الحين، افتح مترجم بايثون وغيّر قيم الأمثلة لترى كيف يتغيّر القرار.