جلسة في أساسيات البرمجة 3
موجز الجلسة
تستمر هذه الجلسة في بناء قدرات الطلاب على كتابة البرامج عن طريق تعريفهم بمفاهيم إضافية من مفاهيم البرمجة و شرح أدوات لغة python الازمة لتطبيق هذه المفاهيم بشكل عملي. تبدأ الجلسة بتقديم مفهوم البيانات المركبة (Compound Data structures) و مقابلتها بالبيانات البسيطة (Simple Data Structure) التي عرضوا لها في الجلستين السابقتين، ثم تشرح بعض أنواع البيانات المركبة التي تدعمها لغة python و توضح من خلال أمثلة و تدريبات عملية كيفية استخدامها.
تُتْبِع الجلسة ذلك بشرح مفهوم التكرار (الحلقات - loops) و كيفية استخدام عبارتي for و while في تطبيق هذا المفهوم، ثم تتيح المساحة للطلاب لاختبار قدراتهم و التدريب على ما تعلموه حتى الأن من مفاهيم البرمجة في بناء برامج ذات امكانيات أكبر.
مدة الجلسة الزمنية
أربع ساعات تتخللها فترة أو فترتي راحة
المرحلة العمرية المستهدفة
من 12 إلى 15 سنة
مهارات و معارف متوقعة من المتدربين
- القراءة و الكتابة.
- اتباع التعليمات.
- الحساب (العد و الجمع و الطرح).
- المقارنة
- أستخدام الحاسوب و البرامج الحاسوبية.
- كيفية تمثيل الأرقام و المحارف في الحاسوب.
- الملفات و الأدلة و المسارات و استخداماتهم.
- البيانات العددية و البيانات النصية و البيانات البوليانية و ما بينهما من فروق.
- المتغيرات و أنواعها
- العبارات الشرطية
- القدرة على كتابة برنامج بسيط بلغة python و تشغيله باستخدام المفسر من سطر الأوامر.
موضوعات الجلسة
- مقوّمات البرمجة
- فهم العناصر العامة للغات البرمجة و صفاتها
- القدرة على إدارة الكود المصدري و تنظيم ملفاته
- القدرة على استخدام مفسّر أو مترجم اللغة المختارة لمعالجة ملفات الكود المصدرية و إخراج نتائج، على سطر الأوامر أو في بيئة تطوير متكاملة
- تأليف برنامج حاسوبي
- القدرة على اتّباع أساليب اختبار البرنامج و اكتشاف البقّات
- حلّ المشكلات
- التعرف على الخطوات الأساسية لحل المشكلات (Problem Solving Techniques):
- تحديد و تحليل المشكلة
- تطوير بدائل للحلّ
- اختيار أفضل البدائل
- تطبيق البديل المختار
- قياس فاعلية الحلّ المختار
- القدرة على تطبيق خطوات حل المشكلات على مشكلات عملية بسيطة
- التعرف على و فهم بعض إستراتيجيات حل المشكلات (تحليل المشكلة إلى مشاكل ابسط، جمع المعلومات، التجريد، العصف الذهني، إلخ...)
- التعرف على الخطوات الأساسية لحل المشكلات (Problem Solving Techniques):
الأثر القيمي
غرس و تأصيل القيم التالية
- الفضول العلمي
- السعي إلى المعرفة
- الإبداع
- التعاون
النتائج المتوقعة
- التعرف على بعض أنواع البيانات المركبة (القوائم - Lists و الصفوف - Tuples و المعاجم - Dictionaries) و شرح ما بينها من فروق و استخدامها في حفظ و استرجاع البيانات.
- كتابة براج تستخدم الحلقات (أدوات التكرار - Loops) لأداء مهام متكررة.
وسائل تعليمية مطلوبة
- حواسيب بحيث يكون عدد الحواسيب هو نصف عدد المتدربين (حاسوب لكل متدربين اثنين) بالإضافة إلى حاسوب للميسّر. كل حاسوب يوجد عليه حسابات لكل طالب من الطلاب المشاركين في البرنامج.
- جهاز عرض بيانات
- اتصال بالإنترنت
- لوحة كتابة (Flip Chart)
تتابع الجلسة
مقدمة
- ينوه الميسر إلى أن هذه الجلسة ستبني على ما تعلمه الطلاب في الجلسات السابقة بحيث تمكنهم من كتابة برامج أكثر تطورا و أكثر نفعا.
- يسأل الميسر الطلاب إذا ما كان في استطاعتهم كتابة برنامج يماثل الذي كتبوه في المرة السابقة و لكنه يقوم بحساب عدد السنوات المتبقية لبلوغ العشرين لطالبين، عوضا عن طالب واحد.
- بدون التطرق لمناقشة إجاباتهم على السؤال السابق، يسألهم الميسر عن كيفية تعديل البرنامج ليقوم بحساب عدد السنوات المتبقية لبلوغ العشرين لكل طالب من طلاب فصل دراسي.
- يناقش الميسر الطلاب في آرائهم و يوضح أنه من الغير عملي إعادة كتابة نفس الأوامر عدد من المرات بعدد الطلاب المطلوب حساب السنوات المتبقية لهم و ذلك للأسباب التالية:
- إعادة كتابة نفس الخطوات هي عملية تكرارية مملة تستنزف الكثير من وقت الطلاب دون أن تتطلب منهم استدعاء قدراتهم الذهنية، و بالتالي هي عملية يفضل أن تترك للألات للقيام بها.
- لا يمكن ان نحدد عدد الطلاب في الفصل الدراسي بشكل مسبق نظرا لأن هذا العدد يتغير من فصل إلى اخر، و بالتالي نحتاج إلى تعديل البرنامج ليلائم كل فصل.
- يسأل الميسر الطلاب عن الخواص التي يرون أنهم في حاجة لإضافتها للغة python حتى تستطيع تنفيذ ما هو مطلوب بشكل أكثر كفاءة.
- يناقش الميسر مقترحات الطلاب و كيفية حلها للمشكلة المطروحة، كما يناقش معهم كيفية تفكيرهم سعيا للوصول لهذه المقترحات، و من خلال النقاش يؤكد على:
- أهمية وصف المشكلة بشكل دقيق (مثلا، توضيح أن المطلوب إدخال قائمة بأعمار الطلاب، على أن يعرض البرنامج على الشاشة عدد السنوات المتبقية لكل طالب، مع ذكر أن عدد البيانات في القائمة المدخلة غير محدد سلفاً)
- قيمة تجزيئ المشكلة لمشاكل اصغر و ابسط في الحل، مع وصف كل جزء منها بدقة (على سبيل المثال، تجزئة هذه المشكلة إلى كيفية إدخال البيانات و كيفية حفظ هذه البيانات و كيفية تنفيذ الأوامر اللازمة لحساب عدد السنوات المتبقية على كل بيان منها)
- يطلب الميسر من الطلاب تسجيل مقترحاتهم و إعادة التفكير فيها في نهاية الجلسة.
- ينوه الميسر إلى أننا سنتعلم في هذه الجلسة بعض الاساليب التي يمكن أن نستخدمها لحل هذه المشكلة.
البيانات المركبة
- يطلب الميسر من الطلاب ذكر انواع البيانات التي تعاملوا معها حتى الأن
- يشير الميسر إلى أن أي من هذه الأنواع يمثل قيمة واحدة فقط، سواء كانت قيمة عددية أو نصية أو بوليانية مع ضرب امثلة لتوضيح ذلك، كما يشير إلى أن المتغيرات من نفس هذه الأنواع تستطيع حفظ قيمة واحدة فقط من نفس نوع المتغير في أي لحظة.
- يوضح الميسر أن هذه الأنواع من البيانات يطلق عليها الأنواع البسيطة لأن كل بيان منها يمثل معلومة واحدة، كما يشير إلى أن المناقشة السابقة أظهرت أن هذه الأنواع قد لا تكون هي الحل الأمثل للتعامل مع عدد كبير من البيانات، بالذات إذا لم نستطيع تحديد عدد هذه البيانات عند كتابة البرنامج.
- يشير الميسر إلى أن لغات البرمجة توفر بجانب الأنواع البسيطة السابقة العديد من أنواع البيانات التي تستطيع أن تمثل عدد من القيم في نفس الوقت و أن كثير من هذه الأنواع تتيح أن نزيد أو ننقص عدد القيم التي يمثلها البيان حسب احتياجنا، و يضرب القائمة بسيطة كمثال لهذا المفهوم.
- يوضح الميسر أن مثل هذه الأنواع يطلق عليها اسم "أنواع البيانات المركبة"، و يشير إلى أنها، بخلاف الأنواع البسيطة السابقة، تتفاوت من لغة إلى أخرى، فقد نجد بعضها في لغات بعينها و لا نجدها في لغات أخرى.
- ينوه الميسر إلى ان الجلسة ستعرض فيما يلي لبعض أنواع البيانات المركبة التي تدعمها لغة python
القوائم
- يشرح الميسر صيغة تمثيل القائمة (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 و يوضح أننا سنتعرف الأن على نوع أخر من البيانات المركبة.
الصفوف
- يعرض الميسر على الطلاب صيغة تمثل صفاً "(2,11,13,76,3,4,55)" و يسأل الطلاب إن كان هذا قائمة.
- يسأل الميسر الطلاب عن الفرق بين الصيغة المعروضة امامهم و صيغة القائمة التي تعرفوا عليها.
- يصدق الميسر على الفرق إذا ما لاحظه الطلاب، أو يبلغهم به، و يوضح أن هذه الصيغة هي صيغة لنوع اخر من البيانات المركبة يطلق عليه اسم "الصف" (Tuple)
- يشير الميسر إلى ان الصفوف و القوائم يتشابهون في الخصائص الأساسية و هي كالأتي:
- يستطيع الصف الاحتفاظ بأي عدد من القيم
- يمكن تحديد مع أي من القيمة القيم المحفوظة في الصف نرغب في التعامل عن طريق تحديد ترتيب هذه القيمة من بداية الصف، و أن العدد الذي نستخدمه للإشارة لهذا الترتيب يطلق عليه اسم مؤشر الموقع (position index)
- يبدأ عد ترتيب القيم الموجودة في الصفوف من الرقم صفر، بحيث يكون مؤشر الموقع الذي يشير لأول قيمة هو العدد صفر و الذي يشير للقيمة الثانية هو العدد 1 و هكذا دواليك.
- يمكن للصف الاحتفاظ بأي نوع من أنواع البيانات بشكل منفرد، أو بخليط من أنواع البيانات المختلفة.
- يدعو الميسر الطلاب لتجربة انشاء عدد من الصفوف، يحتوي بعضها على نوع واحد من أنواع البيانات، و يحتوي الباقون على خليط من أنواع البيانات المختلفة و طباعة بعض القيم التي تحتويها هذه الصفوف.
- يطلب الميسر من الطلاب تجربة تعديل احد القيم المحفوظة في صف من الصفوف، ثم يسألهم عن رأيهم في سبب الخطأ الذي حدث.
- يوضح الميسر أن الصف، بخلاف القائمة، يتم تحديد محتوياته عند إنشائه، و لا يمكن تعديل هذه المحتويات أو الإضافة إليها أو حذف أي منها لاحقاً.
- يطلب الميسر من أحد الطلاب تلخيص خصائص الصفوف، و يدعو باقي الطلاب للتصديق على أو تصحيح رأي زميلهم.
المعاجم
- ينوه الميسر إلى اننا سنتناول الأن نوعا ثالثا من البيانات المركبة و هو المعاجم.
- يسأل الميسر الطلاب عن المفتاح الذي نستخدمه للبحث عن معنى كلمة في المعجم، و يناقشهم بهدف توضيح أن مفتاح البحث في المعجم هو الكلمة نفسها، أي أننا نبحث عن الكلمة و متى وجدناها فإننا نستطيع الإطلاع على القيمة المقابلة لهذه الكلمة و التي هي معنى الكلمة في حالة المعاجم اللغوية.
- يسأل الميسر عن المفتاح الذي استخدمناه للوصول إلى القيم المحفوظة في القوائم و الصفوف في الأمثلة السابقة.
- يوضح الميسر من خلال النقاش أننا استخدمنا مؤشر الموقع (position index) كمفتاح للوصول إلى القيم المحفوظة في القوائم و الصفوف.
- يشير الميسر إلى أن المعاجم في لغة python، بخلاف القوائم و الصفوف، تستخدم كلمات أو عبارات للإشارة إلى القيم المحفوظة فيها، و أن هذا يستدعي أن نحدد الكلمة أو العبارة التي سنستخدمها للإشارة إلى أي قيمة جديدة نضيفها إلى المعجم عند إضافة هذه القيمة، و ينوه إلى اننا سنوضح كيف سيتم ذلك في ما يلي.
- يعرض الميسر على الطلاب نموذج لصيغة تنشئ معجم بسيط يحدد عدد لاعبي فريق بعض الرياضات و تحفظ هذا المعجم في متغير، على سبيل المثال: mydict={"Football":11 , "Basketball":5 , "Volleyball":6}
- يسأل الميسر الطلاب عن ما يلاحظونه من اختلافات بين هذه الصيغة و صيغ القوائم و الصفوف.
- يوضح من خلال النقاش أن المعاجم تحاط بعلامتي {} و أن كل عنصر من عناصر المعجم يتكون من ثنائي من القيم يفصل بينهما علامة :
- يوضح الميسر أننا نستخدم الكلمة أو العبارة الأولى من كل ثنائي (تلك الواقعة على اليسار) و التي نطلق عليها اسم المفتاح (Key) في الاشارة إلى القيمة الثانية من كل ثنائي (تلك الواقعة إلى يمين الثنائي). أي أن mydict["Football"] تشير إلى الرقم 11.
- يوضح الميسر أن المعاجم تتشارك في الخصائص التالية مع القوائم و بخلاف الصفوف:
- يمكن تغيير القيم المحفوظة في المعاجم
- يمكن إضافة قيم جديدة إلى المعجم، كما يمكن حذف بعض القيم الموجودة فيه.
- يستعرض الميسر كيفية القيام بهذه العمليات و يدعو الطلاب لتجربتها.
- يؤكد الميسر أن المعاجم في لغة python ما هي إلا كيانات، شأنها كشأن باقي أنواع البيانات في لغة python، و أن التجارب السابقة تؤكد ذلك.
- يسأل الميسر إن كان من الممكن أن يتكرر المفتاح في أكثر من ثنائي في نفس المعجم.
- يطلب الميسر من الطلاب إنشاء معجم بحيث يتكرر نفس المفتاح في أكثر من ثنائي و ملاحظة النتيجة.
- يسأل الميسر الطلاب عن رأيهم في السبب وراء عدم إمكانية تكرار نفس المفتاح في نفس المعجم.
- من خلال النقاش، يؤكد علىى أنه ليس من الممكن أن نستخدم نفس المفتاح أكثر من مرة واحدة في نفس المعجم حيث أن تكرار نفس المفتاح يخلق لبساً في تحديد القيمة التي نرغب في التعامل معها.
- يطلب الميسر من الطلاب البحث على شبكة الأنترنت للتعرف على باقي الوسائل التي توفرها المعاجم.
- يختم الميسر النقاش حول البيانات المركبة بأن يطلب من الطلاب ذكر أنواع البيانات المركبة التي تعرضنا لها في الجلسة و المقارنة بينها.
التكرار
- يشير الميسر إلى أن من أهم المميزات التي توفرها الحواسيب هي قدرتها على تكرارا نفس الخطوات على عدد كبير من البيانات بدقة و بدون أخطاء و بدون أن تكل أو تمل.
- يوضح الميسر أن كل لغات البرمجة توفر إمكانيات عدة لتكرار تنفيذ الأوامر، و أننا سنتعرف في على بعض هذه الإمكانيات في لغة python.
حلقة for
- يعرض الميسر على الطلاب حلقة تستخدم عبارة for في طباعة عدد من القيم المحفوطة في قائمة و يشرح الأجزاء المختلفة التي تتكون منها الحلقة.
- يدعو الميسر الطلاب لتجربة حلقة for باستخدام قائمة ثم باستخدام صف عوضا عن القائمة.
حلقة while
- يشير الميسر إلى ان حلقة for ليست هي الوسيلة الوحيدة لتكرار تنفيذ مجموعة من الأوامر و لكن لغة python توفر عبارة أخرى لتكرار تنفيذ مجموعة من الأوامر و هي عبارة while
- يعرض الميسر نموذج لاستخدام عبارة while في تكرار مجموعة أوامر تطلب من مستخدم البرنامج إدخال نص من لوحة المفاتيح ثم تقوم بطباعة عدد الحروف التي يتكون منها هذا النص.
- يقوم الميسر بشرح مكونات هذه الحلقة مع توضيح أن أي قيمة بوليانية تصلح كشرط لعبارة while، كما يشرح كيفية عمل دالة len
- يطلب الميسر من الطلاب تجربة استخدام عبارة while في بعض الحلقات البسيطة.
مشروع
- يوضح الميسر أن ما تعلمه الطلاب في هذه الجلسة يكفي لحل مشكلة حساب عدد السنوات المتبقية لبلوغ العشرين لطلاب فصل دراسي بعدة طرق مختلفة.
- يوزع الميسر الطلاب على مجموعات لا تزيد أي منها عن خمس طلاب.
- يطلب من كل مجموعة استخدام ما تعلموه حتى الأن في كتابة البرنامج المطلوب.
- يساعد الميسر الطلاب في تنفيذ المطلوب عن طريق توجيههم إلى استخدام اساليب حل المشكلات و التفكير البرمجي.
- يناقش الميسر حلول الطلاب المختلفة و يعرض عليهم أفكار لحلول أخرى و يشجعهم على تجربة هذه الحلول بمفردهم متى يتسنى لهم.
خاتمة
- يطلب الميسر من كل طالب كتابة أهم ما تعلمه في هذه الجلسة على ورقة و يقوم بجمع هذه الأوراق منهم لتقييم مدى استفادتهم من الجلسة.
- يبين الميسر إلى أننا تعرضنا في هذه الجلسة للموضوعات الأتية:
- البيانات المركبة و الفرق بينها و بين البيانات البسيطة
- القوائم و الصفوف و المعاجم كأمثلة لأنواع من البيانات المركبة.
- التكرار و الحلقات باستخدام عبارتي for و while
- بعض الأفكار و الأستراتيجيات البسيطة لحل المشاكل
- يختم الميسر الجلسة بالإجابة عن أي أسئلة في هذه الموضوعات
قراءات و تدريبات إضافية
- شرح لاستخدام القوائم http://www.tutorialspoint.com/python/python_lists.htm
- شرح لاستخدام الصفوف http://www.tutorialspoint.com/python/python_tuples.htm
- شرح للقوائم في بايثون https://likegeeks.com/python-list-functions/