if: نفّذ فقط إن تحقّق الشرط
age = 16
if age >= 18:
print("يمكنك التسجيل")
print("أهلًا بك")
print("هذا السطر يُنفَّذ دائمًا")
ثلاثة أشياء تصنع الشرط في بايثون:
- تعبير يُقيَّم إلى
TrueأوFalse:age >= 18. - نقطتان
:في نهاية سطرif. - إزاحة (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) لتكرار المهام.