جملة if في بايثون: الشروط مع else وelif
35 دقيقة تقريبًا
- Variable
- String
- Integer
- Float
- Boolean
- List
- Dictionary
- 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.
الفرق بين = و ==
دي من أهم الحاجات للمبتدئ. لما تكتب 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 مسافات.
إيه اللي هيحصل لو شغّلت الكود اللي فوق؟
شوف المثال ده كمان: لو 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
مثال SEO على and:
Live page but not indexable
لو الصفحة كانت status_code = 404 بدل 200؟
إيه اللي هيطبعه الكود لو status_code = 404؟
الشرط مش هيتحقق، لأن أول جزء status_code == 200 بقى False.
or
or مختلفة: يكفي شرط واحد يكون صحيح.
Weekend
مثال 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:، إيه اللي بيحصل فعليًا؟
تمرين الدرس
عندك الصفحة دي:
افحص الصفحة بالشروط الصح
اكتب شروط تطبع: "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. يُحتسب الدرس مكتملًا حين تحلّها كلها، ويمكنك العودة إليها متى شئت.
أحسنت، وصلت إلى نهاية الدرس.