1.5 · تكوين شامل بخيط رابط

المستوى 1 · أساسيات اللغة

1.5تكوين شامل بخيط رابط

الهدف: ترسيخ كل الأسس (المتغيرات والشروط والحلقات والدوال) في برنامج صغير كامل ومقطّع.
الوقت المقدّر: 20 دقيقة · قراءة ذاتية · إذا كان لديك 5 دقائق فقط: اقرأ «الأساسي في 30 ثانية» + المخطط.

الأساسي في 30 ثانية

  • الترسيخ = الجمع : المتغيرات + الشروط + الحلقات + الدوال في برنامج واحد — من الصياغة إلى معرفة البناء.
  • الأفعال ← دوال، والقائمة ← main : فعل واحد = دالة واحدة، ولا يحوي main إلا حلقة القائمة التي تستدعي.
  • 80 سطرا وحده = أساس مكتسب : شيفرة وصفية (pseudo-code) أولا، وif __name__ == "__main__" منهجيا، وجسر نحو الملفات (N2) والاختبارات (N3).

حالة مستمرة — نبيل يسلّم دفتر عناوينه في الجزائر

على نبيل تسليم دفتر عناوين لفريقه : إضافة وبحث وعرض وحذف وخروج. فكتب أولا 80 سطرا مبعثرة مع القائمة منسوخة ملصقة خمس مرات — وخلل حذف يتكرر في كل موضع. فقطّع : فعل واحد = دالة واحدة (إضافة وبحث وعرض وحذف)، وmain() بحلقة القائمة، وجهات اتصال في قواميس (dictionnaires)، وif __name__ == "__main__" لحماية الاستيراد. فاشتغل الدفتر وحده، وسيُحفظ بصيغة JSON في المستوى 2 ويُختبر في المستوى 3 : فخيط هذا الدليل رابط منطلق.

تتويج المستوى — يعيد نبيل استثمار 1.1 (المتغيرات) و1.2 (القائمة بالشروط) و1.3 (الحلقات) و1.4 (الدوال).

1. جمع الأساس : مشروع دفتر العناوين الصغير

هذا الفصل وقفة ترسيخ : المتغيرات (جهات الاتصال في قواميس)، والشروط (القائمة)، والحلقات (العرض وحلقة القائمة)، والدوال (إضافة وبحث وعرض وحذف) — فيجمع هذا المشروع كل المستوى 1 في ~80 سطرا. وهو الاختبار : فإن كتبته وحدك، دون نسخ، شارحا كل سطر، فالأساس مكتسب.

يختار نبيل دفتر العناوين بدلا من لعبة العدد الغامض : فسيخدم فريقه، وستُعاد كل دالة في المستويات التالية.

2. قطّع قبل البرمجة، وجسر نحو التالي

اسرد الأفعال (إضافة وبحث وعرض وحذف وخروج) : فعل واحد = دالة واحدة. ولا يحوي main() إلا حلقة القائمة التي تستدعي. اكتب الشيفرة الوصفية (pseudo-code) بالعربية قبل البرمجة، واحمِ الاستيراد بـ if __name__ == "__main__". وسيعود هذا الدفتر في المستوى 2 (ملفات : الحفظ بصيغة JSON)، وفي المستوى 3 (اختبارات : إثبات الدوال) : فكل مستوى يعيد الاستثمار بدلا من البدء من صفر.

يكتب نبيل شيفرته الوصفية في خمسة أسطر، ويبرمج دالة لكل فعل، ويدوّن منذ الآن « JSON في N2 وpytest في N3 » : فالخيط الرابط يعبر الدليل.

خطأ شائع في الفهم: « أعرف الصياغة فأعرف البرمجة » أو « ملف كبير مبعثر لا بأس ». لا. فمعرفة كل لبنة معزولة لا تثبت أننا نجيد جمعها : تُقهر الصفحة البيضاء بالتفكيك (شيفرة وصفية، دالة لكل فعل). و80 سطرا مبعثرة لا تُقرأ — أما مقطعة في 6 دوال مع قائمة main فنعم.
أساس مجموع أفعال وقائمة و80 سطرا مقطعة الأفعال (دوال)فعل واحد = دالة واحدة+القائمة (main)حلقة تستدعي ولا شيء غيرها+80 سطرا (اختبار)وحدك ودون نسخ = مكتسب if __name__ == "__main__" منهجيا ؛ وJSON في N2 والاختبارات في N3.
أفعال وقائمة و80 سطرا مقطعة
نص المخطط (SEO / قارئات الشاشة / الترجمة): 1) اجمع : يعبئ نبيل المتغيرات (قواميس) والشروط (القائمة) والحلقات (العرض) والدوال (الأفعال) في دفتر واحد ~80 سطرا. 2) قطّع : شيفرة وصفية أولا، ودالة لكل فعل، وmain() مختصرة في حلقة القائمة، واستيراد محمي. 3) اعرض : سيُحفظ الدفتر بصيغة JSON (في N2) ثم يُختبر (في N3) — فكل مستوى يعيد الاستثمار. الدرس : فكك ثم اجمع، فيصير الأساس منعكسا.

🔎 مثال ملموس — 🔎 مثال ملموس — هيكل الدفتر

البنية التي تثبت الأساس، كما فعل نبيل لفريقه.

contacts = []
def ajouter(nom, tel):
    contacts.append({"nom": nom, "tel": tel})
def chercher(nom):
    return [c for c in contacts if c["nom"] == nom]
def lister():
    for c in contacts:
        print(f"{c['nom']} : {c['tel']}")
def main():
    while True:
        choix = input("1-إضافة 2-بحث 3-عرض 0-خروج ؟ ")
        if choix == "0":
            break
        elif choix == "3":
            lister()
if __name__ == "__main__":
    main()

القراءة : تحمي if __name__ الاستيراد المقبل ؛ ويرشّح الاستيعاب في سطر واحد.

الدرس : برمِج أولا ثم راجع — رسائل واضحة وتجارب وحالات معروضة.

مفردات القسم

الترسيخ
إعادة استعمال عدة مفاهيم معا في برنامج واحد، حتى تصير منكسات.

مثال بسيط: دفتر نبيل الذي يعبئ الفصول الأربعة.

ما ليس كذلك: عشرة تمارين معزولة لا تُجمع أبدا.

رد فعل: مشروع كامل يساوي عشرة تمارين.

الخيط الرابط
مشروع متابَع يعبر التعلم ويعطي معنى لكل مفهوم بتطبيقه.

مثال بسيط: دفتر نبيل، المُعاد بصيغة JSON (في N2) ثم في اختبارات (N3).

ما ليس كذلك: مشروع مهمل متروك عند كل مستوى.

رد فعل: أعِد الاستثمار بدلا من البدء من صفر.

التفكيك
تقطيع مسألة إلى خطوات/دوال صغيرة بسيطة : مهارة المبرمج المفتاح. فعل واحد = دالة واحدة.

مثال بسيط: إضافة/بحث/عرض/حذف نبيل.

ما ليس كذلك: كتابة 80 سطرا دفعة واحدة أمام الصفحة البيضاء.

رد فعل: اسرد الأفعال قبل البرمجة.

الشيفرة الوصفية
وصف خطوات برنامج بلغة جارية قبل برمجته : توضّح المنطق دون الصياغة.

مثال بسيط: الأسطر العربية الخمسة لنبيل قبل دفتره.

ما ليس كذلك: البرمجة مطأطأ الرأس ثم التنقيح ساعات.

رد فعل: العربية أولا ثم Python.

التنقيح (debugging)
تعقب الأخطاء وتصحيحها. وprint() وقراءة رسائل الخطأ (من أسفل إلى أعلى) أول الأدوات.

مثال بسيط: نبيل يعزل خلل حذفه بـ prints.

ما ليس كذلك: التعديل عشوائيا حتى يمر.

رد فعل: اقرأ التتبع، وأعِد الإنتاج، وصحح، وأعِد التحقق.

في التطبيق — تطبيقيا — اجمع الأسس : برنامج صغير كامل

  1. اختر مشروعا صغيرا : دفتر عناوين (إضافة/بحث/عرض/حذف)، أو لعبة العدد الغامض، أو آلة حاسبة في حلقة.
  2. اكتب أولا الشيفرة الوصفية : الخطوات الكبرى بالعربية (سحب عدد، وتكرار، ومقارنة، وإشارة أكبر/أصغر، وعدّ المحاولات).
  3. برمِج خطوة خطوة بإعادة الاستعمال : دالة لكل خطوة، وحلقة while لإعادة اللعب، وشروط للمقارنة، ووحدة random لسحب عدد.
  4. اختبر، وأثِر أخطاء، وصحح بـ print() : واعتنِ بالتجربة (رسائل واضحة وعدد محاولات معروض).
كتبت برنامجا كاملا يعبئ كل الأسس : فلم تعد تعرف الصياغة فقط بل تجيد البناء.

نص جاهز للنطق — دافع عن التقطيع (30 ث)

« أقترح أن نقطّع في دالة لكل فعل، مع main لا تحوي إلا حلقة القائمة : فكل دالة تُختبر معزولة، ويتحدد الخلل بقراءة واحدة، وسنعيد استعمال هذه الدوال للحفظ بصيغة JSON ثم للاختبارات. »

يُقال في مراجعة الشيفرة ؛ واعرض الملف المبعثر أمام المقطّع.

نموذج نسخ ولصق — دفتر عناوين كامل (تتويج N1)

contacts = []
def ajouter(nom, tel):
    contacts.append({"nom": nom, "tel": tel})
    return f"{nom} أُضيف."
def chercher(nom):
    trouves = [c for c in contacts if c["nom"] == nom]
    return trouves
def lister():
    if not contacts:
        return "الدفتر فارغ."
    return "\n".join(f"{c['nom']} : {c['tel']}" for c in contacts)
def main():
    while True:
        choix = input("1-إضافة 2-بحث 3-عرض 0-خروج ؟ ")
        if choix == "0":
            print("إلى اللقاء !")
            break
        elif choix == "1":
            print(ajouter(input("الاسم ؟ "), input("الهاتف ؟ ")))
        elif choix == "3":
            print(lister())
        else:
            print("اختيار غير معروف.")
if __name__ == "__main__":
    main()

دفتر في الجزائر

كما فعل نبيل : قواميس + أفعال + قائمة main — فيضيف الفريق ويبحث دون تكوين، والأساس مثبت.

العدد الغامض

random + while لإعادة اللعب + شروط أكبر/أصغر : الأساس نفسه (متغيرات وحلقات ودوال) في لعبة.

آلة حاسبة في حلقة

قائمة عمليات بدوال جمع/قسمة : فالقسمة على صفر مختبرة بشرط، والكل قابل لإعادة اللعب.

جسر N2/N3

الدفتر محفوظ بصيغة JSON (في N2 : with open وjson.dump/load) ثم مثبت باختبارات (في N3) : أعِد الاستثمار ولا تعِد البدء.

✓ ممارسات جيدة

  • اكتب الشيفرة الوصفية بالعربية قبل البرمجة.
  • فعل واحد = دالة واحدة، والقائمة = main، والاستيراد محمي.
  • أنهِ مشروعا مفهوما ومُعادا وحدك قبل المستوى 2.

✗ أخطاء شائعة

  • كتابة كل شيء مبعثرا دون دوال (غير مقروء في 80 سطرا).
  • نسخ القائمة ولصقها خمس مرات بدلا من حلقة.
  • الانتقال إلى N2 دون إنهاء الدفتر (أساس هش).

النقاط الأساسية

  • الترسيخ = إعادة استعمال المتغيرات والشروط والحلقات والدوال معا في برنامج كامل.
  • تفكيك مسألة إلى خطوات صغيرة هو المهارة الواجب تطويرها — والشيفرة الوصفية أولا.
  • الأفعال ← دوال، والقائمة ← main، وif __name__ == "__main__" منهجيا.
  • مشروع صغير كامل يرسّخ الأسس أفضل من عشرة تمارين معزولة — ويُحضّر N2 (الملفات) وN3 (الاختبارات).

تحدي 48 ساعة — طبّق غدا

برمِج دفتر النموذج أعلاه وحدك دون نسخ : شيفرة وصفية، ودالة لكل فعل، وحلقة القائمة، واستيراد محمي. وأضف supprimer()، واختبر كل اختيار، ثم اشرح كل سطر بصوت عال. تكفي 45 دقيقة.

قائمة الخروج من القسم
  • برمَجت وحدي برنامجا ~80 سطرا يشتغل.
  • شيفرتي مقطعة (الأفعال ← دوال، والقائمة ← main).
  • أستطيع شرح كل سطر وأستهدف N2 (بصيغة JSON) ثم N3 (الاختبارات).
تقييم ذاتي 1-5 : هل أستطيع إعادة هذا المشروع وحدي دون نسخ ؟هل لكل دالة فعل واضح وreturn نظيف ؟

أسئلة شائعة

أعرف الصياغة لكنني أتعطل أمام صفحة بيضاء، طبيعي ؟

طبيعي جدا، وهو موضوع هذا الفصل تحديدا. والحل التفكيك : لا تحاول كتابة البرنامج كله دفعة واحدة، فقطّعه إلى خطوات صغيرة جدا تجيد برمجتها (شيفرة وصفية)، ثم اجمعها واحدة واحدة.

كم مشروعا يلزم قبل المستوى 2 ؟

مشروع واحد كامل ومفهوم جيدا خير من خمسة مرتجلة. فإن كنت قادرا على إعادته وحدك دون نسخ، شارحا كل سطر، فأنت جاهز للمستوى 2. وإلا فأعِد صيغة (عدد غامض، آلة حاسبة).

تحقّق من فهمك

ماذا يثبت مشروع صغير ~80 سطرا مبرمج وحدك ؟

موارد إضافية (اختياري، للتعمّق أكثر)

اختبار المستوى 1أسئلة جديدة وأصعب للتحقق من مكتسباتك