Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
AhmadAlsaadi
GitHub Repository: AhmadAlsaadi/Arabic-python-notebook
Path: blob/master/الفصل الرابع-اتخاذ القرارات.ipynb
675 views
Kernel: Python 3 (ipykernel)
import style style._set_css_style("custom.css")

الفصل الرابع : اتخاذ القرارات


ان من الاشياء الجميلة في لغة البرمجة ان المبرمج يستطيع ان يعطي الكمبيوتر قدرة على التفكير "ان صح التعبير" والتي من خلالها يستطيع الكمبيوتراتخاذ قراراته. لكن في حقيقة الامر هذه القرارات ماهي الا شروط يفرضها المبرمج على البرنامج ليحقق مبتغاه. في هذا الفصل سوف نتحدث عن كيفية اتخاذ القرارات في بايثون باستخدام اداة الشرط if.

أهداف الفصل

عند اتمام هذا الفصل يجب ان يكون لديك المام بالآتي:
  1. التعرف على كيفية استخدام أداة الشرط if
  2. التعرف على كيفية استخدام else و elif مع أداة الشرط if.
  3. التعرف على طريقة كتابة أداة شرط داخل أداة شرط أخرى.

التركيب اللغوي

التركيب اللغوي في بايثون هنا مشابه لغيره من لغات البرمجة. فهو يهدف في المقام الاول الى التحكم في سير تنيفذ البرنامج بوضع شروط يفرضها المبرمج حين كتابته للكود البرمجي على البرنامج بحيث تكون نتائح هذه الشروط احدى قيمتين صح او خطأ. في حال الحصول على القيمة صح من عملية التحقق من الشرط يقوم مفسر بايثون بتنفيذ اوامر يحددها له المبرمج اما في حال الحصول على القيمة خطأ فان بايثون يتخطأ الاوامر التي يتطلب تنفيذها تحقق الشرط كما هو موضح في الشكل ادناه.

يبتدتئ التركيب اللغوي لأتخاذ القرارات بكلمة if متبوعا بالشرط المراد التأكد منه ومن ثم وضع نقطتين فوق بعض في نهاية السطر كما في المثال التالي:
name="Ahmad" if len(name)<10:print(name)
Ahmad
ففي المثال السابق يتم التحقق من صحة كون عدد الاحرف الموجودة في كلمة “Ahmad” اصغر من العدد 10 . فاذا كانت العبارة صحيحة فان مفسر بايثون يقوم بتنفيذ العبارة التي تتلو النقطتين فقوق بعض. اما إذا كانت العبارة خاطئة فان مفسر بايثون يتجاهل تنفيذ العبارة التي تتلو النقطتين فوق بعض. وبما ان هذه العبارة صحيحة فانه يتم تنفيذ الكود (print(name الذي يتلو النقطتين فوق بعض. ان كتابة العبارة المراد تنفيذها بعد تحقق الشرط يفضل ان تكون في سطر مستقل بدلا من ان تكون في نفس السطر ولكن إذا جعلت في سطر مستقل فانه يتوجب ترك مسافة بمقدار حرف واحد على الأقل في بداية السطر الجديد (بفضل ترك مسافة بمقدار أربعة أحرف كما هو متعارف عليه بين مبرمجي بايثون) لكي يتمكن مفسر بايثون من التفرقة بين العبارة المشروطة والعبارة الاعتيادية التي قد تقع بعدها كما في المثال التالي:
name="Ahmad" if len(name)<10: print(name) #عبارة يتطلب تنفيذها تحقق شرط الجملة الشرطية x=5 #عبارة غير داخلة في الجملة الشرطية print(x) #عبارة غير داخلة في الجملة الشرطية
Ahmad 5
لاحظ في المثال السابقة ان ترك مسافة في العبارة المشروطة كان ضروري لتمكين مفسر بايثون من التفرقة بين العبارة الشرطية وما يليها من عبارات أخرى غير مرتبطة بالجملة الشرطية. لذلك كل العبارات التي يتطلب تنفيذها تحقق الشرط يجب ان تترك مسافة في بداية السطر وتكون هذه المسافة هي نفسها لجميع العبارات التي تتطلب تحقق الشرط. المثال التالي يوضح تنفيذ أكثر من عبارة تتطلب تحقق شرط معين:
name="Ahmad" if len(name)<10: print(name) #عبارة يتطلب تنفيذها تحقق شرط الجملة الشرطية لاحظ تساوي المسافات المتروكة print(len(name)) #عبارة يتطلب تنفيذها تحقق شرط الجملة الشرطية لاحظ تساوي المسافات المتروكة y=0 #عبارة يتطلب تنفيذها تحقق شرط الجملة الشرطية لاحظ تساوي المسافات المتروكة x=7 #عبارة غير داخلة في الجملة الشرطية لاحظ بداية كتابتها من اول السطر print(x) #عبارة غير داخلة في الجملة الشرطية لاحظ بداية كتابتها من اول السطر
Ahmad 5 7

تمارين استكشافية

١-قم بكتابة المثال السابق واجعل واحدة من العبارات المشروطة تبتدأ بعدد مختلف من الفراغات عن العبارتين الأخريين ماذا تلاحظ؟
٢- قم بكتابة جملة شرطية للتعرف على ما اذا كان العدد 6 موجود في القائمة [1,2,3,4] بحيث يقوم بطباعة هذا الرقم اذا كان الرقم موجود فعلا؟ ماذا تلاحظ؟

لنرفض اننا نريد ان نقوم بعمل ما إذا تحقق شرط معين ونقوم بعمل اخر إذا لم يتحقق الشرط. للقيام بهذه المهمة نحتاج الى استخدام else في الجملة الشرطية لتخبر بايثون بالمراد فعله في حين عدم تحقق الشرط المطلوب كما هو موضح في المثال التالي:
name="Ahmad" if len(name)<4: print(name) print(len(name)) y=0 else: print("the name is greater than 4 letters")
the name is greater than 4 letters
لاحظ ان else تخضع لجميع شروط الجملة الشرطية السابقة من حيث انها تنتهي بنقطتين ويتوجب ترك مسافة في بداية العبارات التي يتطلب تنفيذها عدم تحقق الشرط.

تمارين استكشافية

قم بكتابة جملة شرطية للتعرف على ما اذا كان العدد 6 موجود في القائمة [1,2,3,4] بحيث يقوم بطباعة هذا الرقم اذا كان الرقم موجود فعلا؟ واذا لم يكن موجودا اطبع عبارة تفيد ان الرقم غير موجود؟
لنفرض اننا نريد ان نتحقق من توفر شرطين قبل ان نقوم بعمل ما ونقوم بعمل آخر في حال عدم توفر الشرطين. ماذا بإمكاننا ان نصنع في هذه الحالة؟ هناك حلول كثيرة فمنها مثلا ان نستخدم الجملة الشرطية if…else للتحقق من الشرط الاول والثاني باستخدام أداة الربط المنطقي and وفي حال عدم تحقق الشرطين يتم تنفيذ العبارة التي تلي else كما في المثال التالي:
name="Ahmad" if len(name)<10 and name=="Ahmad": print(name) else: print("the name is wrong or big")
Ahmad
كما يمكن القيام بنفس المهمة باستخدام الجملة الشرطية البسيطة if للتحقق من الشرط الاول ومن ثم التحقق من الشرطة الثاني باستخدام الجملة الشرطية if … else كما في المثال التالي:
name="Ahmad" if len(name)<10: if name=="Ahmad": print(name) else: print("the name is wrong or big")
Ahmad
في المثال الاخير هذا النوع من الاستخدام للأدوات الشرطية يسمى الأدوات الشرطية الفرعية. بحيث يتم استخدام أداة شرطية داخل أداة شرطية أخرى. ويمكن استخدام التركيب elif للتحقق من شرط اخر في حال عدم تحقق شرط سابق كما في المثال التالي:
name="Ahmad" if len(name)>10: print(name) elif name=="Ahmad": print(name) else: print("the name is wrong or big")
Ahmad
يجب الاشارة الى ان بايثون يعتبر القيمة صفر او القيمة النصية الفارغة او قيمة None كقيمة خاطئة في حال استخدامها مع if كما في المثال التالي:
balance=0 if balance: print(balance) else: print("No money in your balance")
No money in your balance
name="" if name: print(name) else: print("please enter valid name")
please enter valid name
value=None if value: print(value) else: print("the value is None")
the value is None
كما ان بايثون يعتبر اي قيمة عددية غير الصفر او اي بيان نصي يحتوي على حرف او اكثر قيمة صحيحة عند التعامل بها مع اداة الشرط كما في الامثلة التالية:
balance=253 if balance: print(balance) else: print("No money in your balance")
253
name="Ayman" if name: print(name) else: print("please enter valid name")
Ayman
value=(1,2,3,4) if value: print(value) else: print("the value is None")
(1, 2, 3, 4)