بنية برنامج بايثون الأساسية (Python Program Structure)
بعد أن تعلمت كيفية كتابة وتشغيل أول برنامج بايثون، حان الوقت لفهم البنية الأساسية التي تحكم كتابة الأكواد في هذه اللغة الرائعة. بنية البرنامج (Program Structure) هي القواعد والأسس التي تنظم كيفية كتابة الكود بطريقة صحيحة يفهمها المفسر. على عكس لغات البرمجة الأخرى التي تعتمد على الأقواس المعقوفة والفواصل المنقوطة، بايثون تتميز ببنية بسيطة وواضحة تعتمد على المسافات البادئة (Indentation) والوضوح البصري. في هذا الدرس الشامل، سنتعلم كل ما تحتاج معرفته عن بنية برنامج بايثون، من الأسطر البسيطة إلى الكتل البرمجية المعقدة، مع أمثلة عملية وتطبيقات واقعية.
1. الأسطر البرمجية (Statements)
السطر البرمجي (Statement) هو أصغر وحدة تنفيذية في برنامج بايثون. يمثل السطر أمراً واحداً أو تعليمة واحدة تطلب من بايثون تنفيذ عملية معينة. في أبسط صوره، السطر البرمجي هو سطر واحد من الكود ينتهي بنهاية السطر (Line Break). المفسر يقرأ البرنامج سطراً بسطر من الأعلى إلى الأسفل، وينفذ كل سطر بالترتيب.
# كل سطر من هذه الأسطر هو statement منفصل
print("السطر الأول")
print("السطر الثاني")
x = 10
y = 20
result = x + y
print(result)
في المثال أعلاه، لدينا ستة أسطر برمجية منفصلة. كل سطر يُنفذ بشكل مستقل ومتسلسل. السطر الأول يطبع نصاً، الثاني يطبع نصاً آخر، الثالث يخزن الرقم 10 في متغير اسمه x، وهكذا.
الأسطر الطويلة وتقسيمها
أحياناً قد يكون لديك سطر برمجي طويل جداً يصعب قراءته. في بايثون، يمكنك تقسيم السطر الطويل إلى عدة أسطر باستخدام الشرطة المائلة العكسية \ في نهاية السطر، أو باستخدام الأقواس:
# استخدام الشرطة المائلة العكسية
total = 1 + 2 + 3 + 4 + 5 + \
6 + 7 + 8 + 9 + 10
# استخدام الأقواس (الطريقة المفضلة)
message = ("هذا نص طويل جداً "
"يمتد على عدة أسطر "
"لتحسين قابلية القراءة")
print(total)
print(message)
أسطر متعددة في سطر واحد
بالعكس، يمكنك أيضاً كتابة عدة أسطر برمجية في سطر واحد باستخدام الفاصلة المنقوطة ; لكن هذا غير محبذ لأنه يقلل من وضوح الكود:
# ممكن لكن غير محبذ
x = 5; y = 10; z = x + y; print(z)
# الطريقة الأفضل والأوضح
x = 5
y = 10
z = x + y
print(z)
2. المسافات البادئة (Indentation) - قلب بنية بايثون
هذه هي الميزة الأكثر تميزاً في بايثون والتي تجعلها مختلفة عن معظم لغات البرمجة الأخرى. في لغات مثل C++ أو Java أو JavaScript، تُستخدم الأقواس المعقوفة {} لتحديد بداية ونهاية الكتل البرمجية (Code Blocks). أما في بايثون، فتُستخدم المسافات البادئة (Indentation) لهذا الغرض.
المسافة البادئة هي المسافة الفارغة (مسافات أو Tab) في بداية السطر. هذه المسافة ليست مجرد تنسيق جمالي، بل هي جزء أساسي من بنية اللغة. بايثون تستخدم المسافات البادئة لتحديد أي الأسطر تنتمي لكتلة برمجية معينة (مثل جسم دالة، أو جسم شرط، أو جسم حلقة).
# مثال على استخدام المسافات البادئة
age = 18
if age >= 18:
# هذا السطر داخل كتلة if (له مسافة بادئة)
print("أنت بالغ")
print("يمكنك التصويت")
# كل الأسطر ذات نفس المسافة البادئة تنتمي لنفس الكتلة
# هذا السطر خارج كتلة if (بدون مسافة بادئة)
print("هذا السطر يُنفذ دائماً")
قواعد المسافات البادئة المهمة
- الاتساق ضروري: يجب استخدام نفس عدد المسافات في كل مستوى من المسافات البادئة. المعيار المتبع هو 4 مسافات لكل مستوى.
- لا تخلط بين المسافات والـ Tab: استخدم إما المسافات (Spaces) أو Tab، لكن لا تخلط بينهما في نفس الملف. المعيار الموصى به هو استخدام 4 مسافات.
- المسافة البادئة إلزامية: إذا نسيت المسافة البادئة حيث يجب أن تكون، ستحصل على خطأ
IndentationError. - المستويات المتداخلة: يمكن أن يكون لديك مستويات متعددة من المسافات البادئة (كتل داخل كتل).
# مثال على المستويات المتداخلة من المسافات البادئة
temperature = 25
is_sunny = True
if temperature > 20:
# المستوى الأول من المسافة البادئة (4 مسافات)
print("الطقس دافئ")
if is_sunny:
# المستوى الثاني من المسافة البادئة (8 مسافات)
print("والشمس مشرقة")
print("يوم مثالي للنزهة!")
# عودة للمستوى الأول
print("استمتع بيومك")
# خارج جميع الكتل (بدون مسافة بادئة)
print("نهاية البرنامج")
أخطاء المسافات البادئة الشائعة
إليك أمثلة على الأخطاء الشائعة المتعلقة بالمسافات البادئة:
# ❌ خطأ: نسيان المسافة البادئة
if True:
print("هذا خطأ") # IndentationError
# ❌ خطأ: مسافات بادئة غير متسقة
if True:
print("4 مسافات")
print("6 مسافات") # IndentationError
# ✅ صحيح: مسافات بادئة متسقة
if True:
print("4 مسافات")
print("4 مسافات أيضاً")
3. الكتل البرمجية (Code Blocks)
الكتلة البرمجية (Code Block) هي مجموعة من الأسطر البرمجية المترابطة التي تُنفذ معاً كوحدة واحدة. في بايثون، تُحدد الكتل البرمجية بواسطة المسافات البادئة. الكتلة تبدأ بعد سطر ينتهي بنقطتين : (مثل if أو for أو def)، وتستمر طالما أن الأسطر لها نفس مستوى المسافة البادئة.
# مثال على كتل برمجية مختلفة
score = 85
# كتلة if
if score >= 90:
print("ممتاز")
grade = "A"
elif score >= 80:
# هذه الكتلة تُنفذ لأن score = 85
print("جيد جداً")
grade = "B"
else:
print("جيد")
grade = "C"
# خارج كتلة if
print(f"درجتك: {grade}")
# كتلة حلقة for
print("الأرقام من 1 إلى 5:")
for i in range(1, 6):
# هذه الكتلة تتكرر 5 مرات
print(i)
print(" هذا رقم")
print("انتهت الحلقة")
4. الأسطر الفارغة والمسافات البيضاء (Whitespace)
الأسطر الفارغة والمسافات البيضاء (المسافات بين الكلمات والرموز) تلعب دوراً مهماً في جعل الكود أكثر وضوحاً وقابلية للقراءة. بايثون تتجاهل الأسطر الفارغة تماماً، لذا يمكنك استخدامها بحرية لتنظيم الكود وفصل الأقسام المختلفة.
# استخدام الأسطر الفارغة لتحسين القراءة
# القسم الأول: تعريف المتغيرات
name = "أحمد"
age = 25
city = "القاهرة"
# القسم الثاني: معالجة البيانات
full_info = f"{name} عمره {age} سنة ويعيش في {city}"
# القسم الثالث: عرض النتائج
print("=" * 40)
print(full_info)
print("=" * 40)
المسافات حول العمليات الحسابية
من الممارسات الجيدة وضع مسافات حول العمليات الحسابية والمقارنات لتحسين القراءة:
# ❌ صعب القراءة (لكنه يعمل)
result=10+5*2-3/1
# ✅ سهل القراءة (الطريقة الموصى بها)
result = 10 + 5 * 2 - 3 / 1
# المسافات حول المقارنات
if age >= 18 and score > 50:
print("مقبول")
# لا مسافات داخل الأقواس
print("Hello") # ✅ صحيح
print( "Hello" ) # ❌ غير محبذ
5. النقطتان (:) - بداية الكتل البرمجية
النقطتان : (Colon) هي رمز مهم جداً في بنية بايثون. تُستخدم للإشارة إلى بداية كتلة برمجية جديدة. كل سطر ينتهي بنقطتين يجب أن يتبعه سطر أو أكثر بمسافة بادئة. النقطتان تُستخدم مع:
- جمل الشرط:
if,elif,else - الحلقات:
for,while - تعريف الدوال:
def - تعريف الفئات:
class - معالجة الأخطاء:
try,except
# النقطتان مع if
if True:
print("كتلة if")
# النقطتان مع for
for i in range(3):
print(f"التكرار {i}")
# النقطتان مع while
count = 0
while count < 2:
print(f"العدد: {count}")
count += 1
# ❌ خطأ: نسيان النقطتين
# if True
# print("خطأ") # SyntaxError
6. مثال شامل: برنامج متكامل يوضح البنية
لنجمع كل ما تعلمناه في برنامج واحد متكامل يوضح جميع عناصر بنية بايثون:
# برنامج حاسبة الدرجات - مثال شامل على بنية بايثون
# القسم 1: عرض رسالة الترحيب
print("=" * 50)
print(" برنامج حساب المعدل الدراسي")
print("=" * 50)
print()
# القسم 2: تعريف المتغيرات
subject1 = 85
subject2 = 90
subject3 = 78
subject4 = 92
# القسم 3: حساب المعدل
total = subject1 + subject2 + subject3 + subject4
average = total / 4
# القسم 4: عرض النتائج الأساسية
print(f"المجموع الكلي: {total}")
print(f"المعدل: {average:.2f}")
print()
# القسم 5: تحديد التقدير باستخدام الشروط
print("التقدير: ", end="")
if average >= 90:
# كتلة الامتياز
print("ممتاز (A)")
print("🌟 تهانينا! أداء رائع")
elif average >= 80:
# كتلة جيد جداً
print("جيد جداً (B)")
print("👍 أداء جيد، استمر")
elif average >= 70:
# كتلة جيد
print("جيد (C)")
print("✓ أداء مقبول")
else:
# كتلة ضعيف
print("يحتاج تحسين (D)")
print("⚠ يجب بذل المزيد من الجهد")
print()
# القسم 6: عرض تفاصيل كل مادة
print("تفاصيل الدرجات:")
print("-" * 50)
subjects = ["الرياضيات", "الفيزياء", "الكيمياء", "الأحياء"]
scores = [subject1, subject2, subject3, subject4]
for i in range(4):
# كتلة الحلقة - تتكرر 4 مرات
subject_name = subjects[i]
score = scores[i]
# تحديد الحالة لكل مادة
if score >= 85:
status = "ممتاز ✓"
else:
status = "جيد"
print(f"{subject_name}: {score} - {status}")
# القسم 7: رسالة الختام
print()
print("=" * 50)
print(" شكراً لاستخدام البرنامج!")
print("=" * 50)
تحليل البنية في هذا البرنامج:
- البرنامج مقسم إلى أقسام واضحة باستخدام التعليقات والأسطر الفارغة
- استخدام المسافات البادئة بشكل متسق (4 مسافات لكل مستوى)
- النقطتان تظهر مع
ifوelifوelseوfor - كتل متداخلة (حلقة for تحتوي على شرط if)
- استخدام الأسطر الفارغة لفصل الأقسام المنطقية
7. أفضل الممارسات في كتابة الكود
لكتابة كود بايثون احترافي وسهل القراءة، اتبع هذه الإرشادات (مستمدة من PEP 8 - دليل الأسلوب الرسمي لبايثون):
1. المسافات البادئة
- استخدم 4 مسافات لكل مستوى من المسافة البادئة
- لا تستخدم Tab، أو اضبط محررك ليحول Tab إلى 4 مسافات
- كن متسقاً في جميع أنحاء المشروع
2. طول السطر
- حاول ألا يتجاوز السطر 79 حرفاً (للكود) أو 72 حرفاً (للتعليقات)
- قسّم الأسطر الطويلة باستخدام الأقواس أو الشرطة المائلة العكسية
3. الأسطر الفارغة
- ضع سطرين فارغين قبل تعريف دالة أو فئة على المستوى الأعلى
- ضع سطراً فارغاً واحداً بين الدوال داخل الفئة
- استخدم الأسطر الفارغة بحكمة لفصل الأقسام المنطقية
4. المسافات
- ضع مسافة واحدة حول العمليات الحسابية:
x = 5 + 3 - لا مسافات مباشرة داخل الأقواس:
print(x)وليسprint( x ) - لا مسافات قبل الفواصل:
items = [1, 2, 3]
💡 نصيحة ذهبية
البنية الواضحة والمنظمة ليست مجرد مسألة جمالية، بل هي ضرورة عملية. الكود الذي تكتبه اليوم قد تحتاج لقراءته وتعديله بعد شهور. إذا كان منظماً وواضحاً، ستوفر على نفسك ساعات من الحيرة والإحباط.
استخدم محرر نصوص جيد مثل VS Code أو PyCharm الذي يساعدك تلقائياً في تنسيق الكود والحفاظ على المسافات البادئة الصحيحة. هذه الأدوات تجعل كتابة كود منظم أسهل بكثير.
الخطوة التالية
الآن بعد أن فهمت بنية برنامج بايثون، حان وقت تعلم التعليقات وكيفية توثيق الكود
الدرس التالي: التعليقات في Python