- أهمية الدرس: تسمح الجمل الشرطية للبرنامج باختيار ما ينفذه بناءً على البيانات. وبدل أن يتبع المسار نفسه دائمًا، يستطيع التعامل مع النجاح والفشل، والسماح والمنع، والحالات المختلفة.
- ماذا ستتعلم:
- بناء شروط تنتج
TrueأوFalse. - استخدام
ifوelseلتحديد مسارين. - استخدام
elifللقرارات متعددة الحالات. - دمج الشروط باستخدام
andوorوnot. - فهم أثر ترتيب الشروط والمسافات البادئة وتحويل المدخلات.
- بناء شروط تنتج
القرار يبدأ بسؤال منطقي
يحتاج البرنامج قبل اتخاذ القرار إلى شرط يمكن تقييمه. تكون نتيجة الشرط قيمة منطقية واحدة: True إذا تحقق، أو False إذا لم يتحقق.
| العامل | السؤال الذي يطرحه | مثال عند age = 20 |
|---|---|---|
== |
هل القيمتان متساويتان؟ | age == 20 تعطي True |
!= |
هل القيمتان غير متساويتين؟ | age != 25 تعطي True |
> و< |
هل القيمة أكبر أو أصغر؟ | age < 20 تعطي False |
>= و<= |
هل تشمل المقارنة الحد نفسه؟ | age >= 20 تعطي True |
لا تعني = المقارنة؛ فهي تسند قيمة إلى متغير. لذلك يسبب الشرط if name = "Ali": خطأ، والصحيح للمقارنة هو if name == "Ali":.
if تنفذ كتلة عند تحقق الشرط
تختبر if الشرط، وتنفذ الكود التابع لها فقط عندما تكون نتيجته True.
age = 22
if age >= 18:
print("مسموح بالدخول")
print("انتهى التحقق")
- تنتهي جملة الشرط بنقطتين رأسيتين
:. - تحدد المسافة البادئة الكود الموجود داخل كتلة
if. - السطر غير المزاح إلى الداخل يقع خارج الكتلة، ولذلك يُنفذ سواء تحقق الشرط أم لا.
المسافة البادئة ليست شكلًا تجميليًا في بايثون؛ بل تحدد بنية البرنامج. ويُستخدم عادةً مقدار أربع مسافات لكل مستوى.
إذا كان الشرط False ولم يوجد فرع بديل، تتجاوز بايثون الكتلة وتتابع تنفيذ السطور التي بعدها.
if وelse: مساران لا يجتمعان
تضيف else مسارًا بديلًا يعمل عندما لا يتحقق شرط if.
score = 45
if score >= 50:
print("ناجح")
else:
print("لم ينجح")
في هذا البناء يُنفذ فرع واحد فقط: فرع if عند صحة الشرط، أو فرع else عند خطئه.
انتبه إلى الحد
الشرط score >= 50 يشمل الدرجة 50، أما score > 50 فلا يشملها. اختيار العامل الصحيح جزء من تعريف القرار، وليس مجرد اختلاف في الكتابة.
elif وترتيب الفروع
تستخدم elif عندما توجد أكثر من حالتين. تفحص بايثون الشروط من الأعلى إلى الأسفل، وتتوقف عند أول شرط صحيح، ثم تتجاوز بقية السلسلة.
score = 85
if score >= 90:
grade = "ممتاز"
elif score >= 80:
grade = "جيد جدًا"
elif score >= 70:
grade = "جيد"
else:
grade = "مقبول"
القيمة 85 لا تحقق الشرط الأول، لكنها تحقق score >= 80، فتُسند القيمة "جيد جدًا" ولا تُفحص الفروع التالية.
لهذا يجب ترتيب الحدود بعناية. عند تصنيف الدرجات تبدأ الشروط من الأعلى إلى الأدنى؛ فلو وُضع score >= 60 أولًا، فسيتحقق أيضًا للدرجة 95 ويمنع الوصول إلى تقدير ممتاز.
يفضل وضع فحص القيم غير الصالحة قبل التصنيف، مثل score > 100 or score < 0، حتى لا تحصل قيمة غير منطقية على تقدير عادي.
دمج الشروط بالعوامل المنطقية
عندما يعتمد القرار على أكثر من سؤال، تُستخدم العوامل المنطقية لربط النتائج.
and: تكون النتيجة صحيحة عندما تتحقق كل الشروط.or: تكون النتيجة صحيحة عندما يتحقق شرط واحد على الأقل.not: تعكس القيمة المنطقية؛ فتحول الصحيح إلى خطأ والخطأ إلى صحيح.
age = 25
has_license = False
print(age >= 18 and has_license) # False
is_logged_in = False
if not is_logged_in:
print("يرجى تسجيل الدخول")
في المثال الأول تحقق شرط العمر، لكن has_license كانت False؛ لذلك أعطى and النتيجة False.
يمكن استخدام or لفحص قيمة خارج نطاق، مثل score > 100 or score < 0؛ يكفي أن تتجاوز القيمة أحد الحدين حتى تكون غير صالحة.
من إدخال المستخدم إلى القرار
تعيد input() نصًا، لذلك يجب تحويل المدخل قبل مقارنته بعدد. لا تنجح مقارنة age_str > 18 إذا كانت age_str نصًا والحد 18 عددًا.
age = int(input("أدخل عمرك: "))
if age >= 18:
print("Adult")
else:
print("Minor")
عند إدخال 19 تمر البيانات بثلاث مراحل: تعيد input() النص "19"، وتحوله int() إلى العدد 19، ثم تنتج المقارنة 19 >= 18 القيمة True.
طريقة عملية لتتبع أي شرط
- حدد القيم وأنواعها قبل الشرط.
- احسب نتيجة كل مقارنة على حدة.
- ادمج النتائج إذا وُجد
andأوorأوnot. - اتبع أول فرع يسمح به الناتج.
التمارين المرتبطة بهذا الدرس
- التمرين الأول: الشروط ومسارات التنفيذ
- التمرين الثاني: استنتاج نتائج الشروط
