جملة if في بايثون: الشروط مع else وelif

35 دقيقة تقريبًا

ما تحتاج أن تعرفه قبل هذا الدرس
  • Variable
  • String
  • Integer
  • Float
  • Boolean
  • List
  • Dictionary
  • print
  • type
  • key
  • set
ما يضيفه هذا الدرس
  • if
  • else
  • elif
  • Comparison Operators
  • and
  • or
  • not

يحسب العدّاد في الأعلى تمارين الدرس، وعددها 8، أما القراءة وتشغيل الأمثلة فلا تُحتسب.

لحد دلوقتي إحنا عرفنا نخزّن البيانات، زي:

لكن بايثون هنا لسه مجرد شايل بيانات، وإحنا عايزينه يبدأ ياخد قرار بناءً على البيانات دي، يعني نقوله مثلًا: لو الصفحة 404، اطبع إن عندنا مشكلة. وده هو دور الـ Conditions.

يعني إيه Condition؟

الـ Condition ببساطة هو سؤال إجابته True أو False. لو سألنا status_code == 404 وقيمة status_code فعلًا 404، الإجابة True. لكن لو status_code = 200 وسألنا نفس السؤال، الإجابة False.

القاعدة
الـ Condition هو اختبار بيرجّع True أو False.

الفرق بين = و ==

دي من أهم الحاجات للمبتدئ. لما تكتب status_code = 404، العلامة = معناها: خزّن القيمة 404 جوه المتغيّر status_code. لكن لما تكتب status_code == 404، العلامة == معناها: هل قيمة status_code تساوي 404؟

القاعدة
= تخزين قيمة، و== مقارنة قيمتين.

لسه ما استخدمناش if، إحنا بس بنتأكد إننا فاهمين يعني إيه شرط أصلًا.

من غير ما تشغّل، توقّع الناتج:

توقّع الناتج

إيه اللي هيطبعه السطرين؟

دلوقتي ندخل على if

كلمة if معناها: لو. يعني لما نكتب if status_code == 404: إحنا بنقول لبايثون: لو status_code تساوي 404، نفّذ السطر اللي تحت.

مثال
الناتج المتوقع
Broken page
Audit finished

لاحظ إن print("Audit finished") اتطبعت في الحالتين، لأنها مش جوه الـ if. لكن لو status_code كانت 200 بدل 404؟

توقّع الناتج

إيه اللي هيطبعه الكود لو status_code = 200؟

النقطتين والـ Indentation

لاحظ إن آخر سطر الـ if بينتهي بنقطتين :. دول معناهم: دلوقتي هيبدأ الكود اللي تابع للشرط ده. وهنا نوصل لحاجة مهمة جدًا في بايثون، وهي الـ Indentation: المسافة اللي بتيجي قبل print() مش للتنسيق بس، بايثون بيعتمد عليها علشان يعرف إن السطر ده تابع للـ if. عادةً بنستخدم 4 مسافات.

الكود ده غلط — السطر التاني مش متزاح تحت الـ if
اختبر فهمك

إيه اللي هيحصل لو شغّلت الكود اللي فوق؟

شوف المثال ده كمان: لو print("Broken page") جوه الـ if بمسافة، وprint("Audit finished") براها تمامًا، فالـ Indentation هي اللي بتحدد إيه الكود التابع للشرط، وإيه الكود اللي برا الشرط، وده شيء هيفضل معانا طول الكورس.

المقارنات مش بس ==

عندنا أهم Comparison Operators: == يساوي، != لا يساوي، > أكبر من، < أقل من، >= أكبر من أو يساوي، و<= أقل من أو يساوي. ناخدهم في السياق:

مثال
الناتج المتوقع
Long page
Thin content
مثال
الناتج المتوقع
Page is not 200
High traffic page
Top 10

دلوقتي نضيف else

إحنا عرفنا إن if معناها: لو الشرط صحيح اعمل كذا. لكن ساعات عايزين نقول: ولو الشرط مش صحيح، اعمل حاجة تانية. هنا بنستخدم else:

مثال
الناتج المتوقع
Page is working

لاحظ إن if وelse على نفس المستوى، لكن الكود اللي تحت كل واحدة داخل 4 مسافات.

طيب لو عندي أكتر من احتمال؟

مثلًا status_code ممكن تكون 200 أو 301 أو 404 أو 500، مش مجرد صح أو غلط. هنا نستخدم elif وهي اختصار لـ else if: لو الشرط الأول ما تحققش، جرّب الشرط التالي.

مثال
الناتج المتوقع
Redirect

بايثون بيشتغل من فوق لتحت: يسأل هل 301 == 200؟ لا. هل 301 == 301؟ نعم، فينفّذ Redirect ويقف في سلسلة الـ if/elif/else.

فرق مهم بين if وelif

بص على المثال ده:

مثال
الناتج المتوقع
Thin content
Missing title

لأن كل if هنا مستقلة. لكن لو كتبناها بـ elif بدل الـ if التانية؟

توقّع الناتج

إيه اللي هيطبعه الكود لو استخدمنا elif بدل if التانية؟

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

اختصار الـ Boolean

في الدرس الأول عرفنا إن True وFalse نوع بيانات اسمه bool. لو indexable = True، ممكن نكتب if indexable == True: وده صحيح، لكن ممكن نكتبه بشكل أبسط:

مثال
الناتج المتوقع
Page is indexable
Page is indexable

الشكلين بيدّوا نفس النتيجة، لأن قيمة indexable أصلًا True. خليك في البداية فاهم الشكل الكامل if indexable == True: قبل ما تستخدم الاختصار if indexable:.

Logical Operators

في أوقات شرط واحد مش كفاية. مثلًا عايز تقول: الصفحة شغالة 200 ومش Indexable، وعندنا شرطين. هنا نحتاج and، or، وnot.

and

and معناها: الشرط الأول والشرط الثاني لازم يكونوا صح. لو واحد فيهم False، الكود مش هيتنفذ.

مثال
الناتج المتوقع
Allowed
ملحوظة
قاعدة and: True and True → True. True and False → False. False and True → False. False and False → False. يعني and متشدّدة، عايزة الشرطين صح.

مثال SEO على and:

مثال
الناتج المتوقع
Live page but not indexable

لو الصفحة كانت status_code = 404 بدل 200؟

توقّع الناتج

إيه اللي هيطبعه الكود لو status_code = 404؟

الشرط مش هيتحقق، لأن أول جزء status_code == 200 بقى False.

or

or مختلفة: يكفي شرط واحد يكون صحيح.

مثال
الناتج المتوقع
Weekend
ملحوظة
قاعدة or: True or True → True. True or False → True. False or True → True. False or False → False. يعني or محتاجة شرط واحد بس يكون صح.

مثال SEO على or: لو الصفحة 404 أو 500، عندها Error.

مثال
الناتج المتوقع
Page has an error

not

not مختلفة عن التنتين، هي مش بتربط شرطين، هي بتقلب القيمة: True تبقى False، وFalse تبقى True.

مثال
الناتج المتوقع
True

وممكن نستخدمها جوه شرط. الشكل الكامل واضح جدًا، لكن بايثون بيسمحلنا نكتبها بشكل أبسط:

مثال
الناتج المتوقع
Not indexable
Not indexable

أنا أفضّل في البداية تفهم الشكل if indexable == False: الأول، وبعدين تبدأ تستخدم if not indexable: لما تبقى فاهم هي اختصار لإيه.

نركّب كل حاجة على مثال SEO

عندنا الصفحة دي:

نبدأ نفحصها بأربع شروط مستقلة عن بعض:

مثال
الناتج المتوقع
Missing title
Thin content
Not indexable

لاحظ إننا استخدمنا أكتر من if، وده مقصود، لأن الصفحة ممكن يكون عندها أكتر من مشكلة في نفس الوقت. دلوقتي نجرّب and داخل نفس المثال: عايزين نكتشف حالة إن الصفحة شغالة 200، لكنها غير قابلة للفهرسة.

مثال
الناتج المتوقع
Live page but not indexable

الشرطين هنا صحيحين: status_code == 200 صح، وindexable == False صح، فـ True and True بتساوي True وينفّذ الكود. ونجرّب or: عايزين نقول لو الصفحة 404 أو 500 اعتبرها Error.

توقّع الناتج

إيه اللي هيطبعه الكود ده؟

الصفحة عندنا 200، إذن False or False بتساوي False ومش هيطبع حاجة.

آخر نقطة مهمة

لما بايثون يشوف word_count < 300، هو مش شايف كلمة "Thin Content". هو بيحسب 180 < 300 فتبقى True، وبعدين if True: فينفّذ الكود. يعني الـ if في النهاية بتشتغل على True/False، وده أهم حاجة عايزك تخرج بيها من الدرس ده.

اختبر فهمك

لما بايثون يشوف if word_count < 300:، إيه اللي بيحصل فعليًا؟

تمرين الدرس

عندك الصفحة دي:

تحدّي SEO

افحص الصفحة بالشروط الصح

اكتب شروط تطبع: "Page is OK" لو status_code يساوي 200، "Page redirects" لو تساوي 301، "Page not found" لو تساوي 404 — باستخدام if/elif/else واحدة بس. وبشكل مستقل: اطبع "Thin content" لو word_count أقل من 300، واطبع "Not indexable" لو الصفحة مش Indexable.

الدرس الجاي هنبدأ Loops، لكن هنشرحها بنفس المنهج: قبل ما نكتب for page in pages هنفهم الأول يعني إيه Loop، ليه محتاجينها، ومعنى for وin.

بقيت تمارين لم تحلّها

0/8

التمارين المتبقية: 8 من 8. يُحتسب الدرس مكتملًا حين تحلّها كلها، ويمكنك العودة إليها متى شئت.

أحسنت، وصلت إلى نهاية الدرس.