لا تخلو لغة برمجة من التعليمات الشرطية التي تُنفَّذ بناءً على تحقق شرط معين، وهي تعليمات برمجية يمكنها التحكم في تنفيذ شفرات معينة بحسب تحقق شرط ما من عدمه في وقت التنفيذ.
تُنفّذ تعليمات برامج بايثون من الأعلى إلى الأسفل، مع تنفيذ كل سطر بحسب ترتيبه. باستخدام التعليمات الشرطية، يمكن للبرامج التحقق من استيفاء شروط معينة، ومن ثم تنفيذ الشيفرة المقابلة.
هذه بعض الأمثلة التي سنستخدم فيها التعليمات الشرطية:
- إن حصلت الطالبة على أكثر من 65٪ في الامتحان، فأعلن عن نجاحها؛ وإلا، فأعلن عن رسوبها
- إذا كان لديه مال في حسابه، فاحسب الفائدة. وإلا، فاحسب غرامة
- إن اشتروا 10 برتقالات أو أكثر، فاحسب خصمًا بمقدار 5٪؛ وإلا فلا تفعل
تقيِّم الشيفرة الشرطية شروطًا، ثم تُنفِّذ شيفرةً بناءً على ما إذا تحققت تلك الشروط أم لا. ستتعلم في هذا الدرس كيفية كتابة التعليمات الشرطية في بايثون.
التعليمة if
سنبدأ بالتعليمة if
، والتي تتحقق مما إذا تحقق شرط محدَّد أم لا، وفي حال تحقق الشرط، فستنفَّذ الشيفرة المقابلة له.
لنبدأ بأمثلة عملية توضح ذلك. افتح ملفًا، واكتب الشيفرة التالية:
grade = 70 if grade >= 65: print("درجة النجاح")
أعطينا للمتغير grade
القيمة 70
. ثم استخدمنا التعليمة if
لتقييم ما إذا كان المتغير grade
أكبر من (>=
) أو يساوي 65
. وفي تلك الحالة، سيطبع البرنامج السلسلة النصية التالية: درجة النجاح
.
احفظ البرنامج بالاسم grade.py
، ثم نفّذه في بيئة البرمجة المحلية من نافذة الطرفية باستخدام الأمر python grade.py
.
في هذه الحالة، الدرجة 70 تلبي الشرط، لأنّها أكبر من 65، لذلك ستحصل على المخرجات التالية عند تنفيذ البرنامج:
درجة النجاح
لنغيّر الآن نتيجة هذا البرنامج عبر تغيير قيمة المتغير grade
إلى 60
:
grade = 60 if grade >= 65: print("درجة النجاح")
بعد حفظ وتنفيذ الشيفرة، لن نحصل على أي مخرجات، لأنّ الشرط لم يتحقق، ولم نأمر البرنامج بتنفيذ تعليمة أخرى.
كمثال آخر، دعنا نتحقق مما إذا كان رصيد الحساب المصرفي أقل من 0. لننشئ ملفا باسم account.py
، ونكتب البرنامج التالي:
balance = -5 if balance < 0: print("الحساب فارغ، أضف مبلغا الآن، أو ستحصل على غرامة.")
عند تنفيذ البرنامج باستخدام python account.py
، سنحصل على المخرجات التالية:
الحساب فارغ، أضف مبلغًا الآن، أو ستحصل على غرامة.
أعطينا للمتغير balance
القيمة -5
، وهي أقل من 0 في البرنامج السابق. ولمَّا كان الرصيد مستوفيًا لشرط التعليمة if
(أي balance < 0
)، فسنحصل على سلسلة نصية في المخرجات بمجرد حفظ الشيفرة وتنفيذها. مرة أخرى، لو غيرنا الرصيد إلى القيمة 0 أو إلى عدد موجب، فلن نحصل على أيّ مخرجات.
التعليمة Else
قد تريد من البرنامج أن يفعل شيئًا ما في حال عدم تحقق شرط التعليمة if
. في المثال أعلاه، نريد طباعة مخرجات في حال النجاح والرسوب. ولفعل ذلك، سنضيف التعليمة else
إلى شرط الدرجة أعلاه وفق الصياغة التالية:
grade = 60 if grade >= 65: print("درجة النجاح") else: print("درجة الرسوب")
قيمة المتغير grade
تساوي 60
، لذلك فشرط التعليمة if
غير متحقق، وبالتالي فإنّ البرنامج لن يطبع درجة النجاح
. تخبر التعليمة else
البرنامجَ أنّ عليه طباعة السلسلة النصية "درجة الرسوب".
عندما نحفظ البرنامج وننفّذه، سنحصل على المخرجات التالية:
درجة الرسوب
إذا عدّلنا البرنامج وأعطينا المتغيرَ grade القيمة 65
أو أعلى منها، فسنحصل بدلاً من ذلك على الناتج درجة النجاح
.
لإضافة التعليمة else
إلى مثال الحساب المصرفي، سنعيد كتابة الشيفرة كما يلي:
balance = 522 if balance < 0: print("الحساب فارغ، أضف مبلغا الآن، أو ستحصل على غرامة.") else: print("رصيدك أكبر من 0.")
سنحصل على المخرجات التالية:
رصيدك أكبر من 0.
هنا، غيّرنا قيمة المتغير balance
إلى عدد موجب لكي تُنفَّذ الشيفرة المقابلة للتعليمة else
. إن أردت تنفيذ الشيفرة المقابلة للتعليمة if
، غيِّر القيمة إلى عدد سالب.
من خلال دمج العبارتين if
و else
، فأنت تنشئ تعليمة شرطية مزدوجة، والتي ستجعل الحاسوب ينفذ شيفرة برمجية معينة سواء تم استيفاء شرط if
أم لا.
التعليمة Else if
حتى الآن، عملنا على تعليمات شرطية ثنائية، أي إن تحقق الشرط، فنفذ شيفرة ما، وإلا، فنفِّذ شيفرة أخرى فقط. لكن في بعض الحالات، قد تريد برنامجًا يتحقق من عدة حالات شرطية. ولأجل هذا، سوف نستخدم التعليمة Else if
، والتي تُكتب في بايثون هكذا elif
. تشبه التعليمة elif
- أو Else if
- التعليمة if
، ومهمتها التحقق من شرط إضافي.
في برنامج الحساب المصرفي، قد نرغب في الحصول على ثلاثة مخرجات مختلفة مقابلة لثلاث حالات مختلفة:
- الرصيد أقل من 0
- الرصيد يساوي 0
- الرصيد أعلى من 0
ستوضع التعليمة elif
بين التعليمة if
والتعليمة else
كما يلي:
. . . if balance < 0: print("الحساب فارغ، أضف مبلغا الآن، أو ستحصل على غرامة.") elif balance == 0: print("الرصيد يساوي 0، أضف مبلغًا قريبًا.") else: print("رصيدك أكبر من 0.")
الآن، هناك ثلاثة مخرجات محتملة يمكن أن تُطبع عند تنفيذ البرنامج:
-
إن كان المتغير
balance
يساوي0
، فسنحصل على المخرجات من التعليمةelif
(أيالرصيد يساوي 0، أضف مبلغًا قريبًا.
). -
إذا ضُبِط المتغير
balance
عند عدد موجب، فسوف نحصل على المخرجات من التعليمةelse
(أيرصيدك أكبر من 0.
). -
إذا ضُبِط المتغير
balance
عند عدد سالب، فسنحصل على المخرجات من التعليمةif
(أيالحساب فارغ، أضف مبلغا الآن، أو ستحصل على غرامة
).
ماذا لو أردنا أن نأخذ بالحسبان أكثر من ثلاثة احتمالات؟ يمكننا كتابة عدة تعليمات elif
في الشيفرة البرمجية.
لنُعِد كتابة البرنامج grade.py
بحيث يقابل كل نطاق من الدرجات علامة محددة:
- 90 أو أعلى تكافئ العلامة أ
- 80-89 تعادل العلامة ب
- 70-79 تعادل العلامة ج
- 65-69 تعادل العلامة د
- 64 أو أقل تكافئ العلامة ه
سنحتاج لتنفيذ هذه الشيفرة إلى تعليمة if
واحد، وثلاث تعليمات elif
، وتعليمة else
تعالج جميع الحالات الأخرى.
دعنا نعيد كتابة الشيفرة من المثال أعلاه لطباعة سلسلة نصية مقابلة لكل علامة. يمكننا الإبقاء على التعليمة else
كما هي.
. . . if grade >= 90: print("العلامة أ") elif grade >=80: print("العلامة ب") elif grade >=70: print("العلامة ج") elif grade >= 65: print("العلامة د") else: print("درجة الرسوب")
تُنفّذ التعليمات elif
بالترتيب. هذا البرنامج سيكمل الخطوات التالية:
-
إذا كانت الدرجة أكبر من 90، فسيطبع البرنامجُ
العلامة أ
، وإذا كانت الدرجة أقل من 90، فسيمرّ البرنامج إلى التعليمة التالية … -
إذا كانت الدرجة أكبر من أو تساوي 80، فسيطبع البرنامجُ
العلامة ب
، إذا كانت الدرجة تساوي 79 أو أقل، فسيمرّ البرنامج إلى التعليمة التالية … -
إذا كانت الدرجة أكبر من أو تساوي 70، فسيطبعُ البرنامجُ
العلامة ج
، إذا كانت الدرجة تساوي 69 أو أقل، فسيمرّ البرنامج إلى التعليمة التالية … -
إذا كانت الدرجة أكبر من أو تساوي 65، فسيطبع البرنامجُ
العلامة د
، وإذا كانت الدرجة تساوي 64 أو أقل، فسيمرّ البرنامج إلى التعليمة التالية … -
سيطبع البرنامج
درجة الرسوب
، لأنه لم يتم استيفاء أيِّ من الشروط المذكورة أعلاه.
تعليمات if
المتشعبة
بعد أن تتعود على التعليمات if
و elif
و else
، يمكنك الانتقال إلى التعليمات الشرطية المتشعبة (nested conditional statements).
يمكننا استخدام تعليمات if
المتشعبة في الحالات التي نريد فيها التحقق من شرط ثانوي بعد التأكد من تحقق الشرط الرئيسي. لهذا، يمكننا حشر تعليمة if-else داخل تعليمة if-else أخرى. لنلقِ نظرة على صياغة if
المتشعبة:
if statement1: # الخارجية if تعليمة print("true") if nested_statement: # المتشعبة if تعليمة print("yes") else: # المتشعبة else تعليمة print("no") else: # الخارجية else تعليمة print("false")
هناك عدة مخرجات محتملة لهذه الشيفرة:
-
إذا كانت
statement1
صحيحة، فسيتحقق البرنامج مما إذا كانتnested_statement
صحيحة أيضًا. إذا كانت كلتا الحالتين صحيحتان، فسنحصل على المخرجات التالية:
true yes
-
ولكن إن كانت
statement1
صحيحة، وnested_statement
خاطئة، فسنحصل على المخرجات التالية:
true no
-
وإذا كانت
statement1
خاطئة، فلن تُنفّذ تعليمة if-else المتشعبة على أيّ حال، لذلك ستُنفّذ التعليمةelse
وحدها، والمخرجات ستكون:
false
يمكن أيضًا استخدام عدة تعليمات if
متشعبة في الشيفرة:
if statement1: # الخارجية if print("hello world") if nested_statement1: # المتشعبة الأولى if print("yes") elif nested_statement2: # المتشعبة الأولى elif print("maybe") else: #المتشعبة الأولى else print("no") elif statement2: # الخارجية elif print("hello galaxy") if nested_statement3: # المتشعبة الثانية if print("yes") elif nested_statement4: # المتشعبة الثانية elif print("maybe") else: # المتشعبة الثانية else print("no") else: # الخارجية else statement("مرحبا")
في الشيفرة البرمجية أعلاه، هناك تعليمات if
و elif
متشعبة داخل كل تعليمات if
. هذا سيفسح المجال لمزيد من الخيارات في كل حالة.
دعنا نلقي نظرة على مثال لتعليمات if
متشعبة في البرنامج grade.py
. يمكننا التحقق أولًا مما إذا كان الطالب قد حقق درجة النجاح (أكبر من أو تساوي 65٪)، ثم نحدد العلامة المقابلة للدرجة. إذا لم يحقق الطالب درجة النجاح، فلا داعي للبحث عن العلامة المقابلة للدرجة، وبدلًا من ذلك، يمكن أن نجعل البرنامج يطبع سلسلة نصية فيها إعلان عن رسوب الطالب. ستبدو الشيفرة المعدلة كما يلي:
. . . if grade >= 65: print("درجة النجاح:") if grade >= 90: print("أ") elif grade >=80: print("ب") elif grade >=70: print("ج") elif grade >= 65: print("د") else: print("درجة الرسوب")
إذا أعطينا للمتغير grade
القيمة 92
، فسيُستوفى الشرط الأول، وسيَطبع البرنامجُ درجة النجاح:
. بعد ذلك، سيتحقق مما إذا كانت الدرجة أكبر من أو تساوي 90، وبما أنّ هذا الشرط مستوفًى أيضًا، فستُطبع أ
.
أما إذا أعطينا للمتغير grade
القيمة 60
، فلن يتم استيفاء الشرط الأول، لذلك سيتخطى البرنامج تعليمات if
المتشعبة، وينتقل إلى التعليمة else
، ويطبع درجة الرسوب
.
يمكننا بالطبع إضافة المزيد من الخيارات، واستخدام طبقة ثانية من تعليمات if
المتشعبة. ربما نود إضافة الدرجات التفصيلية أ+
و أ
و أ-
. يمكننا القيام بذلك عن طريق التحقق أولًا من اجتياز درجة النجاح، ثم التحقق مما إذا كانت الدرجة تساوي 90 أو أعلى، ثم التحقق مما إذا كانت الدرجة تتجاوز 96، وفي تلك الحالة ستقابل العلامة أ+
. إليك المثال التالي:
. . . if grade >= 65: print("درجة النجاح:") if grade >= 90: if grade > 96: print("أ+") elif grade > 93 and grade <= 96: print("أ") elif grade >= 90: print("أ-") . . .
في الشيفرة أعلاه، في حال تعيين المتغير grade
عند القيمة 96
، سيقوم البرنامج بما يلي:
- التحقق مما إذا كانت الدرجة أكبر من أو تساوي 65 (صحيح)
-
طباعة
درجة النجاح:
- التحقق مما إذا كانت الدرجة أكبر من أو تساوي 90 (صحيح)
- التحقق مما إذا كانت الدرجة أكبر من 96 (خطأ)
- التحقق مما إذا كانت الدرجة أكبر من 93، وأقل من أو تساوي 96 (صحيح)
-
طباعة
أ
- تجاوز التعليمات الشرطية المتشعبة وتنفيذ باقي الشيفرة
ستكون مخرجات البرنامج في حال كانت الدرجة تساوي 96 كالتالي:
درجة النجاح: أ
تساعد تعليمات if
المتشعبة على إضافة عدة مستويات من الشروط الفرعية إلى الشيفرة.
خلاصة
ستتحكم باستخدام التعليمات الشرطية، مثل التعليمة if
، في مسار البرنامج أي تدفق تنفيذ الشيفرة. تطلب التعليمات الشرطية من البرنامج التحقق من استيفاء شرط معين من عدمه. وإذا تم استيفاء الشرط، فستُنفّذ شيفرة معينة، وإلا فسيستمر البرنامج وينتقل إلى الأسطر التالية.
يمكنك الدمج بين التعليمات الشرطية والمعاملات المنطقية، بما فيها and
و or
، واستخدام التعليمات الشرطية مع الحلقات التكرارية.
هذه المقالة جزء من سلسة مقالات حول تعلم البرمجة في بايثون 3.
ترجمة -وبتصرّف- للمقال How To Write Conditional Statements in Python 3 لصاحبته Lisa Tagliaferri
اقرأ أيضًا
- المقالة التالية: كيفية إنشاء حلقات تكرار while في بايثون 3
- المقالة السابقة: كيفية كتابة الوحدات في بايثون 3
- المرجع الشامل إلى تعلم لغة بايثون
- كتاب البرمجة بلغة بايثون
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.