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

🐍 شرح Python

الشروط (if / elif / else)

الدرس 7 من 29· ⏱ 3 دقائق قراءة· 🗓 آخر تحديث: ١٨ أكتوبر ٢٠٢٦

if: نفّذ فقط إن تحقّق الشرط

age = 16

if age >= 18:
    print("يمكنك التسجيل")
    print("أهلًا بك")
print("هذا السطر يُنفَّذ دائمًا")

ثلاثة أشياء تصنع الشرط في بايثون:

  1. تعبير يُقيَّم إلى True أو False: age >= 18.
  2. نقطتان : في نهاية سطر if.
  3. إزاحة (Indentation) بأربع مسافات لكل سطر تابع للشرط. لا أقواس معقوفة: الإزاحة هي الكتلة. أول سطر يعود لبداية السطر يعني أن الكتلة انتهت (درس بناء الجملة).

else وelif

score = 85

if score >= 90:
    grade = "ممتاز"
elif score >= 80:
    grade = "جيد جدًا"
elif score >= 65:
    grade = "جيد"
else:
    grade = "يحتاج تحسينًا"

print(grade)   # جيد جدًا

تُفحص الشروط من الأعلى للأسفل، ويُنفَّذ أول فرع صحيح فقط ثم تنتهي السلسلة. لذلك لم نكتب score >= 80 and score < 90: الوصول لـ elif الثانية يعني أن الأولى خاطئة. والترتيب مهم: لو بدأت بـ score >= 65، لحصل صاحب 95 على "جيد".

المقارنة والمنطق

age = 25
has_id = True
city = "عمّان"

if age >= 18 and has_id:
    print("مسموح بالدخول")

if age < 12 or age > 65:
    print("خصم خاص")

if not has_id:
    print("أحضر هويتك")

if city in ("عمّان", "إربد", "الزرقاء"):
    print("التوصيل متاح")

العوامل كلها (== و!= و< وand وor وnot وin) في درس العوامل. وأداتان تجعلان الشروط أقرب للغة العادية:

x = 15
if 10 <= x <= 20:           # مقارنة متسلسلة: بين 10 و20
    print("في النطاق")

name = ""
if not name:                # الصواب الضمني: النص الفارغ خاطئ
    print("الاسم مطلوب")

if not name: تغطي "" وNone معًا، وهي الأسلوب المعتاد في بايثون بدل if name == "": (القيم الخاطئة في درس المتغيرات).

الشرط في سطر واحد

age = 20
status = "بالغ" if age >= 18 else "قاصر"
print(status)

التعبير الشرطي يعيد قيمة، فيناسب الاختيار بين قيمتين. أما سلسلة من ثلاث حالات أو أكثر، فاكتبها if/elif عادية: سطر شرطي داخل سطر شرطي صعب القراءة.

شروط متداخلة أم مبكّرة؟

def can_withdraw(balance, amount, is_active):
    if not is_active:
        return "الحساب موقوف"
    if amount <= 0:
        return "مبلغ غير صالح"
    if amount > balance:
        return "الرصيد لا يكفي"
    return "تم"

print(can_withdraw(100, 50, True))
print(can_withdraw(100, 500, True))

ثلاثة if متداخلة داخل بعضها تدفع الكود يمينًا وتصعّب قراءته. فحص الحالات المرفوضة أولًا والخروج منها يُبقي المسار الطبيعي واضحًا في الأسفل. (def وreturn في درس الدوال.)

pass: كتلة فارغة مؤقّتًا

age = 30
if age > 100:
    pass          # TODO: سنعالج هذه الحالة لاحقًا
else:
    print("عمر طبيعي")

بايثون لا تقبل كتلة فارغة بعد :، فـ pass تقول "لا شيء هنا الآن".

مثال: حاسبة رسوم الشحن

weight = 3.2      # كغ
express = True
country = "الأردن"

if country != "الأردن":
    fee = 15
elif weight <= 1:
    fee = 2
elif weight <= 5:
    fee = 4
else:
    fee = 4 + (weight - 5) * 0.5

if express:
    fee *= 1.5

print(f"رسوم الشحن: {fee:.2f} دينار")   # 6.00

ولمقارنة قيمة واحدة بقيم ثابتة كثيرة (if status == 200 ... elif status == 404 ...)، توجد صيغة أوضح: جملة match.

جرّب بنفسك

🐍 محرّر بايثون
📥 المدخلات (input) — قيمة في كل سطر
وحدة التحكّم
اضغط «تشغيل» لرؤية النتيجة هنا.

أخطاء شائعة

  • نسيان : بعد if أو elif أو else: SyntaxError: expected ':'.
  • إزاحة غير متناسقة: سطر بثلاث مسافات وآخر بأربع، أو خلط Tab بالمسافات: IndentationError.
  • = بدل ==: if age = 18: خطأ نحوي في بايثون، وهذا يحميك.
  • if x == 1 or 2: تعني (x == 1) or 2، و2 صحيحة دائمًا، فالشرط صحيح دائمًا. الصحيح if x in (1, 2):.
  • else if بدل elif: خطأ نحوي (SyntaxError).
  • ترتيب elif من الأوسع للأضيق: الفرع الأوسع يبتلع البقية.

🎯 التالي: الحلقات (Loops) لتكرار المهام.

شرح الشروط (if / elif / else) — Python بالعربي
الشروط (if / elif / else) — Python بالعربي · The Code Fix

📚 لمزيد من التعمّق في Python، راجِع التوثيق الرسمي لـ Python.

هل كان هذا الدرس مفيدًا؟