أهداف الورشة

وصف كيفية تنفيذ الحاسوب لبرامج بلغة الآلة.
تحديد الفروق بين لغة الآلة و اللغات عالية المستوى.
شرح أثر نموذج عمل الحاسوب على كيفية تنفيذ البرامج المكتوبة باللغات عالية المستوى.

المواد المطلوبة

البند العدد
1حواسيب بحيث يكون عدد الحواسيب هو نصف عدد المتدربين (حاسوب لكل متدربين اثنين) بالإضافة إلى حاسوب للميسّر. كل حاسوب يوجد عليه حسابات لكل طالب من الطلاب المشاركين في البرنامج.0
2جهاز عرض بيانات0
3لوحة كتابة (Flip Chart)0

مناقشة

الوقت الوصف ملاحظات
مهارات و معارف متوقعة من المتدربين 0 القراءة و الكتابة. اتباع التعليمات. الحساب (العد و الجمع و الطرح). استخدام الحاسوب و البرامج الحاسوبية. كيفية تمثيل الأرقام و المحارف في الحاسوب. مفهوم الملفات و الأدلة و المسارات و استخداماتهم. استخدام المتصفح و محركات البحث. موضوعات الجلسة مقوّمات البرمجة فهم ماهية البرمجة و لغات البرمجة فهم العناصر العامة لغات البرمجة و صفاتها القدرة على إدارة الكود المصدري و تنظيم ملفاته القدرة على استخدام مفسّر أو مترجم اللغة المختارة لمعالجة ملفات الكود المصدرية و إخراج نتائج، على سطر الأوامر أو في بيئة تطوير متكاملة تأليف برنامج حاسوبي القدرة على اتّباع أساليب اختبار البرنامج و اكتشاف البقّات
النتائج المتوقعة 0 كتابة برمجية خطية بسيطة باستخدام لغة Python. تشغيل البرمجية باستخدام مفسر Python من على سطر الأوامر. اختبار البرمجية و اكتشاف الأخطاء البسيطة في بناء الأوامر البرمجية للغة Python . وصف كيفية تنفيذ الحاسوب لبرامج بلغة الآلة. تحديد الفروق بين لغة الآلة و اللغات عالية المستوى. شرح أثر نموذج عمل الحاسوب على كيفية تنفيذ البرامج المكتوبة باللغات عالية المستوى. شرح دور المفسر و المترجم في تنفيذ البرمجيات المكتوبة بلغات عالية المستوى. تعريف البيانات العددية و البيانات النصية كنوعين من الأنواع الرئيسية للبيانات التي يتعامل معها الحاسوب، و التعرف عليهما و توضيح ما بينهما من فروق.

كاسر جليدي

الوقت الوصف ملاحظات
مقدمة 0 يهدف هذا القسم الفرعي إلى إثارة فضول الطلاب وتحفيزهم لتعلم البرمجة من خلال إعطائهم تصور لما يمكن تنفيذه غن طريق برمجيات بسيطة. كما يهدف القسم إلى كسر أي حواجز نفسية لدى الطلاب لتعلم البرمجة بسبب ما يشاع عن صعوبة البرمجة و احتياجها للمتخصصين. ينوه الميسر إلى ان هذه الجلسة هي أول جلسات تعلم البرمجة. يسأل الميسر الطلبة عن ماهية البرمجة و يناقش إجاباتهم وصولا إلى بناء فهم مبسط عن ماهية البرمجة. يعرض الميسر أمثلة لبرمجيات تستخدم وحدة turtle المتوفرة مع لغة python في رسم أشكال و رسوم مشوقة. يقوم الميسر بتشغيل هذه البرامج لإظهار مخرجات هذه البرامج. يقوم الميسر بتعديلات بسيطة على البرامج بحيث تٌغَيّر المخرجات المتوقعة. يعيد الميسر تشغيل البرامج و يستعرض المخرجات الجديدة. يشير الميسر إلى مدى سهولة تنفيذ و تعديل هذه الرسوم عن طريق البرمجة. يوضح الميسر للطلاب أنهم سيكونون قادرين على كتابة برمجيات مماثلة بعد عدد صغير من الجلسات.

مناقشة

الوقت الوصف ملاحظات
كتابة و تشغيل البرنامج الأول 0 يعرض الميسر على الطلاب برنامج يقوم بطباعة عبارة بسيطة على الشاشة ثم يطلب منهم فتح محرر نصوص و كتابة البرنامج نقلا عما هو معروض أمامهم و حفظ الملف بأسم يختاره هو. يعرض الميسر كيفية تشغيل البرنامج باستخدام مفسر python من سطر الأوامر ثم يطلب من الطلاب تشغيل البرامج التي كتبوها و يساعدهم في حل أي مشاكل يواجهونها، مع شرح اسباب هذه المشاكل. يشرح الميسر مكونات البرنامج و يشير إلى أن هذا البرنامج مكتوب بلغة python و يوضح كيف استخدمنا مفسر python لتشغيله.
مقدمة إلى فكرة لغات البرمجة عالية المستوى وكيفية تنفيذ برامجها 0 يسأل الميسر الطلبة إن كان الحاسوب قادراً على فهم و تنفيذ البرنامج السابق يناقش الميسر الطلاب في إجاباتهم و يوضح ان الحاسوب غير قادر على فهم و تنفيذ هذا البرنامج لأنه لا يستطيع فهم و التعامل مع أوامر إلا الأوامر المكتوبة بلغة الألة بالنظام الثنائي و ذلك طبقا لما تعلموه في ما سلف من الجلسات. يسأل الميسر الطلاب عن الكيفية التي استطاع بها الحاسوب أن ينفذ الأمر المكتوب في البرنامج. يناقش الميسر الطلاب في آراءهم و يوضح اننا حتي نستطيع تنفيذ الأمر فإننا احتجنا لما يحول هذا الأمر من لغة python عالية المستوى و التي نستطيع نحن البشر التعامل معها إلى لغة الألة و التي يصعب علينا فهمها و التعامل معها. يوضح الميسر أن مفسر python و الذي استخدمناه من سطر الأوامر هو الذي قام بهذا التحويل. يشير الميسر إلى أن البرنامج بشكله الذي كتبناه في محرر النصوص هو ما يطلق عليه المصدر أو الكود المصدري. يشرح الميسر فكرة المفسرات و المترجمات و يوضح ما بينهم من فروق، كما يشير إلى بعض مميزات و عيوب كل من الطريقتين في تحويل البرامج إلى لغة الألة. يسأل الميسر الطلاب إن كان أي منهم يعرف اسماء لغات برمجة أخرى بخلاف لغة python التي استخدمناها. يستمع الميسر إلى إجابات الطلاب و يناقشهم فيها و يعرض عليهم اسماء العديد من لغات البرمجة و يوضح أي منها يستخدم مفسر و أي منها يستخدم مترجم. يطلب الميسر من الطلاب البحث على الانترنت عن اسماء لغات برمجة أخرى و محاولة التعرف على ما إن كانت تستخدم مفسر أم مترجم و مشاركة هذه المعلومات مع باقي الطلاب.
الربط ما بين نموذج عمل الحاسوب و كيفية تنفيذ البرامج 0 يسأل الميسر الطلاب عن كيف يقوم الحاسوب بتنفيذ البرامج المكونة من أوامر مكتوبة بلغة الألة طبقا لما تعلموه في الجلسات السالفة. يستمع الميسر لإجابات الطلاب و يراجع معهم نموذج عمل الحاسوب. يطلب الميسر من الطلاب استخدام محرر النصوص لفتح ملف البرنامج الذي كتبوه في أول الجلسة و إضافة بضع أوامر لطابعة بعض العبارات الإضافية ثم حفظ الملف. يطلب الميسر من الطلاب تشغيل الملف باستخدام مفسر python كما تعلموا سلفا في هذه الجلسة. يراجع الميسر مع الطلاب و يتأكد من نجاحهم في تنفيذ ما طلبه و يساعد من يواجه صعوبة أو مشكلة في التنفيذ في فهم اسباب هذه الصعوبة أو المشكلة و حلها. يطلب الميسر من الطلاب ملاحظة أن العبارات ظهرت على الشاشة بنفس ترتيب الأوامر في البرنامج. يشير الميسر إلى التشابه بين تنفيذ أوامر لغة الألة بالترتيب كما تعلموا في نموذج عمل الحاسوب و تنفيذ الأوامر التي كتبوها في برنامجهم بالترتيب. يوضح الميسر أن المفسر يقوم بقراءة سطور الكود المصدري بالترتيب و تحويل كل منها إلى أوامر عديدة بلغة الألة ثم تنفيذ هذه الأوامر بالترتيب، و أن هذا ما يحدث ما لم يحدث ما يغير ترتيب التنفيذ. يؤكد الميسر على وجود تناظر ما بين ترتيب تنفيذ أوامر الكود المصدري و ترتيب تنفيذ أوامر لغة الألة.
أستخدام البرنامج في القيام بعمليات حسابية 0 يوضح الميسر للطلاب أننا نستطيع أن نستخدم لغة python و دالة print في القيام بعمليات حسابية يفتح الميسر البرنامج السابق و يضيف سطر يستخدم دالة print في القيام بعملية حسابية بسيطة (جمع، طرح، إلخ...) ثم يقوم بتشغيل البرنامج. يطلب الميسر من الطلاب إعادة فتح ملف البرنامج وكتابة مجموعة من الأسطر تستخدم دالة print للقيام بعمليات حسابية مختلفة ثم إعادة تشغيل البرنامج، و يساعدهم في كتابة هذه السطور و حل ما يواجههم من مشاكل مع توضيح الرموز المختلفة المستخدمة في التعبير عن العمليات الحسابية في الحاسوب. يعرض الميسر على الطلاب مسألة حسابية مركبة من خلال قصة بحيث تتطلب المزج بين عمليات الجمع و الضرب و يطلب منهم حلها باستخدام ما تعلموه من عمليات حسابية باستخدام لغة python على الحاسوب. على سبيل المثال، تاجر يكسب سبعة جنيهات يوميا من بيع الجبن و ثلاثة جنيهات يوميا من بيع الزيتون، فكم سيكسب من بيع الجبن و الزيتون في شهر فبراير القادم؟ يراجع الميسر حلول الطلاب و يوضح لهم ان المفسر يقوم بتنفيذ عمليات الضرب قبل عمليات الجمع، وعليه، فإذا قاموا بكتابة العملية الحسابية كالآتي 7+3*28 سيحصلون على نتيجة خطأ. يشرح الميسر أولويات تنفيذ العمليات الحسابية، و يدعو الطلاب لتجربة بناء صيغ حسابية مركبة تستخدم مختلف العمليات الحسابية و توقع نتائجها بناء على اولوية تنفيذ العمليات الحسابية. يشرح الميسر كيفية استخدام الأقواس لتجاوز الترتيب الطبيعي لتنفيذ العمليات. يطلب الميسر كتابة الأمر الازم لحل المسألة التي عرضها عليهم من خلال القصة باستخدام الأقواس للوصول للنتيجة الصحيحة و يساعدهم في حل ما يستعصي عليهم حتى يتأكد من نجاحهم جميعا في ذلك. يشير الميسر اننا بهذا نكون قادرين على إجراء أي عمليات حسابية و اختيار الترتيب الصحيح للقيام بهذه العمليات.
البيانات العددية و البيانات النصية 0 يطلب الميسر من الطلاب إجراء عملية جمع لنصين، يحتوي كل منهما على عدد و ملاحظة النتيجة (أي ان الأرقام مكتوبة بين علامات تنصيص). يسأل الميسر الطلاب عن رأيهم في السبب في أن الحاسوب لم يقم بجمع الأرقام، بل عرضهم كل بجوار الآخر. بدون أن يعرض الإجابة الصحيحة أو يؤكد على إجابة أي من الطلاب، يطلب الميسر من الطلاب إعادة التجربة بعد رفع علامات التنصيص و ملاحظة النتيجة. يشير الميسر أن رفع علامات التنصيص جعل مفسر python يقوم بالعملية الحسابية كما توقعنا. يسأل الميسر عن رأي الطلاب في الفرق في المعني بين كتابة الأرقام بعلامات تنصيص أو بدونها. يناقش الطلاب في إجاباتهم و يشرح أن علامات التنصيص تشير أن ما بينها هو نص يتكون من محارف يجب أن تحفظ على شكلها بدون محاولة فهمها، حتى و إن كانت تتكون من أرقام، و بالتالي يتعامل معها المفسر على هذا الأساس. أما إن لم نستخدم علامات التنصيص فإن المفسر يحاول فهم معني هذه المحارف و بالتالي يعرف أنها أعداد و يعاملها على هذا الأساس. يطلب الميسر من الطلاب تجربة جمع نصوص مختلفة و ضرب عدد في نص، و يوضح من خلال التجارب معنى هذه العمليات. يوضح الميسر أن البيانات الرقمية و البيانات النصية هما نوعين من الأنواع الأساسية للبيانات التي يستطيع الحاسوب التعامل معها، و يشير إلى أن الحاسوب يميز كل منهما عن الآخر و يتعامل مع كل منهما بشكل مختلف، و يشرح الفرق بينهما بالربط مع ما تعلموه سلفا من تمثيل البيانات في الحاسوب. يشير الميسر إلى أننا بهذا نكون تعلمنا نوعين من الأنواع الأساسية للبيانات و كيفية التفرقة بينهما و كيف يتعامل الحاسوب مع كل منهما.

مناقشة

الوقت الوصف ملاحظات
خاتمة 0 يطلب الميسر من كل طالب كتابة أهم ما تعلمه في هذه الجلسة على ورقة و يقوم بجمع هذه الأوراق منهم لتقييم مدى استفادتهم من الجلسة. يبين الميسر إلى أننا تعرضنا في هذه الجلسة للموضوعات الأتية: اللغات عالية المستوى و ما بينها وبين لغة الآلة من فروق ما هو المترجم و ما هو المفسر و ما الفرق بينهما اسماء بعض لغات البرمجة عالية المستوى كتابة برنامج بسيط بلغة python استخدام دالة print في طباعة رسائل على الشاشة. التناظر بين كيفية تنفيذ المفسر لبرنامج بلغة python و نموذج عمل الحاسوب القيام بعمليات حسابية باستخدام لغة python، و فهم أولوية تنفيذ هذه العمليات و تغيير ترتيب تنفيذ هذه العمليات باستخدام الأقواس عندما تحتاج لذلك. نوعين من الأنواع الأساسية للبيانات التي يتعامل معها الحاسب كيفية التفرقة بين النصوص و البيانات العددية و كيفية تعامل الحاسوب مع كل منهما. يختم الميسر الجلسة بالإجابة عن أي أسئلة في هذه الموضوعات
قراءات و تدريبات إضافية 0 بحث: التعرف على اسماء لغات برمجة عالية المستوى بخلاف ما ذكر في الجلسة و استخدامات هذه اللغات و اسباب وجود هذا التنوع في اللغات عالية المستوى بحث: التعرف على بعض المصادر الموجودة على شبكة الأنترنت لتعلم البرمجة و بعض مصادر تعلم لغة python

مناقشة

الوقت الوصف ملاحظات
موضوعات الجلسة 0 إطار منهج الحوسبة لمشروع تمكين الشباب رقميا/الأهداف التعليمية#مقوّمات البرمجة فهم العناصر العامة لغات البرمجة و صفاتها القدرة على إدارة الكود المصدري و تنظيم ملفاته القدرة على استخدام مفسّر أو مترجم اللغة المختارة لمعالجة ملفات الكود المصدرية و إخراج نتائج، على سطر الأوامر أو في بيئة تطوير متكاملة إطار منهج الحوسبة لمشروع تمكين الشباب رقميا/الأهداف التعليمية#تأليف برنامج حاسوبي القدرة على اتّباع أساليب اختبار البرنامج و اكتشاف البقّات
النتائج المتوقعة 0 كتابة برنامج خطي بسيط يستخدم المتغيرات لحفظ و التعامل مع البيانات العددية و النصية باستخدام لغة Python. استدعاء دوال لغة python طلب و تلقي بيانات من المستخدم و حفظها في متغيرات استخدام العبارات الشرطية و المقارنات في برامج python تعريف البيانات البوليانية و شرح كيفية استخدامها وحفظها في متغيرات استدعاء وسائل الكيانات النصية في لغة python في تحديد نوع البيانات تشغيل البرنامج باستخدام مفسر python من على سطر الأوامر. اختبار البرمجية و اكتشاف الأخطاء البسيطة في بناء الأوامر البرمجية للغة Python أو في منطق البرنامج.

كاسر جليدي

الوقت الوصف ملاحظات
مقدمة 0 يشير الميسر إلى أن هذه الجلسة تبني على ما تعلمه الطلاب سلفا بحيث تمكنهم من بناء برامج أكثر تطورا من تلك التي كتبوها في الجلسة السابقة . يوضح الميسر أن هذه الجلسة ستتعرض لموضوعات لا غناً عنها لبناء أي برنامج حاسوبي و هي: المتغيرات و أنواعها و كيفية استخدامها كيفية طلب بيانات من مستخدم البرنامج و كيفية حفظها و التعامل معها كيفية بناء برامج تتصرف بأشكال مختلفة بناء على شروط محددة أو طبقا لرغبة المستخدم. كيفية المقارنة بين القيم المختلفة. ماهية البيانات البوليانية و أهميتها و كيفية استخدامها كيفية التأكد من نوع البيانات التي أدخلها المستخدم. يوضح الميسر أننا سنتعرض لهذه الموضوعات من خلال العاب و تجارب عملية على الحاسوب.

مناقشة

الوقت الوصف ملاحظات
المتغيرات 0 يشير الميسر إلى أننا سنبدأ الجلسة بلعب لعبة أين الكرة ثم يبدأ في تنفيذ اللعبة يشير الميسر إلى اننا سنبدأ في تنفيذ ما تعلمناه في اللعبة على الحاسوب بشكل عملي باستخدام لغة python يكتب الميسر برنامج بسيط ينشئ متغيرين و يضع في أحدهما رقم و في الأخر نص ثم يستدعي دالة print لطباعة قيمتيهما. يطلب الميسر من الطلاب تجربة كتابة برامج مشابهة و يساعدهم في فهم و حل ما يواجهونه من مشكلات. يسأل الميسر الطلاب عن أوجه التشابه بين المتغيرات في البرنامج السابق و الصندوق في اللعبة، ويستمع إلى إجاباتهم و يناقشهم فيها و يوضح من خلال النقاش النقاط التالية: مثلما كان لكل صندوق في اللعبة اسماً يميزه، فإن لكل متغير في لغة python اسماً يميزه و نستخدمه في الإشارة إليه في البرامج، و يوضح كذلك ان اسم المتغير في لغة python يجب أن يتكون من تركيبة من الحروف و الأرقام و علامة "_" مع مراعاة ألا يبدأ اسم المتغير برقم و يستعين باسماء المتغيرات المستخدمة في البرنامج للتوضيح النقطة السابقة. استخدمت المتغيرات في المثال السابق لحفظ بيانات نصية و أخرى عددية بشكل مشابه لاستخدام الصندوق لحفظ رقم الكوب التالي في اللعبة، و يشير كذلك إلى ان استخدام معامل "=" (assignment operator) لحفظ القيمة في المتغير يماثل وضع الوريقة التي تحتوي على رقم الكوب التالي في الصندوق. قامت دالة print بالإطلاع على قيمة المتغير حتى تستطيع طباعته على الشاشة مثلما قام الطالب بقراءة الورقة الموجودة في الصندوق ليستطيع التعرف على رقم الكوب التالي. يوضح الميسر كذلك أن لكل متغير نوع هو نفس نوع البيانات المخزنة فيه، و ان مفسر لغة python يحدد نوع المتغير (متغير نصي أو عددي أو غير ذلك) بناء على القيمة المحفوظة فيه. و يشير إلى أن بعض لغات البرمجة الأخرى تستخدم طرق مغايرة لتحديد نوع المتغير. يوضح الميسر أن مفسر python يحدد طريقة تعامله مع المتغير بناء على نوعه، و بالتالي ينفذ عمليات الجمع و الضرب على المتغيرات بطرق مختلفة، كل حسب نوعه. يدعو الميسر الطلاب لتجربة ذلك عن طريق كتابة برنامج بسيط ينشئ متغيرين عدديين ثم يقوم بطباعة حاصل جمع هذين المتغيرين، و يتبع ذلك بإنشاء متغيرين أخرين نصيين و يقوم بطباعة حاصل جمع هذين الآخرين. يساعد الميسر الطلاب في تنفيذ المطلوب ثم يعرض عليهم نموذج لبرنامج صحيح و يستعرض نتيجة تنفيذه. يطلب الميسر من الطلاب مقارنة ما كتبوه بالبرنامج المعروض امامهم، ثم يطلب ممن كتب برنامجه بشكل مختلف توضيح الإختلافات و يناقشه في ما كتبه بحيث يوضح لباقي الطلاب اسباب هذه الفروق و أثرها. إذا ما استخدم أحد الطلاب متغيرا جديدا لحفظ ناتج الجمع ثم قام بطباعة قيمة هذا المتغير الجديد، يشير الميسر إلى أنه سيقوم بشرح هذا الحل لاحقا. يعرض الميسر مثالا يقوم بنسخ قيمة متغير في متغير أخر، و يسألهم عن تصورهم لما سيقوم هذا الأمر بفعله. يستمع الميسر لآراء الطلاب و يوضح معنى هذا الأمر ثم يدعوهم لتجربة هذا. بعد نجاحهم في تجربة الأمر السابق، يعرض الميسر على الطلاب أمر يقوم بعملية حسابية على متغير ثم يحفظ نتيجة العملية الحسابية في نفس المتغير. يسأل الميسر عن تصورالطلاب لما سيقوم هذا الأمر بفعله و يناقشهم في إجاباتهم و يوضح كيف يتم تنفيذ هذا الأمر و أثره، و يدعوهم لأقتراح تنويعات مختلفة على هذا الأمر و تجربتها. يشير الميسر إلى اننا قمنا في هذا التجارب بتغيير قيمة المتغير مثلما كنا نقوم بتبديل الورقة الموجودة في الصندوق في اللعبة بأخرى. يشير الميسر إلى ما كتبه الطلاب سلفا من أوامر لجمع متغيريين عددين و أخرين نصيين و طباعة ناتجي الجمع، و يسأل الطلاب إذا ما كان في وسعهم الأن تصور حل أخر لهذا المثال. يستمع الميسر إلى إجاباتهم و يناقشهم فيها ثم يعرض عليهم حلأً يستخدم متغير ثالث لحفظ قيمة جمع المتغيريين الأولين، ثم استدعاء دالة print لطباعة قيمة هذا المتغير الثالث. يشير الميسر إلى انه دائماً ما يوجد حلول عديدة و متنوعة لكل مشكلة، و ان من الطبيعي إختلاف ما سيتوصلون له من حلول و ما سيكتبونه من برامج بعضها عن بعض. يطلب الميسر من الطلاب إضافة اوامر إلى برنامجهم تقوم بحفظ العدد 3 في احد المتغيرات التي استخدموها سلفا في حفظ الأعداد ثم طباعة حاصل ضرب هذا المتغير في أحد المتغيرات النصية. يتأكد ألميسر من أن الطلاب قاموا بكتابة البرنامج بشكل صحيح و أنهم مدركين لمعنى عملية ضرب عدد في نص و التي تم شرح معناها في الجلسة السابقة. يدعو الميسر الطلاب لاستخدام ما تعلموه حتى الأن عن المتغيرات في حل المثال الذي تعرضوا له في الجلسة السابقة (تاجر يكسب سبعة جنيهات يوميا من بيع الجبن و ثلاثة جنيهات يوميا من بيع الزيتون، فكم سيكسب من بيع الجبن و الزيتون في شهر فبراير القادم؟) بدون الحاجة لاستخدام الأقواس، و يستخدم هذا المثال ليؤكد على اهمية اختيار اسماء واضحة المعنى للمتغيرات حتى يصبح البرنامج اسهل في القراءة و الفهم. يدعو الميسر الطلاب للتطوع لتلخيص ما تعلموه عن خواص المتغيرات و طرق استخدامها، و يختار احد المتطوعين و يساعده و يتأكد من ذكر كافة ما تعرضت له الجلسة من نقاط.
طلب و تلقي البيانات من المستخدم 0 يشير الميسر أننا قد كتبنا كل ما تعاملنا معه من بيانات حتى الأن في متن البرنامج، و أن ذلك يستدعي تغيير البرنامج كلما رغبنا في التعامل مع ارقام أو نصوص أخرى. و يوضح ذلك من خلال ما تم كتابته من أوامر في الأمثلة السابقة. يسأل الميسر الطلاب عن رأيهم فيما ينبغي للبرنامج القيام به حتي يمكننا استخدامه في التعامل مع بيانات مختلفة بدون الحاجة إلى تعديله في كل مرة. يستمع الميسر إلى آراء الطلاب و يوضح أن أحد الطرق الممكنة هي أن نجعل البرنامج يبدأ بسؤال المستخدم عن القيم التي يرغب في أن يتعامل البرنامج معها، قبل أن يقوم بما هو مطلوب من عمليات على هذه القيم. يشير الميسر إلى أننا سنتعلم الأن كيف يمكن للبرنامج أن يطلب من المستخدم إدخال بيانات، و كيف يقوم بتخزينها و التعامل معها. يعرض الميسر مثالا لبرنامج يستدعي دالة input لطلب بيان من المستخدم و تخزين هذا البيان في متغير، ثم يقوم بطباعة قيمة المتغير، و يسألهم عن رأيهم في ما سينتج عن تنفيذ هذا البرنامج. يستمع الميسر إلى آراء الطلاب و يوضح من خلال النقاش ما سينتج عن تنفيذ هذا الأمر. يطلب الميسر من الطلاب تجربة استدعاء دالة input لدعوة المستخدم لإدخال اسمه ثم طباعة رسالة تحية بأسم المستخدم على الشاشة. يراجع الميسر ما كتبه الطلاب من برامج و يساعدهم في حل ما يستعصي عليهم حتي يتأكد من نجاحهم جميعا في تنفيذ المطلوب. يشرح الميسر أن في هذا المثال يقوم مفسر python باستدعاء دالة input التي تقوم بطباعة رسالة تدعو المستخدم لأدخال بيان ثم تقوم بإرجاع هذا البيان في محلها في البرنامج عند ضغط المستخدم على زر Enter. و بعد انتهاء دالة input من دورها يقوم معامل "=" بحفظ القيمة التي أرجعتها في المتغير المسمى على يسار معامل "=". يشير الميسر إلى أن لغة python تتيح للمبرمج أداة لتضمين نص في نص آخر اثناء الطباعة، و يستعرض استخدام s%. يطلب الميسر من الطلاب تجربة استخدام s% في حل المثال السابق. يلخص الميسر ما تعرض له هذا القسم من معلومات عن دالة input و s% ( أو قد يدعو أحد الطلاب للقيام بهذا التلخيص) هذه الأمثلة تعتمد على استخدام إصدار 3.0 فما أحدث من لغة python. في الإصدارات الأقدم، تتصرف دالة input بشكل مختلف، مما يؤدي إلى حدوث أخطاء في تنفيذ البرامج. إذا لم تتوافر إصدارة 3.0 أو احدث، على الأجهزة المستخدمة، يوجه الميسر الطلاب لاستدعاء دالة raw_input كبديل لدالة input.
العبارات الشرطية و المقارنات و البيانات البوليانية 0 يبدأ الميسر هذا القسم بالإشارة إلى أن دالة input دائما ما تقوم بإرجاع بيان نصي و بالتالي يكون المتغير المستخدم لتخزين هذا البيان متغيراً نصياً، و يطلب من الطلاب التأكد من ذلك عن طريق تجربة طباعة حاصل ضرب عدد في هذا المتغير. يسأل الميسر الطلاب عن رأيهم في أنسب الطرق ليتمكن البرنامج من القيام بعمليات حسابية على ما يدخله المستخدم من بيانات. يستمع الميسر إلى آراء الطلاب و يوضح أن لغة python تتيح حلول عدة، منها دالة تحول البيانات النصية إلى أخرى رقمية، و يشير الميسر إلى اننا سنعرض الأن كيفية استدعاء هذه الدالة. يعرض الميسر على الطلاب نموذج لاستدعاء دالة int لتحويل نص إلى رقم صحيح و يشرح لهم كيف تعمل هذا الدالة. يطلب الميسر من الطلاب كتابة برنامج يسأل المستخدم عن سنه، ثم يبلغه بعدد السنوات المتبقية لبلوغه العشرين من عمره، و يساعدهم في كتابة و تنفيذ البرنامج. يسأل الميسر الطلاب عن ما سيحدث إذا ما ادخل المستخدم حروفا عوضا عن عدد سنوات عمره. يستمع الميسر إلى إجاباتهم ثم يطلب منهم تجربة ذلك. يتأكد الميسر من حدوث خطا في التنفيذ عند جميع الطلاب، ثم يشرح لهم معني هذا الخطأ. يوضح الميسر أن مفسر لغة python و المفسرات و المترجمات بشكل عام تحاول أن تعطي رسائل تفسر ما واجهته من اخطاء في البرامج، إلا ان هذه الرسائل غالبا ما تحتاج من المبرمج تحليلها لفهم اسبابها. يوضح الميسر أن سبب هذا الخطأ هو أنه لا توجد طريقة مُعرّفة للغة python لتحويل الحروف إلى ارقام، و عليه فإن دالة int لم تستطع القيام بما هو مطلوب منها. يطلب الميسر من الطلاب محاولة ابتكار طرق لحل هذه المشكلة، و يوضح من خلال النقاش أن احد الطرق الممكنة للحل هي الا نقوم بتنفيذ الأمر الذي يستدعي دالة int إلا عند التحقق من أن النص الذي ادخله المستخدم يتكون بشكل حصري من أرقام، و لا يحتوي على محارف أخرى عوضا عن الأرقام أو بالإضافة إليها. يشير الميسر إلى أن هذا يتطلب ألا يتم تنفيذ كل ما يحتويه البرنامج من أوامر بشكل متوالي كما تعلمنا و شهدنا في كل الأمثلة السابقة، بل أن يتم تنفيذ بعض هذه الأوامر فقط في حالة تحقق شروط محددة. و يؤكد الميسر ان إمكانية اختيار تنفيذ الأوامر و عدم تنفيذها بناء على تحقق شروط محددة هذه هي من أهم لبنات بناء البرامج و من أهم عناصر لغات البرمجة. يعرض الميسر على الطلاب مثالا لبرنامج ينشئ متغيراً نصيا و يستخدم العبارات الشرطية و وسيلة isdigit المعرفة على كيانات النصوص و دالة int في تحويل النص إلى عدد فقط إذا ما كان يتكون من ارقام. و يتبع ذلك بإجراء بعض العمليات الحسابية على نتيجة هذا التحويل للتأكد من أن المفسر قادر على التعامل مع نتيجة التحويل كبيان عددي. يسأل الميسر الطلاب عن رأيهم لما سيقوم هذا المثال بتنفيذه، ثم يطلب منهم نقل البرنامج كما هو و تجربته عدة مرات مع استخدام قيم مختلفة للمتغير في كل مرة. يساعد الميسر الطلاب في كتابة البرنامج و حل ما يواجهونه من مشاكل، و يوجههم لاستخدام قيم للمتغير تظهر ما يقوم به البرنامج حال تحقق الشرط و في حال عدم تحققه. يسأل الميسر الطلاب عن ما لاحظوه عند تجربة المثال السابق، و يوضح من خلال النقاش أن البرنامج لا يقوم بتنفيذ الأسطر التي تحتوي على دالة int إلا عندما يحتوى المتغير النصي على أرقام فقط لا غير، و يشير إلى اننا بهذا استطعنا تلافي حدوث خطأ في البرنامج كما حدث معنا سلفا في المثال الذي يقوم بحساب عدد السنوات المتبقية لبلوغ كل طالب العشرين من عمره. يشير الميسر أن المثال السابق يحتوي على عدد من الصيغ الجديدة في كتابة الأوامر تعكس عناصر و مفاهيم جديدة لم نعرض لها من قبل في ما تعلمناه عن لغة python، و يدعو الطلاب إلى الإشارة لما لاحظوه من اختلاف في صياغة الأوامر بين هذا البرنامج و ما سبق لهم كتابته، و يناقشهم فيما لاحظوه. يشير الميسر من خلال هذا النقاش إلى الاختلافات التالية: أن isdigit كتبت بعد اسم المتغير مفصولة عنه بنقطة. أن isdigit كتبت بعد عبارة if و على نفس سطرها و ان هذا السطر انتهى بعلامة ":" أن الأوامر التالية لسطر if لم تبدأ من أول السطر و لكن كل سطر بدأ بعدد ثابت من المسافات قبل كتابة الأمر. يبدأ الميسر بشرح الصيغة المستخدمة في استدعاء وسيلة isdigit و يوضح ان المتغير في هذه الصيغة يطلق عليه اسم "كيان" (object) و أن isdigit هي دالة معرفة على هذا الكيان بحيث تستدعى للقيام بعمليات محددة عليه و على ما يحتويه من بيانات و يطلق عليها في هذا السياق اسم "وسيلة" (method). يوضح الميسر كذلك أن مفهوم الكيانات و ما يُعرّف عليها من وسائل و خصائص هو أحد اهم مفاهيم لغات البرمجة الحديثة، و اننا سنتعرض له بالتفصيل في جلسات لاحقة. و يشير إلى أن لغة python تتعامل مع كافة البيانات و المتغيرات على أنها كيانات (objects). يشرح الميسر كيف أن وسيلة isdigit في هذا الأمر تقوم بالتأكد مما إذا كان المتغير النصي الذي يسبقها و يفصلها عنه نقطة يتكون حصريا من أرقام. يتلو الميسر ذلك بشرح أداة الشرط if، و يوضح أنها تستخدم في أول العبارة الشرطية و تسمح لنا بكتابة مجموعة من الأوامر لا يتم تنفيذها إلى في حالة تحقق شرط معين، و أن هذه الأوامر تكتب في السطور التالية للسطر الذي يحتوي على أداة الشرط، كما يوضح أن ما يتلو أداة الشرط على نفس سطرها و يسبق علامة ":" هو الشرط الذي يجب تحققه حتى يتم تنفيذ الأوامر، و هو وسيلة isdigit في هذا المثال. يوضح أن اداة الشرط if مصممة للتعامل مع أي شرط، و أنها لكي تستطيع ذلك، يجب الا تهتم بماهية الشرط و لكن تهتم فقط بما إذا كان الشرط قد تحقق أم لا. و يشير الميسر إلى أن لأي شرط هناك حالتين لا ثالث لهما، فإما أن يكون الشرط متحققاً، أي أن النص في المثال السابق يتكون بشكل حصري من أرقام في حالتنا هذه، أو أن يكون الشرط غير متحقق، أي أن النص يحتوي على محارف أخرى بخلاف الأرقام، و أن كل ما تحتاجه أداة الشرط if للتعامل مع أي شرط هو أن تكون قادرة على التعامل مع الشرط على أنه معلومة أو بيان لا يمكن أن يحتمل إلا حالة من اثنتين، إما التحقق الشرط أو عدمه. يوضح أن هذا يستلزم أن تدعم لغة python (و لغات البرمجة بشكل عام) نوع جديد من البيانات لا يحتمل إلا هاتين الحالتين، إما تحقق الشرط و نعبر عنه بلفظة "صواب" أو "True" أو عدم تحققه و نعبر عنه بلفظة "خطأ" أو "False"، و أن هذا النوع البيانات يدعى البيانات البوليانية و هو أحد الأنواع الأساسية للبيانات، و يشير الميسر إلى أن كل لغات البرمجة تقريبا تدعم هذا النوع بالأضافة إلى البيانات النصية و البيانات العددية. يؤكد الميسر أن أداة الشرط if تقبل أي شئ يوضع بعدها و قبل علامة ":" كشرط طالما تستطيع التعامل معه كبيان بولياني، و أنه عندما استخدمنا وسيلة isdigit في المثال السابق كشرط، قام المفسر باستدعاء هذه الوسيلة للتحديد ما إذا كان الشرط قد تحقق ثم قدم لأداة الشرط if القيمة البوليانية التي ارجعتها الوسيلة لتعبر عن حالة الشرط من التحقق أو عدمه. ينوه الميسر إلى أننا سنتعامل مع اشكال مختلفة للشروط في اثناء تعلمنا للبرمجة، و أن كل هذه الشروط تنتج قيم بوليانية تستطيع أدوات الشرط التعامل معها. بدأ الميسر شرح مفهوم كتل الأوامر و يوضح أنها تستخدم لتحديد مجموعة أوامر يتم التعامل معها عند تنفيذها ككتلة واحدة، فإما أن تنفذ كلها أو لا ينفذ أي منها. يوضح الميسر أن لغة python تستخدم المسافات في أول السطر لتمييز كتلة الأوامر عن ما قبلها و ما بعدها، و أن كتلة الأوامر الواحدة يجب يتوافر فيها على الأقل الشروط التالية: أن ينتهي أخر سطر قبل بدء كتلة الأوامر بعلامة ":" أن تبدأ بنفس العدد من المسافات كحد أدنى أن تكون في سطور متوالية، لا يفصلها عن بعضها أي سطر لا ينتمي لهذه الكتلة يستخدم الميسر المثال السابق ليوضح كيف أن كتلة الأوامر المستخدمة كجواب لأداة الشرط if تحقق هذه الشروط. يشرح الميسر كيف أن كتلة الأوامر قد تتضمن كتل فرعية، و أن هذه الكتل الفرعية يجب أن تحقق جميع الشروط السابقة، بالإضافة إلى أن يكون عدد المسافات التي يبدأ بها كل سطر من سطورها أكبر من عدد المسافات التي يبدأ بها كل سطر من سطور الكتلة الرئيسية التي تحتويها، و يستخدم الميسر أمثلة على تنويعات مختلفة لتركيبات كتل الأوامر ليوضح كافة النقاط السابقة و يطلب من الطلاب شرح هذه التركيبات، و يجب أن يحرص أن تحتوي هذه الأمثلة على نماذج من الأخطاء الشائعة و التي يجب أن يتعرف الطلاب عليها من خلال النقاش. بعد أن يتأكد الميسر من فهم الطلاب كل ما سبق، يشرح التركيب العام لعبارات if الشرطية، و يوضح أنها تبدأ بأداة الشرط if يتبعها الشرط على السطر نفسه و ننهي السطر بعلامة ":"، ثم نتبع هذا السطر بكتلة أوامر تحتوي على الأوامر التي يجب أن تنفذ في حال تحقق الشرط. يطلب الميسر من الطلاب تعديل البرنامج السابق ليتضمن أوامر إضافية تنفذ في حال تحقق الشرط و أوامر أخرى تنفذ في جميع الأحوال بعد تنفيذ العبارة الشرطية، و يتأكد من نجاحهم جميعا في ذلك. يسأل الميسر الطلاب عن ما يقوم البرنامج به حال عدم تحقق الشرط، و يناقشهم في إجاباتهم ليوضح أنه ليس هناك أوامر محددة تنفذ فقط في حال عدم تحقق الشرط. يشير الميسر أن باستطاعتنا إضافة جزء جديد للعبارة الشرطية لتشمل أوامر تنفذ في حال عدم تحقق الشرط. يعرض الميسر كيفية استخدام else و يطلب من الطلاب إضافة جزء إلى البرنامج الذي كتبوه ينبه المستخدم أن ما أدخله ليس برقم إذا لم يتحقق شرط isdigit. يساعد الميسر الطلاب في تنفيذ المطلوب، ثم يوضح للجلسة أن else يجب أن تنتمي لنفس كتلة الأوامر التي تنتمي إليها أداة الشرط if، و أن الأوامر التي تنفذ حال عدم تحقق شرط isdigit يجب أن تكون كتلة أوامر منفصلة تتبع نفس قواعد كتل الأوامر التي شُرحت سلفاً، و أن كتلتي الأوامر التاليتين لعبارتي if و else هما كتلتين فرعيتين من كتلة الأوامر التي تحتوي if و else. يطلب الميسر من الطلاب العودة إلى المثال الذي يُبلغ المستخدم بعدد السنوات المتبقية لبلوغه العشرين من عمره و تعديله بحيث يقوم بإبلاغ المستخدم بعدد السنوات المتبقية فقط في حالة ما إذا أدخل المستخدم أرقاما، أما إذا ما قام بإدخال محارف أخرى، فيعطيه رسالة بأنه أخطأ في إدخال سني عمره. يطلب الميسر من الطلاب تجربة إدخال عدد من السنوات يزيد عن العشرين و ملاحظة النتيجة. يشير الميسر إلى أن البرنامج قام بطباعة عدد سلبي على أنه عدد السنوات المتبقية، و أن هذا غير منطقي. يسأل الميسر عما نحتاج إلي عمله حتى يتصرف البرنامج بطريقة منطقية و يوضح من خلال النقاش اننا نحتاج إلى التحقق مما إذا كان المستخدم قد تخطى العشرين من عمره ام لا، و ألا نقوم بحساب عدد السنوات إلا إذا كان سن المستخدم أقل من العشرين عاما. يوضح الميسر أن لغة python تتيح عدد من المعاملات التي تمكننا من مقارنة قيمتين ببعضهما البعض، و يعرض على الطلاب معاملات المقارنة المختلفة التي توفرها لغة python. يشير الميسر إلى أن هذه المقارنات تماثل وسيلة isdigit في أنها لا تحتمل إلى حالتين، إما الصواب، أي أن المعامل يعبر عن العلاقة الحقيقية بين القيمتين، أو الخطأ، أي أن المعامل لا يعبر عن هذه العلاقة، و على هذا فإن هذه العلاقة تمثل قيمة بوليانية يمكن أن نستخدمها كشرط في عبارة if. يطلب الميسر من الطلاب تجربة تعديل البرنامج ليقوم بطباعة عدد السنوات المتبقية إذا ما كان عمر الطالب لا يتعدى العشرين عاما، فإن كان قد تخطاها، نقوم بطباعة رسالة توضح ذلك. يساعد الميسر الطلاب في كتابة البرنامج و يوضح من خلال النقاش و التجربة أن الحل يتطلب أن نكتب العبارة شرطية اللازمة للتحقق من عمر المستخدم كجزء من كتلة الأوامر التي تشكل متن جواب الشرط للعبارة الشرطية التي تحتوي على وسيلة isdigit. إذا لم يستطع بعض الطلاب تعديل البرنامج بشكل صحيح، يعرض الميسر نموذج للحل باستخدام اسلوب تضمين عبارة شرطية في عبارة شرطية أخرى السابق ذكره. يشرح الميسر كيفية استخدام معامل not على القيم البوليانية و أثر استخدامه على الشروط في العبارات الشرطية. يوضح الميسر أن، كما هو معتاد، هناك العديد من الطرق لكتابة كل برنامج و يدعو الطلاب للبحث على الانترنت عن كيفية استخدام elif في عبارة if الشرطية، ثم يطلب منهم كتابة برنامج يقوم بنفس ما يقوم به البرنامج السابق، و لكن بدون تضمين عبارة if في قلب الأخرى. يترك الميسر الفرصة للطلاب للمحاولة لمدة ربع ساعة يجيب فيها اسئلتهم ثم يعرض عليهم مثال للبرنامج المطلوب و يقوم بشرحه. يطلب الميسر ممن لم يستطع كتابة البرنامج وحده تجربة البرنامج المعروض امامهم.

مناقشة

الوقت الوصف ملاحظات
خاتمة 0 يطلب الميسر من كل طالب كتابة أهم ما تعلمه في هذه الجلسة على ورقة و يقوم بجمع هذه الأوراق منهم لتقييم مدى استفادتهم من الجلسة. يبين الميسر إلى أننا تعرضنا في هذه الجلسة للموضوعات الأتية: المتغيرات العددية و المتغيرات النصية و كيفية استخدامهم استخدام دالة input في طلب بيانات من المستخدم استخدام دالة int في التحويل من نصوص إلى أعداد استخدام s% في طباعة البيانات النصية البيانات البوليانية و كيفية استخدامها عبارة if الشرطية وتنويعاتها المختلفة if و if-else و if-elif-else كتل الأوامر و خصائصها و كيفية استخدامها مفهوم الكيانات و الوسائل و وسيلة isdigit المعرفة على الكيانات التي تمثل بيانات نصية معاملات المقارنة المختلفة (>، <، ==، =!، إلخ ...) و كيفية استخدامها معامل not و كيفية استخدامه على القيم البوليانية يختم الميسر الجلسة بالإجابة عن أي أسئلة في هذه الموضوعات
قراءات و تدريبات إضافية 0 مشروع: تجربة المقارنة بين النصوص (مثلا كتابة برنامج يقسم الطلاب إلى أربع مجموعات أ و ب و ج و د حسب أسماءهم) قراءات إضافية: كيف يمكن التأكد مما إذا كان الرقم الذي قام المستخدم بإدخاله هو رقم يحتوي على كسور (أي يحتوي على نقطة عشرية)

مناقشة

الوقت الوصف ملاحظات
موضوعات الجلسة 0 مقوّمات البرمجة فهم العناصر العامة للغات البرمجة و صفاتها القدرة على إدارة الكود المصدري و تنظيم ملفاته القدرة على استخدام مفسّر أو مترجم اللغة المختارة لمعالجة ملفات الكود المصدرية و إخراج نتائج، على سطر الأوامر أو في بيئة تطوير متكاملة تأليف برنامج حاسوبي القدرة على اتّباع أساليب اختبار البرنامج و اكتشاف البقّات حلّ المشكلات التعرف على الخطوات الأساسية لحل المشكلات (Problem Solving Techniques): تحديد و تحليل المشكلة تطوير بدائل للحلّ اختيار أفضل البدائل تطبيق البديل المختار قياس فاعلية الحلّ المختار القدرة على تطبيق خطوات حل المشكلات على مشكلات عملية بسيطة التعرف على و فهم بعض إستراتيجيات حل المشكلات (تحليل المشكلة إلى مشاكل ابسط، جمع المعلومات، التجريد، العصف الذهني، إلخ...)
مقدمة 0 ينوه الميسر إلى أن هذه الجلسة ستبني على ما تعلمه الطلاب في الجلسات السابقة بحيث تمكنهم من كتابة برامج أكثر تطورا و أكثر نفعا. يسأل الميسر الطلاب إذا ما كان في استطاعتهم كتابة برنامج يماثل الذي كتبوه في المرة السابقة و لكنه يقوم بحساب عدد السنوات المتبقية لبلوغ العشرين لطالبين، عوضا عن طالب واحد. بدون التطرق لمناقشة إجاباتهم على السؤال السابق، يسألهم الميسر عن كيفية تعديل البرنامج ليقوم بحساب عدد السنوات المتبقية لبلوغ العشرين لكل طالب من طلاب فصل دراسي. يناقش الميسر الطلاب في آرائهم و يوضح أنه من الغير عملي إعادة كتابة نفس الأوامر عدد من المرات بعدد الطلاب المطلوب حساب السنوات المتبقية لهم و ذلك للأسباب التالية: إعادة كتابة نفس الخطوات هي عملية تكرارية مملة تستنزف الكثير من وقت الطلاب دون أن تتطلب منهم استدعاء قدراتهم الذهنية، و بالتالي هي عملية يفضل أن تترك للألات للقيام بها. لا يمكن ان نحدد عدد الطلاب في الفصل الدراسي بشكل مسبق نظرا لأن هذا العدد يتغير من فصل إلى اخر، و بالتالي نحتاج إلى تعديل البرنامج ليلائم كل فصل. يسأل الميسر الطلاب عن الخواص التي يرون أنهم في حاجة لإضافتها للغة python حتى تستطيع تنفيذ ما هو مطلوب بشكل أكثر كفاءة. يناقش الميسر مقترحات الطلاب و كيفية حلها للمشكلة المطروحة، كما يناقش معهم كيفية تفكيرهم سعيا للوصول لهذه المقترحات، و من خلال النقاش يؤكد على: أهمية وصف المشكله بشكل دقيق (مثلا، توضيح أن المطلوب إدخال قائمة بأعمار الطلاب، على أن يعرض البرنامج على الشاشة عدد السنوات المتبقية لكل طالب، مع ذكر أن عدد البيانات في القائمة المدخلة غير محدد سلفاً) قيمة تجزيئ المشكلة لمشاكل اصغر و ابسط في الحل، مع وصف كل جزء منها بدقة (على سبيل المثال، تجزئة هذه المشكلة إلى كيفية إدخال البيانات و كيفية حفظ هذه البيانات و كيفية تنفيذ الأوامر اللازمة لحساب عدد السنوات المتبقية على كل بيان منها) يطلب الميسر من الطلاب تسجيل مقترحاتهم و إعادة التفكير فيها في نهاية الجلسة. ينوه الميسر إلى أننا سنتعلم في هذه الجلسة بعض الاساليب التي يمكن أن نستخدمها لحل هذه المشكلة.
البيانات المركبة 0 يطلب الميسر من الطلاب ذكر انواع البيانات التي تعاملوا معها حتى الأن يشير الميسر إلى أن أي من هذه الأنواع يمثل قيمة واحدة فقط، سواء كانت قيمة عددية أو نصية أو بوليانية مع ضرب امثلة لتوضيح ذلك، كما يشير إلى أن المتغيرات من نفس هذه الأنواع تستطيع حفظ قيمة واحدة فقط من نفس نوع المتغير في أي لحظة. يوضح الميسر أن هذه الأنواع من البيانات يطلق عليها الأنواع البسيطة لأن كل بيان منها يمثل معلومة واحدة، كما يشير إلى أن المناقشة السابقة أظهرت أن هذه الأنواع قد لا تكون هي الحل الأمثل للتعامل مع عدد كبير من البيانات، بالذات إذا لم نستطيع تحديد عدد هذه البيانات عند كتابة البرنامج. يشير الميسر إلى أن لغات البرمجة توفر بجانب الأنواع البسيطة السابقة العديد من أنواع البيانات التي تستطيع أن تمثل عدد من القيم في نفس الوقت و أن كثير من هذه الأنواع تتيح أن نزيد أو ننقص عدد القيم التي يمثلها البيان حسب احتياجنا، و يضرب القائمة بسيطة كمثال لهذا المفهوم. يوضح الميسر أن مثل هذه الأنواع يطلق عليها اسم "أنواع البيانات المركبة"، و يشير إلى أنها، بخلاف الأنواع البسيطة السابقة، تتفاوت من لغة إلى أخرى، فقد نجد بعضها في لغات بعينها و لا نجدها في لغات أخرى. ينوه الميسر إلى ان الجلسة ستعرض فيما يلي لبعض أنواع البيانات المركبة التي تدعمها لغة python
القوائم 0 يشرح الميسر صيغة تمثيل القائمة (List) في لغة python و يوضح ذلك باستخدام قائمة من الأعداد ( على سبيل المثال [12,23,1,18,110,4] يشرح الميسر الخصائص الأساسية للقائمة و هي: تستطيع القائمة الاحتفاظ بأي عدد من القيم يمكن تحديد القيمة التي نرغب في التعامل معها من القيم المحفوظة في القائمة عن طريق تحديد ترتيب هذه القيمة من بداية القائمة، و أن العدد الذي نستخدمه للإشارة لهذا الترتيب يطلق عليه مؤشر الموقع (position index) يبدأ عد ترتيب القيم الموجودة في القائمة من الرقم صفر، بحيث يكون مؤشر الموقع الذي يشير لأول قيمة هو العدد صفر و الذي يشير للقيمة الثانية هو العدد 1 و هكذا دواليك. يعرض الميسر مثال لبرنامج ينشئ قائمة و يحفظها في متغير ثم يستخدم دالة print و مؤشر الموقع لطباعة احد القيم المحفوطة في القائمة. يطلب الميسر من الطلاب تجربة كتابة برامج مماثلة و تطبع قيم مختلفة من تلك المحفوظة في القائمة. يشير الميسر إلى أن القائمة السابقة احتوت على اعداد، و يوضح ان القوائم تستطيع الاحتفاظ بأنواع أخرى من القيم بخلاف الأعداد و يدعو الطلاب لتجربة كتابة برنامج ينشأ قائمة من النصوص و يطبع بعض القيم المحفوظة فيها. يلاحظ الا يبدأ الميسر بشرح صيغة كتابة قائمة النصوص و لكن يترك المجال للطلاب لاكتشافها بالتجربة و الخطأ مع توجيه من يسأل للبحث على الانترنت. و متى شعر الميسر أنه ترك ما يكفي من الوقت للطلاب، يقوم بشرح الصيغة لمن لم يستطع التوصل إليها و توضيحها باستخدام امثلة، ثم يترك بعض الوقت لهم للتجربة. يشير الميسر إلى أن القائمة قادرة على حفظ خليط من أنواع مختلفة من البيانات و ليس بالضرورة نوعا واحدا، و يطلب منهم استبدال بعض القيم النصية التي احتوت عليها القائمة في المثال السابق بقيم عددية، و تجربة طباعة بعض القيم من كلا من النوعين، و يترك لهم وقت للتجربة. يشير الميسر إلى اننا نستطيع تبديل القيم المحفوظة في القائمة و يشرح كيفية حفظ قيمة جديدة في القائمة محل اخرى، و يدعو الطلاب لتجربة ذلك. يشير الميسر إلى اننا نستطيع ايضاً أضافة قيمة جديدة في نهاية القائمة و يشرح كيفية استخدام وسيلة append. يلفت الميسر انتباه الطلاب إلى ان وسيلة append تستخدم بنفس الطريقة التي استخدمنا بها وسيلة isdigit في الجلسة السابقة، و يوضح أن ذلك لأن كل أنواع البيانات في لغة python هي كيانات (objects)، و يشير إلى أننا سنتعرض لمفهوم الكيانات بشكل موسع في الجلسات القادمة. يدعو الميسر الطلاب لتجربة استخدام وسيلة append يشير الميسر إلى أننا نستطيع أن نحذف اي من عناصر القائمة عن طريق دالة del، و يشرح كيفية ذلك، ثم يدعو الطلاب لتجربة استخدام هذه الدالة. يقوم الميسر بتلخيص ما تعرضت له الجلسة حتى الأن من خواص القوائم و هي كالأتي: تستطيع القائمة الاحتفاظ بأي عدد من القيم يمكن تحديد القيمة التي نرغب في التعامل معها من القيم المحفوظة في القائمة عن طريق تحديد ترتيب هذه القيمة من بداية القائمة، و أن العدد الذي نستخدمه للإشارة لهذا الترتيب يطلق عليه مؤشر الموقع (position index) يبدأ عد ترتيب القيم الموجودة في القائمة من الرقم صفر، بحيث يكون مؤشر الموقع الذي يشير لأول قيمة هو العدد صفر و الذي يشير للقيمة الثانية هو العدد 1 و هكذا دواليك. يمكن للقائمة الاحتفاظ بأي نوع من أنواع البيانات بشكل منفرد، أو بخليط من أنواع البيانات المختلفة. يمكن تغيير القيم المحفوظة في القائمة يمكن إضافة قيم جديدة للقائمة عن طريق وسيلة append أو حذف قيم منها باستخدام دالة del. يشير الميسر إلى أن القوائم ما هي إلا احد أنواع البيانات المركبة المدعومة في لغة python و يوضح أننا سنتعرف الأن على نوع آخر من البيانات المركبة.
الصفوف 0 يعرض الميسر على الطلاب صيغة تمثل صفاً "(2,11,13,76,3,4,55)" و يسأل الطلاب إن كان هذا قائمة. يسأل الميسر الطلاب عن الفرق بين الصيغة المعروضة امامهم و صيغة القائمة التي تعرفوا عليها. يصدق الميسر على الفرق إذا ما لاحظه الطلاب، أو يبلغهم به، و يوضح أن هذه الصيغة هي صيغة لنوع اخر من البيانات المركبة يطلق عليه اسم "الصف" (Tuple) يشير الميسر إلى ان الصفوف و القوائم يتشابهون في الخصائص الأساسية و هي كالأتي: يستطيع الصف الاحتفاظ بأي عدد من القيم يمكن تحديد مع أي من القيمة القيم المحفوظة في الصف نرغب في التعامل عن طريق تحديد ترتيب هذه القيمة من بداية الصف، و أن العدد الذي نستخدمه للإشارة لهذا الترتيب يطلق عليه اسم مؤشر الموقع (position index) يبدأ عد ترتيب القيم الموجودة في الصفوف من الرقم صفر، بحيث يكون مؤشر الموقع الذي يشير لأول قيمة هو العدد صفر و الذي يشير للقيمة الثانية هو العدد 1 و هكذا دواليك. يمكن للصف الاحتفاظ بأي نوع من أنواع البيانات بشكل منفرد، أو بخليط من أنواع البيانات المختلفة. يدعو الميسر الطلاب لتجربة انشاء عدد من الصفوف، يحتوي بعضها على نوع واحد من أنواع البيانات، و يحتوي الباقون على خليط من أنواع البيانات المختلفة و طباعة بعض القيم التي تحتويها هذه الصفوف. يطلب الميسر من الطلاب تجربة تعديل احد القيم المحفوظة في صف من الصفوف، ثم يسألهم عن رأيهم في سبب الخطأ الذي حدث. يوضح الميسر أن الصف، بخلاف القائمة، يتم تحديد محتوياته عند إنشائه، و لا يمكن تعديل هذه المحتويات أو الإضافة إليها أو حذف أي منها لاحقاً. يطلب الميسر من أحد الطلاب تلخيص خصائص الصفوف، و يدعو باقي الطلاب للتصديق على أو تصحيح رأي زميلهم.
المعاجم 0 ينوه الميسر إلى اننا سنتناول الأن نوعا ثالثا من البيانات المركبة و هو المعاجم. يسأل الميسر الطلاب عن المفتاح الذي نستخدمه للبحث عن معنى كلمة في المعجم، و يناقشهم بهدف توضيح أن مفتاح البحث في المعجم هو الكلمة نفسها، أي أننا نبحث عن الكلمة و متى وجدناها فإننا نستطيع الإطلاع على القيمة المقابلة لهذه الكلمة و التي هي معنى الكلمة في حالة المعاجم اللغوية. يسأل الميسر عن المفتاح الذي استخدمناه للوصول إلى القيم المحفوظة في القوائم و الصفوف في الأمثلة السابقة. يوضح الميسر من خلال النقاش أننا استخدمنا مؤشر الموقع (position index) كمفتاح للوصول إلى القيم المحفوظة في القوائم و الصفوف. يشير الميسر إلى أن المعاجم في لغة python، بخلاف القوائم و الصفوف، تستخدم كلمات أو عبارات للإشارة إلى القيم المحفوظة فيها، و أن هذا يستدعي أن نحدد الكلمة أو العبارة التي سنستخدمها للإشارة إلى أي قيمة جديدة نضيفها إلى المعجم عند إضافة هذه القيمة، و ينوه إلى اننا سنوضح كيف سيتم ذلك في ما يلي. يعرض الميسر على الطلاب نموذج لصيغة تنشئ معجم بسيط يحدد عدد لاعبي فريق بعض الرياضات و تحفظ هذا المعجم في متغير، على سبيل المثال: mydict={"Football":11 , "Basketball":5 , "Volleyball":6} يسأل الميسر الطلاب عن ما يلاحظونه من اختلافات بين هذه الصيغة و صيغ القوائم و الصفوف. يوضح من خلال النقاش أن المعاجم تحاط بعلامتي {} و أن كل عنصر من عناصر المعجم يتكون من ثنائي من القيم يفصل بينهما علامة : يوضح الميسر أننا نستخدم الكلمة أو العبارة الأولى من كل ثنائي (تلك الواقعة على اليسار) و التي نطلق عليها اسم المفتاح (Key) في الاشارة إلى القيمة الثانية من كل ثنائي (تلك الواقعة إلى يمين الثنائي). أي أن mydict["Football"] تشير إلى الرقم 11. يوضح الميسر أن المعاجم تتشارك في الخصائص التالية مع القوائم و بخلاف الصفوف: يمكن تغيير القيم المحفوظة في المعاجم يمكن إضافة قيم جديدة إلى المعجم، كما يمكن حذف بعض القيم الموجودة فيه. يستعرض الميسر كيفية القيام بهذه العمليات و يدعو الطلاب لتجربتها. يؤكد الميسر أن المعاجم في لغة python ما هي إلا كيانات، شأنها كشأن باقي أنواع البيانات في لغة python، و أن التجارب السابقة تؤكد ذلك. يسأل الميسر إن كان من الممكن أن يتكرر المفتاح في أكثر من ثنائي في نفس المعجم. يطلب الميسر من الطلاب إنشاء معجم بحيث يتكرر نفس المفتاح في أكثر من ثنائي و ملاحظة النتيجة. يسأل الميسر الطلاب عن رأيهم في السبب وراء عدم إمكانية تكرار نفس المفتاح في نفس المعجم. من خلال النقاش، يؤكد علىى أنه ليس من الممكن أن نستخدم نفس المفتاح أكثر من مرة واحدة في نفس المعجم حيث أن تكرار نفس المفتاح يخلق لبساً في تحديد القيمة التي نرغب في التعامل معها. يطلب الميسر من الطلاب البحث على شبكة الأنترنت للتعرف على باقي الوسائل التي توفرها المعاجم. يختم الميسر النقاش حول البيانات المركبة بأن يطلب من الطلاب ذكر أنواع البيانات المركبة التي تعرضنا لها في الجلسة و المقارنة بينها.
التكرار 0 يشير الميسر إلى أن من أهم المميزات التي توفرها الحواسيب هي قدرتها على تكرارا نفس الخطوات على عدد كبير من البيانات بدقة و بدون أخطاء و بدون أن تكل أو تمل. يوضح الميسر أن كل لغات البرمجة توفر إمكانيات عدة لتكرار تنفيذ الأوامر، و أننا سنتعرف في على بعض هذه الإمكانيات في لغة python.
حلقة for 0 يعرض الميسر على الطلاب حلقة تستخدم عبارة for في طباعة عدد من القيم المحفوطة في قائمة و يشرح الأجزاء المختلفة التي تتكون منها الحلقة. يدعو الميسر الطلاب لتجربة حلقة for باستخدام قائمة ثم باستخدام صف عوضا عن القائمة.
حلقة while 0 يشير الميسر إلى ان حلقة for ليست هي الوسيلة الوحيدة لتكرار تنفيذ مجموعة من الأوامر و لكن لغة python توفر عبارة أخرى لتكرار تنفيذ مجموعة من الأوامر و هي عبارة while يعرض الميسر نموذج لاستخدام عبارة while في تكرار مجموعة أوامر تطلب من مستخدم البرنامج إدخال نص من لوحة المفاتيح ثم تقوم بطباعة عدد الحروف التي يتكون منها هذا النص. يقوم الميسر بشرح مكونات هذه الحلقة مع توضيح أن أي قيمة بوليانية تصلح كشرط لعبارة while، كما يشرح كيفية عمل دالة len يطلب الميسر من الطلاب تجربة استخدام عبارة while في بعض الحلقات البسيطة.

نشاط

الوقت الوصف ملاحظات
مشروع 0 يوضح الميسر أن ما تعلمه الطلاب في هذه الجلسة يكفي لحل مشكلة حساب عدد السنوات المتبقية لبلوغ العشرين لطلاب فصل دراسي بعدة طرق مختلفة. يوزع الميسر الطلاب على مجموعات لا تزيد أي منها عن خمس طلاب. يطلب من كل مجموعة استخدام ما تعلموه حتى الآن في كتابة البرنامج المطلوب. يساعد الميسر الطلاب في تنفيذ المطلوب عن طريق توجيههم إلى استخدام أساليب حل المشكلات و التفكير البرمجي. يناقش الميسر حلول الطلاب المختلفة و يعرض عليهم أفكار لحلول أخرى و يشجعهم على تجربة هذه الحلول بمفردهم متى يتسنى لهم.

مناقشة

الوقت الوصف ملاحظات
خاتمة 0 يطلب الميسر من كل طالب كتابة أهم ما تعلمه في هذه الجلسة على ورقة و يقوم بجمع هذه الأوراق منهم لتقييم مدى استفادتهم من الجلسة. يبين الميسر إلى أننا تعرضنا في هذه الجلسة للموضوعات الأتية: البيانات المركبة و الفرق بينها و بين البيانات البسيطة القوائم و الصفوف و المعاجم كأمثلة أنواع من البيانات المركبة. التكرار والحلقات باستخدام عبارتي for و while بعض الأفكار والاستراتيجيات البسيطة لحل المشاكل يختم الميسر الجلسة بالإجابة عن أي أسئلة في هذه الموضوعات
قراءات و تدريبات إضافية 0 شرح لاستخدام القوائم http://www.tutorialspoint.com/python/python_lists.htm شرح لاستخدام الصفوف http://www.tutorialspoint.com/python/python_tuples.htm شرح للقوائم في بايثون https://likegeeks.com/python-list-functions
التعليقات
المزيد