جلسة في أساسيات البرمجة 2
موجز الجلسة
تَبْني هذه الجلسة على ما تعلمه الطلاب في أساسيات البرمجة - جلسة 1 فتبدأ بتقديم مفهوم المتغيرات ثم تتلوه بتقديم كيفية تعريف المتغيرات و تعيين قيمتها و استخدامها في أوامر لغة python.
تُتْبِع الجلسة ذلك بتقديم مفاهيم العبارات الشرطية و المقارنات بين القيم المختلفة و كتل الأوامر، و توضيح كيفية تطبيق هذه المفاهيم في لغة python. كما تتيح المساحة للطلاب لتجربة هذه المفاهيم بشكل عملي. و تستخدم الجلسة الأمثلة العملية السابقة في تقديم مفهوم البيانات البوليانية كثالث نوع من الأنواع الأساسية للبيانات و تعرض كيفية استخدام المتغيرات في حفظها.
تقدم الجلسة كذلك كيفية طلب معلومات من المستخدم و كيفية حفظها في متغيرات و تحديد نوعها ثم استخدامها في البرنامج.
كما تؤكد الجلسة على الفرق بين البيانات العددية و النصوص و توضح كيفية التحويل النص إلى عدد إذا ما كان يتكون من محارف رقمية فقط لا غير.
مدة الجلسة الزمنية
أربع ساعات تتخللها فترة أو فترتي راحة
المرحلة العمرية المستهدفة
من 12 إلى 15 سنة
مهارات و معارف متوقعة من المتدربين
- القراءة و الكتابة.
- اتباع التعليمات.
- الحساب (العد و الجمع و الطرح).
- المقارنة
- أستخدام الحاسوب و البرامج الحاسوبية.
- كيفية تمثيل الأرقام و المحارف في الحاسوب.
- مفهوم الملفات و الأدلة و المسارات و استخداماتهم.
- مفهومي البيانات العددية و النصوص و الفرق بينهما
- القدرة على كتابة برنامج بسيط بلغة python و تشغيله باستخدام المفسر من سطر الأوامر.
موضوعات الجلسة
- إطار منهج الحوسبة لمشروع تمكين الشباب رقميا/الأهداف التعليمية#مقوّمات البرمجة
- فهم العناصر العامة للغات البرمجة و صفاتها
- القدرة على إدارة الكود المصدري و تنظيم ملفاته
- القدرة على استخدام مفسّر أو مترجم اللغة المختارة لمعالجة ملفات الكود المصدرية و إخراج نتائج، على سطر الأوامر أو في بيئة تطوير متكاملة
- إطار منهج الحوسبة لمشروع تمكين الشباب رقميا/الأهداف التعليمية#تأليف برنامج حاسوبي
- القدرة على اتّباع أساليب اختبار البرنامج و اكتشاف البقّات
الأثر القيمي
غرس و تأصيل القيم التالية
- الفضول العلمي
- السعي إلى المعرفة
- الإبداع
- التعاون
النتائج المتوقعة
- كتابة برنامج خطي بسيط يستخدم المتغيرات لحفظ و التعامل مع البيانات العددية و النصية باستخدام لغة Python.
- استدعاء دوال لغة python لطلب و تلقي بيانات من المستخدم و حفظها في متغيرات
- استخدام العبارات الشرطية و المقارنات في برامج python
- تعريف البيانات البوليانية و شرح كيفية استخدامها و حفظها في متغيرات
- استدعاء وسائل الكيانات النصية في لغة python في تحديد نوع البيانات
- تشغيل البرنامج باستخدام مفسر pyhton من على سطر الأوامر.
- اختبار البرمجية و اكتشاف الأخطاء البسيطة في بناء الأوامر البرمجية للغة Python أو في منطق البرنامج.
وسائل تعليمية مطلوبة
- حواسيب بحيث يكون عدد الحواسيب هو نصف عدد المتدربين (حاسوب لكل متدربين اثنين) بالإضافة إلى حاسوب للميسّر. كل حاسوب يوجد عليه حسابات لكل طالب من الطلاب المشاركين في البرنامج.
- جهاز عرض بيانات
- اتصال بالإنترنت
- لوحة كتابة (Flip Chart)
تتابع الجلسة
مقدمة
- يشير الميسر إلى أن هذه الجلسة تبني على ما تعلمه الطلاب سلفا بحيث تمكنهم من بناء برامج أكثر تطورا من تلك التي كتبوها في الجلسة السابقة .
- يوضح الميسر أن هذه الجلسة ستتعرض لموضوعات لا غناً عنها لبناء أي برنامج حاسوبي و هي:
- المتغيرات و أنواعها و كيفية استخدامها
- كيفية طلب بيانات من مستخدم البرنامج و كيفية حفظها و التعامل معها
- كيفية بناء برامج تتصرف بأشكال مختلفة بناء على شروط محددة أو طبقا لرغبة المستخدم.
- كيفية المقارنة بين القيم المختلفة.
- ماهية البيانات البوليانية و أهميتها و كيفية استخدامها
- كيفية التأكد من نوع البيانات التي أدخلها المستخدم.
- يوضح الميسر أننا سنتعرض لهذه الموضوعات من خلال العاب و تجارب عملية على الحاسوب.
المتغيرات
- يشير الميسر إلى أننا سنبدأ الجلسة بلعب لعبة أين الكرة ثم يبدأ في تنفيذ اللعبة
- يشير الميسر إلى اننا سنبدأ في تنفيذ ما تعلمناه في اللعبة على الحاسوب بشكل عملي باستخدام لغة python
- يكتب الميسر برنامج بسيط ينشئ متغيرين و يضع في أحدهما رقم و في الأخر نص ثم يستدعي دالة print لطباعة قيمتيهما.
- يطلب الميسر من الطلاب تجربة كتابة برامج مشابهة و يساعدهم في فهم و حل ما يواجهونه من مشكلات.
- يسأل الميسر الطلاب عن أوجه التشابه بين المتغيرات في البرنامج السابق و الصندوق في اللعبة، ويستمع إلى إجاباتهم و يناقشهم فيها و يوضح من خلال النقاش النقاط التالية:
- مثلما كان لكل صندوق في اللعبة اسماً يميزه، فإن لكل متغير في لغة python اسماً يميزه و نستخدمه في الإشارة إليه في البرامج، و يوضح كذلك ان اسم المتغير في لغة python يجب أن يتكون من تركيبة من الحروف و الأرقام و علامة "_" مع مراعاة ألا يبدأ اسم المتغير برقم و يستعين باسماء المتغيرات المستخدمة في البرنامج للتوضيح النقطة السابقة.
- استخدمت المتغيرات في المثال السابق لحفظ بيانات نصية و أخرى عددية بشكل مشابه لاستخدام الصندوق لحفظ رقم الكوب التالي في اللعبة، و يشير كذلك إلى ان استخدام معامل "=" (assignment operator) لحفظ القيمة في المتغير يماثل وضع الوريقة التي تحتوي على رقم الكوب التالي في الصندوق.
- قامت دالة print بالإطلاع على قيمة المتغير حتى تستطيع طباعته على الشاشة مثلما قام الطالب بقراءة الورقة الموجودة في الصندوق ليستطيع التعرف على رقم الكوب التالي.
- يوضح الميسر كذلك أن لكل متغير نوع هو نفس نوع البيانات المخزنة فيه، و ان مفسر لغة python يحدد نوع المتغير (متغير نصي أو عددي أو غير ذلك) بناء على القيمة المحفوظة فيه. و يشير إلى أن بعض لغات البرمجة الأخرى تستخدم طرق مغايرة لتحديد نوع المتغير.
- يوضح الميسر أن مفسر python يحدد طريقة تعامله مع المتغير بناء على نوعه، و بالتالي ينفذ عمليات الجمع و الضرب على المتغيرات بطرق مختلفة، كل حسب نوعه.
- يدعو الميسر الطلاب لتجربة ذلك عن طريق كتابة برنامج بسيط ينشئ متغيرين عدديين ثم يقوم بطباعة حاصل جمع هذين المتغيرين، و يتبع ذلك بإنشاء متغيرين أخرين نصيين و يقوم بطباعة حاصل جمع هذين الآخرين.
- يساعد الميسر الطلاب في تنفيذ المطلوب ثم يعرض عليهم نموذج لبرنامج صحيح و يستعرض نتيجة تنفيذه.
- يطلب الميسر من الطلاب مقارنة ما كتبوه بالبرنامج المعروض امامهم، ثم يطلب ممن كتب برنامجه بشكل مختلف توضيح الإختلافات و يناقشه في ما كتبه بحيث يوضح لباقي الطلاب اسباب هذه الفروق و أثرها. إذا ما استخدم أحد الطلاب متغيرا جديدا لحفظ ناتج الجمع ثم قام بطباعة قيمة هذا المتغير الجديد، يشير الميسر إلى أنه سيقوم بشرح هذا الحل لاحقا.
- يعرض الميسر مثالا يقوم بنسخ قيمة متغير في متغير أخر، و يسألهم عن تصورهم لما سيقوم هذا الأمر بفعله.
- يستمع الميسر لآراء الطلاب و يوضح معنى هذا الأمر ثم يدعوهم لتجربة هذا.
- بعد نجاحهم في تجربة الأمر السابق، يعرض الميسر على الطلاب أمر يقوم بعملية حسابية على متغير ثم يحفظ نتيجة العملية الحسابية في نفس المتغير.
- يسأل الميسر عن تصورالطلاب لما سيقوم هذا الأمر بفعله و يناقشهم في إجاباتهم و يوضح كيف يتم تنفيذ هذا الأمر و أثره، و يدعوهم لأقتراح تنويعات مختلفة على هذا الأمر و تجربتها.
- يشير الميسر إلى اننا قمنا في هذا التجارب بتغيير قيمة المتغير مثلما كنا نقوم بتبديل الورقة الموجودة في الصندوق في اللعبة بأخرى.
- يشير الميسر إلى ما كتبه الطلاب سلفا من أوامر لجمع متغيريين عددين و أخرين نصيين و طباعة ناتجي الجمع، و يسأل الطلاب إذا ما كان في وسعهم الأن تصور حل أخر لهذا المثال.
- يستمع الميسر إلى إجاباتهم و يناقشهم فيها ثم يعرض عليهم حلأً يستخدم متغير ثالث لحفظ قيمة جمع المتغيريين الأولين، ثم استدعاء دالة print لطباعة قيمة هذا المتغير الثالث.
- يشير الميسر إلى انه دائماً ما يوجد حلول عديدة و متنوعة لكل مشكلة، و ان من الطبيعي إختلاف ما سيتوصلون له من حلول و ما سيكتبونه من برامج بعضها عن بعض.
- يطلب الميسر من الطلاب إضافة اوامر إلى برنامجهم تقوم بحفظ العدد 3 في احد المتغيرات التي استخدموها سلفا في حفظ الأعداد ثم طباعة حاصل ضرب هذا المتغير في أحد المتغيرات النصية.
- يتأكد ألميسر من أن الطلاب قاموا بكتابة البرنامج بشكل صحيح و أنهم مدركين لمعنى عملية ضرب عدد في نص و التي تم شرح معناها في الجلسة السابقة.
- يدعو الميسر الطلاب لاستخدام ما تعلموه حتى الأن عن المتغيرات في حل المثال الذي تعرضوا له في الجلسة السابقة (تاجر يكسب سبعة جنيهات يوميا من بيع الجبن و ثلاثة جنيهات يوميا من بيع الزيتون، فكم سيكسب من بيع الجبن و الزيتون في شهر فبراير القادم؟) بدون الحاجة لاستخدام الأقواس، و يستخدم هذا المثال ليؤكد على اهمية اختيار اسماء واضحة المعنى للمتغيرات حتى يصبح البرنامج اسهل في القراءة و الفهم.
- يدعو الميسر الطلاب للتطوع لتلخيص ما تعلموه عن خواص المتغيرات و طرق استخدامها، و يختار احد المتطوعين و يساعده و يتأكد من ذكر كافة ما تعرضت له الجلسة من نقاط.
طلب و تلقي البيانات من المستخدم
- يشير الميسر أننا قد كتبنا كل ما تعاملنا معه من بيانات حتى الأن في متن البرنامج، و أن ذلك يستدعي تغيير البرنامج كلما رغبنا في التعامل مع ارقام أو نصوص أخرى. و يوضح ذلك من خلال ما تم كتابته من أوامر في الأمثلة السابقة.
- يسأل الميسر الطلاب عن رأيهم فيما ينبغي للبرنامج القيام به حتي يمكننا استخدامه في التعامل مع بيانات مختلفة بدون الحاجة إلى تعديله في كل مرة.
- يستمع الميسر إلى آراء الطلاب و يوضح أن أحد الطرق الممكنة هي أن نجعل البرنامج يبدأ بسؤال المستخدم عن القيم التي يرغب في أن يتعامل البرنامج معها، قبل أن يقوم بما هو مطلوب من عمليات على هذه القيم.
- يشير الميسر إلى أننا سنتعلم الأن كيف يمكن للبرنامج أن يطلب من المستخدم إدخال بيانات، و كيف يقوم بتخزينها و التعامل معها.
- يعرض الميسر مثالا لبرنامج يستدعي دالة input لطلب بيان من المستخدم و تخزين هذا البيان في متغير، ثم يقوم بطباعة قيمة المتغير، و يسألهم عن رأيهم في ما سينتج عن تنفيذ هذا البرنامج.
- يستمع الميسر إلى آراء الطلاب و يوضح من خلال النقاش ما سينتج عن تنفيذ هذا الأمر.
- يطلب الميسر من الطلاب تجربة استدعاء دالة input لدعوة المستخدم لإدخال اسمه ثم طباعة رسالة تحية بأسم المستخدم على الشاشة.
- يراجع الميسر ما كتبه الطلاب من برامج و يساعدهم في حل ما يستعصي عليهم حتي يتأكد من نجاحهم جميعا في تنفيذ المطلوب.
- يشرح الميسر أن في هذا المثال يقوم مفسر python باستدعاء دالة input التي تقوم بطباعة رسالة تدعو المستخدم لأدخال بيان ثم تقوم بإرجاع هذا البيان في محلها في البرنامج عند ضغط المستخدم على زر Enter. و بعد انتهاء دالة input من دورها يقوم معامل "=" بحفظ القيمة التي أرجعتها في المتغير المسمى على يسار معامل "=".
- يشير الميسر إلى أن لغة python تتيح للمبرمج أداة لتضمين نص في نص آخر اثناء الطباعة، و يستعرض استخدام s%.
- يطلب الميسر من الطلاب تجربة استخدام s% في حل المثال السابق.
- يلخص الميسر ما تعرض له هذا القسم من معلومات عن دالة input و s% ( أو قد يدعو أحد الطلاب للقيام بهذا التلخيص)
ملحوظة: هذه الأمثلة تعتمد على استخدام إصدار 3.0 فما أحدث من لغة python. في الإصدارات الأقدم، تتصرف دالة input بشكل مختلف، مما يؤدي إلى حدوث أخطاء في تنفيذ البرامج. إذا لم تتوافر إصدارة 3.0 أو احدث، على الأجهزة المستخدمة، يوجه الميسر الطلاب لاستدعاء دالة raw_input كبديل لدالة input.
العبارات الشرطية و المقارنات و البيانات البوليانية
- يبدأ الميسر هذا القسم بالإشارة إلى أن دالة 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 في قلب الأخرى.
- يترك الميسر الفرصة للطلاب للمحاولة لمدة ربع ساعة يجيب فيها اسئلتهم ثم يعرض عليهم مثال للبرنامج المطلوب و يقوم بشرحه.
- يطلب الميسر ممن لم يستطع كتابة البرنامج وحده تجربة البرنامج المعروض امامهم.
خاتمة
- يطلب الميسر من كل طالب كتابة أهم ما تعلمه في هذه الجلسة على ورقة و يقوم بجمع هذه الأوراق منهم لتقييم مدى استفادتهم من الجلسة.
- يبين الميسر إلى أننا تعرضنا في هذه الجلسة للموضوعات الأتية:
- المتغيرات العددية و المتغيرات النصية و كيفية استخدامهم
- استخدام دالة input في طلب بيانات من المستخدم
- استخدام دالة int في التحويل من نصوص إلى أعداد
- استخدام s% في طباعة البيانات النصية
- البيانات البوليانية و كيفية استخدامها
- عبارة if الشرطية و تنويعاتها المختلفة if و if-else و if-elif-else
- كتل الأوامر و خصائصها و كيفية استخدامها
- مفهوم الكيانات و الوسائل و وسيلة isdigit المعرفة على الكيانات التي تمثل بيانات نصية
- معاملات المقارنة المختلفة (>، <، ==، =!، إلخ ...) و كيفية استخدامها
- معامل not و كيفية استخدامه على القيم البوليانية
- يختم الميسر الجلسة بالإجابة عن أي أسئلة في هذه الموضوعات
قراءات و تدريبات إضافية
- مشروع: تجربة المقارنة بين النصوص (مثلا كتابة برنامج يقسم الطلاب إلى أربع مجموعات أ و ب و ج و د حسب أسماءهم)
- قراءات إضافية: كيف يمكن التأكد مما إذا كان الرقم الذي قام المستخدم بإدخاله هو رقم يحتوي على كسور (أي يحتوي على نقطة عشرية)