🌟 مقدمة
في لغات البرمجة الأخرى مثل C أو Java أو JavaScript، تُستخدم الأقواس المعقوفة { } لتحديد كتلة الأوامر (Code Block). أما في بايثون فالأمر مختلف تماماً: 🚨 المسافة البادئة (Indentation) هي التي تحدد بداية ونهاية الكتلة البرمجية.
هذا يعني أن المسافات أو علامات التبويب (Tab) التي تضعها في بداية السطر ليست مجرد تجميل للكود، بل هي ⚙️ جزء أساسي من قواعد اللغة، وأي خطأ فيها يؤدي إلى فشل تنفيذ البرنامج. الـTAP يساوي 4 مسافات.
قبل البدء فضلاً قم بمراجعة الدرس السابق لمواكبة التعلم أساسيات بايثون (2): تهيئة Notepad++ وعرض أول كود برمجي : {alertSuccess}
أمثلة للـمسافات البادئة
🤔 لماذا المسافة البادئة إجبارية في بايثون؟
- 🧹 أكثر تنظيماً.
- 👀 أسهل في الفهم من قبل الآخرين (أو حتى من نفسك بعد فترة).
- 🛡️ أقل عرضة للأخطاء المنطقية الناتجة عن نسيان إغلاق الأقواس.
🧱 ما هي الكتلة البرمجية (Code Block)؟
- 🔀 داخل جملة شرطية if.
- 🔁 داخل حلقة تكرارية for أو while.
- 🛠️ داخل تعريف دالة def.
- 🏛️ داخل تعريف صنف class.
📐 القواعد الأساسية للمسافة البادئة
- ✅ يجب أن تبدأ الكتلة بعد علامة النقطتين :.
- 📏 كل الأسطر داخل الكتلة نفسها يجب أن يكون لها نفس مقدار المسافة البادئة تماماً.
- 4️⃣ يُفضّل استخدام 4 مسافات لكل مستوى بادئة (هذا هو المعيار الرسمي في مجتمع بايثون - PEP 8).
- 🚫 لا تخلط بين المسافات وعلامات التبويب (Tab) في الملف الواحد، وإلا ستحصل على خطأ TabError.
نصيحة: اضبط محرر النصوص (مثل VS Code أو PyCharm) ليقوم تلقائياً بتحويل ضغطة Tab إلى 4 مسافات.{alertInfo}
✅ مثال صحيح – جملة شرطية
if 5 > 2: print("Five is greater than two!") # ⬅️ مسافة بادئة (4 مسافات) print("This line is inside the if block.")print("This line is outside the if block.") # ⬅️ لا توجد مسافة بادئ
if 5 > 2:print("Five is greater than two!") # ⬅️ مسافة بادئة (4 مسافات)print("This line is inside the if block.")print("This line is outside the if block.") # ⬅️ لا توجد مسافة بادئ
🔊 الناتج:
Five is greater than two!This line is inside the if block.This line is outside the if block.
❌ مثال خاطئ – نسيان المسافة البادئة
if 5 > 2:print("Five is greater than two!") # 😱 لا توجد مسافة بادئة → خطأ
IndentationError: expected an indented block
❌ مثال خاطئ – مسافات غير متساوية داخل الكتلة
if 5 > 2:print("First line") # 4 مسافاتprint("Second line") # 5 مسافات → 😵 غير متساوٍ مع السطر الأول
💥 الخطأ:
IndentationError: unexpected indent
🪆 المسافة البادئة المتداخلة (Nested Indentation)
if 10 > 5:print("Ten is greater than five.")if 20 > 15:print("Twenty is also greater than fifteen.") # ⬅️ مستوى بادئة ثانٍ (8 مسافات)print("Back to the first block.") # ⬅️ العودة إلى المستوى الأول (4 مسافات)print("Outside all blocks.")
🔊 الناتج:
Ten is greater than five. Twenty is also greater than fifteen. Back to the first block. Outside all blocks.
📄 حالات خاصة: سطر فارغ داخل الكتلة
if True:print("Hello")# هذا تعليق داخل الكتلة، المسافة البادئة قبله مهمةprint("World")
✍️ ماذا عن كتابة سطر واحد بعد النقطتين؟
if 5 > 2: print("Five is greater than two!") # ⚠️ يعمل لكن تجنّبه
🚨 الأخطاء الشائعة وكيفية تجنبها
|
😵 الخطأ |
📝 الوصف |
💊 الحل |
|
IndentationError: expected an indented block |
نسيت وضع مسافة بادئة بعد : |
تأكد من وجود مسافة (أو Tab) في بداية
السطر التالي. |
|
IndentationError:
unexpected indent |
وضعت مسافة بادئة لسطر لا يجب أن
يكون داخل كتلة |
احذف المسافات الزائدة من بداية
السطر. |
|
IndentationError:
unindent does not match any outer indentation level |
عدم تطابق المسافات عند الخروج من
كتلة متداخلة |
تأكد أن عدد المسافات يعود بالضبط إلى مستوى الكتلة السابقة. |
|
TabError:
inconsistent use of tabs and spaces in indentation |
خلطت بين المسافات و Tab في نفس
الملف |
استخدم إعداد "تحويل Tab إلى
مسافات" في محررك. |
🛠️ أدوات مساعدة
- 🖥️ معظم محررات الأكواد الحديثة تُظهر خطاً عمودياً رفيعاً لتوضيح مستويات المسافة البادئة.
- 🔍 يمكنك استخدام الأمر python -m tabnanny yourfile.py لفحص ملفك بحثاً عن خلط بين Tab والمسافات.
- 📚 اتبع دليل الأسلوب الرسمي PEP 8 الذي يوصي باستخدام 4 مسافات لكل مستوى بادئة.
🏋️ تمارين تطبيقية
✏️ تمرين 1: صحح الكود التالي
if 3 > 1:print("Three is greater than one.")print("This should be inside the block.")print("Done.")
🔎 الحل (اضغط للإظهار)
if 3 > 1:print("Three is greater than one.") # ✅ أضف مسافة بادئةprint("This should be inside the block.")print("Done.")
🖨️ تمرين 2: ماذا يطبع الكود التالي؟
x = 10if x > 5:print("A")if x > 8:print("B")print("C")print("D")
🔊 الناتج (اضغط للإظهار)
A B C D💻 تمرين 3: اكتب كوداً يستخدم if متداخلة لطباعة "Hot" إذا كانت درجة الحرارة > 30، و "Very Hot" إذا كانت > 40، ثم اطبع "Done" خارج الكتل.
📋 مثال للحل (اضغط للإظهار)
temp = 42if temp > 30: print("Hot") if temp > 40: print("Very Hot")print("Done")
🎓 خلاصة
- 🐾 المسافة البادئة في بايثون إجبارية لتحديد كتل الأوامر.
- 4️⃣ استخدم 4 مسافات لكل مستوى بادئة.
- 🚫 لا تخلط بين المسافات و Tab.
- 💢 أي خطأ في المسافات يؤدي إلى IndentationError أو TabError.
- 🧼 الأكواد المنظمة باستخدام المسافة البادئة الصحيحة تكون واضحة وسهلة الصيانة.

