Telechargé par LAAMRI FARID

أساسيات لغة بايثون (1)

publicité
‫الدرس األول‪ :‬مقدمة عامة‬
‫قبل البدء في شرح اساسيات البرمجة بلغة بايثون دعونا نتصفح بعضا ً من مميزاتها ونوضح كل منها وكما يلي‪:‬‬
‫ظهرت لغة بايثون ألول مرة عام ‪ 9191‬بعد اطالقها للبرمجة من قبل مخترعها الهولندي (غويدو فان روسوم) وتمتاز هذه‬
‫اللغة بأنها تركز على قابلية القراءة (‪ )Readability‬باستخدامها لكلمات مفتاحية مشابهة للغة البشر تسهل قراءتها من‬
‫قبل المختصين وغيرهم‪ .‬كما تتميز هذه اللغة بسرعتها لكونها لغة مفسرة (‪ )interpreted‬أي انها تنفذ مباشرة بدون الحاجة‬
‫الى ترجمة (‪ )not compiled‬وهي ايضا ً لغة نماذج أولية سريعة (‪ )rapid prototyping language‬يمكن استخدامها‬
‫لفحص النماذج األولية بدون الكثير من المقدمات واالعدادات المسبقة فهي ال تحتاج الكثير من الوقت للتطوير فهي اسرع من‬
‫بقية لغات البرمجة األخرى مثل ال (‪ )C++, Java,…etc.‬كما ان من مميزاتها المرونة العالية في استخدام المتغيرات بدون‬
‫اعالن (‪ )no variable declaration‬مما يقلل وقت البرمجة والتطوير الى الحد األدنى‪ .‬كغيرها من لغات المستوى العالي‪،‬‬
‫تمتاز لغة بايثون انها موجهة نحو الهدف (‪ )object oriented‬وهي لغة إجرائية (‪ )procedural‬تسمح بتطوير تطبيقات‬
‫متعددة األغراض (‪ )general purpose‬ألدارة الذاكرة (‪ )memory management‬وتطوير مكتبات النظام القياسية‬
‫(‪ .)standard libraries‬يتوافر مفسر اللغة (‪ )language interpreter‬للتنصيب على مختلف نظم التشغيل من‬
‫الويندوز‬
‫والماك‬
‫واللينكس‬
‫ويمكن‬
‫تنزيل‬
‫النسخة‬
‫المناسبة‬
‫لكل‬
‫نظام‬
‫(‪ )/https://www.python.org/downloads‬والذي عند فتحه تظهر الواجهة التالية‪:‬‬
‫‪1‬‬
‫من‬
‫الموقع‬
‫التالي‬
‫من هذه الواجهة نختار اإلصدار المناسب (ويفضل ان يكون األخير الحتوائه على اخر التحديثات) وهو االن (وقت كتابة‬
‫الدرس) اإلصدار (‪ )python 3.4.3‬فننقر عليه لتظهر الواجهة التالية‪:‬‬
‫‪2‬‬
‫نجد هذه الملفات في أسفل صفحة ونقوم بتنزيل النسخة المناسبة لنظام تشغيلنا (‪ )32 or 64‬ونقوم بتنصيبها وهي سهلة‬
‫التنصيب ال تحتاج أي معلومات مسبقة إلكمال تنصيبها‪.‬‬
‫واالن بعد اكتمال التنصيب نذهب الى قائمة (‪ )Start‬ونكتب في خانة البحث (‪ )idle‬لتظهر لنا ضمن النتائج ال ( ‪IDLE‬‬
‫‪ )Python GUI‬فنقوم بفتحها لتظهر الواجهة التالية‪:‬‬
‫وهذه الواجهة تمثل الواجهة الرسومية لتطوير وتطبيق برامجنا التي سنعمل عليها في هذا الدرس والدروس القادمة ان شاء‬
‫هللا تعالى‪.‬‬
‫االن ننتقل الى الخطوة المهمة األخرى وهي ضبط بيئة الويندوز للعمل على البايثون خارج ال (‪ )IDLE‬الخاص به في سطر‬
‫األوامر (‪ )Command Prompt‬او غيرها ويتم ذلك بالنقر نقرة يمين على ايقونة جهاز الكومبيوتر ثم الذهاب الى‬
‫‪ properties‬ثم (‪ )advanced system settings‬لتظهر النافذة التالية‪:‬‬
‫‪3‬‬
‫االن ننقر على (‪ )environment variables‬لتظهر النافذة التالية‪:‬‬
‫‪4‬‬
‫االن نذهب الى (‪ )system variables‬وننقر على (‪ )new‬لتظهر الواجهة التالية والتي نمألها بالمعلومات المبينة في ادناه‪:‬‬
‫وهنا قمنا بتعريف متغير جديد للويندوز اسمه (‪ )python‬وامتداده هو امتداد تنصيب المفسر الذي قمنا بتنزيله وتنصيبه قبل‬
‫قليل وهو في الوضع الطبيعي (‪.)c:\python34‬‬
‫بعدها ننقر على (‪ )ok‬وبذلك تنتهي عملية تهيئة بيئة الويندوز للتعامل مع البايثون في التطبيقات المختلفة‪.‬‬
‫‪5‬‬
‫الدرس الثاني برنامج (‪:)hello world‬‬
‫بعد ان شرحنا كيفية تنزيل وتنصيب البرمجيات الالزمة للبدء بالعمل على لغة بايثون في الدرس السابق‪ ،‬وشرحنا ايضا ً كيفية‬
‫اعداد بيئة نظام تشغيل الويندوز للتعامل مع هذه اللغة‪ .‬نأتي اليوم الى البدء بالتعامل مع هذه اللغة وكيفية كتابة اول برنامج‬
‫باستخدامها ولكن قبل ذلك ال بد من ذكر مالحظة مهمة جداً وهي اننا اعتمدنا في شرحنا لهذه الدروس على تطبيق ( ‪IDLE‬‬
‫‪ )Python GUI‬ولكن هناك الكثير من التطبيقات األخرى التي يمكن استخدامها لكتابة برامج بايثون واختبار أدائها وتطويرها‬
‫ومن أهمها هو (‪ )Notepad ++‬والذي يمكن تنزيله من الرابط التالي‪ /https://notepad-plus-plus.org :‬ورغم اننا‬
‫لن نتعامل معه في شروحاتنا اال انه من األفضل ذكره لمن احترفوا استخدامه في تطوير برمجيات بقية لغات البرمجة سابقا ً‬
‫او يحاولون التعامل معه االن بدءاً من لغة بايثون علما ً انه يتمتع بمميزات اكثر بكثير من مفسر بايثون التلقائي الذي قمنا‬
‫بتنصيبه في الدرس السابق وهو (‪ )IDLE‬الذي سنعمل عليه في دورتنا هذه‪.‬‬
‫االن نبدأ درسنا على بركة هللا‪:‬‬
‫نذهب الى قائمة (‪ )Start‬ونقوم بفتح تطبيق (‪ )IDLE Python GUI‬الذي قمنا بتنصيبه سابقا ً لتظهر النافذة التالية‪:‬‬
‫االن نرى محرك األوامر (>>>) وهو محرك األوامر الخاص بلغة البايثون ويعني اننا مستعدون للبدء بكتابة برنامجنا األول‬
‫والذي سيكون كما في كل لغات البرمجة لطباعة عبارة (‪ )hello world‬على الشاشة والذي يتكون في لغة بايثون من سطر‬
‫واحد فقط على خالف بقية لغات البرمجة األخرى مثل السي بلس بلس والجافا واليكم مقارنة بسيطة بينها بخصوص هذا‬
‫البرنامج‪:‬‬
‫‪6‬‬
‫مالحظة‪ :‬الصورة أعاله تحتوي خطأ حيث تم استخدام (‪ )print‬للغة بايثون بدون اقواس وهو الحال للبايثون ‪ 7،2‬وما قبلها‬
‫واما بايثون ‪ 3‬وما بعدها فتتطلب االقواس بشك ضروري لذا يجب االنتباه الى النسخة التي تستخدمها وفروقات متطلباتها‪.‬‬
‫وكما الحظنا هنا فأن طباعة عبارة (‪ )Hello world‬تتطلب سطراً واحداً فقط وهو‬
‫(”‪print (“hello world‬‬
‫والذي يتضح في مفسر اللغة كما يلي‪:‬‬
‫‪7‬‬
‫االن عرفنا كيفية طباعة سطر واحد من الكلمات ويمكن طبعا ً طباعة أكثر من سطر وذلك بتكرار عبارة (‪ )Print‬وكما في‬
‫ادناه‪:‬‬
‫االن قد يتساءل البعض عن كيفية طباعة عدة أسطر دفعة واحدة او تنفيذ مجموعة من األوامر دفعة واحدة (كما هو الحال في‬
‫بقية لغات البرمجة) والحل لذلك سهل جداً وهو سياقنا الذي سنتبعه في الشرح للدروس القادمة‪:‬‬
‫‪8‬‬
‫نبدأ خطوات ذلك االن‪:‬‬
‫نقوم بالنقر على مكان فارغ في سطح المكتب نقرة يمين ثم نختار (‪ )new‬ثم (‪ )text document‬ونسمي الملف باسم معين‬
‫ونغير امتداده الى (‪ ).py‬وهو امتداد ملفات البايثون وكما في ادناه‪:‬‬
‫ولمن ال يعرف كيفية عرض امتدادات الملفات فهو امر سهل جداً‪:‬‬
‫نفتح (‪ )my computer‬ثم نذهب الى قائمة (‪ )tools‬ومنها نختار (‪ )folder options‬ثم (‪ )view‬لتظهر النافذة التالية‪:‬‬
‫االن نقوم بإزالة عالمة الصح (ان كانت موجودة) من المربع امام خيار (‪)Hide extensions for known file types‬‬
‫ثم (‪ ) ok‬وبعدها سنالحظ ان كل الملفات في الحاسوب ستظهر مع امتداداتها مما يسمح لنا بتغيير امتداد أي ملف بحسب‬
‫‪9‬‬
‫الحاجة وهو ما فعلناه هنا حيث غيرنا امتداد الملف النصي (‪ ).txt‬الى ملف بايثون (‪ ).py‬والذي عند فعله تظهر رسالة تطلب‬
‫منا تأكيد ذلك فنفعل ليكون شكل الملف النهائي كما في ادناه‪:‬‬
‫االن نقوم بالنقر نقرة يمين على هذا الملف واختيار (‪ )edit with idle‬لتفتح النافذة التالية‪:‬‬
‫االن نكتب أي عدد من أوامر البايثون هنا وألننا لحد االن ال نعرف سوى ايعاز الطباعة (‪ )print‬فسنكتب التالي‪:‬‬
‫‪10‬‬
‫طبعا ً يمكن كتابة المزيد ولكننا هنا نحاول إعطاء مثال فقط واالن لتنفيذ كل هذه االيعازات دفعة واحدة نقوم بالذهاب الى قائمة‬
‫(‪ )run‬ثم اختيار (‪ )run module F5‬لتظهر نتيجة التنفيذ التالية‪:‬‬
‫هنا يطلب منا حفظ الملف (‪ )save‬حيث تتميز ملفات البايثون بعدم القابلية للتنفيذ بدون حفظ فننقر على (‪ )ok‬ليتم حفظ‬
‫تغييرات الملف وتنفيذه فيما بعد لتظهر النتائج التالية‪:‬‬
‫‪11‬‬
‫وهنا نرى ان النتائج جاءت بتنفيذ كل أسطر األوامر دفعة واحدة كما هو الحال في برامجنا االعتيادية في بقية لغات البرمجة‪.‬‬
‫‪12‬‬
‫الدرس الثالث (‪:)Input tools‬‬
‫بعد ان شرحنا بيئة العمل في البايثون وبعض أدوات اإلخراج (‪ )print‬في الدروس السابقة نأتي اليوم لنشرح أحد أدوات‬
‫االدخال وهي أداة (‪ )input‬والتي يمكن استخدامها بالطريقة التالية‪:‬‬
‫للبايثون ‪ 3‬وما بعدها‬
‫للبايثون ‪ 7،2‬وما قبلها‬
‫)”‪x= input ("enter your name‬‬
‫)“ ‪x=raw_input(“enter something‬‬
‫وكما تالحظون فأن االدخال هنا يتم اسناده مباشرة الى متغير اسمه على سبيل المثال (‪ )x‬ويمكن استخدام أي اسم اخر طبعا ً‬
‫وبنفس شروط التسمية في بقية لغات البرمجة األخرى مثل ان يحتوي االسم على أي تركيبة من الحروف واألرقام بشرط ان‬
‫ال يبدأ برقم وان ال يحتوي عالمة (‪ )underscore‬وهي (_) وبقية الشروط المعروفة لكل المبرمجين‪.‬‬
‫كذلك من األمور التي يجب مالحظتها هنا وهي فرق رئيسي بين لغة بايثون وبقية اللغات انها ال تحتاج تعريف المتغير قبل‬
‫استخدامه أي اننا نستطيع اسناد أي قيمة الى المتغير (‪ )x‬كمثال واستخدامها واليكم المثال التالي‪:‬‬
‫نقوم بفتح ال (‪ )idle python GUI‬ونكتب التالي‪:‬‬
‫من هنا نالحظ األمور التالية‪:‬‬
‫‪ -9‬إمكانية اسناد أي قيمة الى أي متغير مباشرة وبدون اعالن مسبق عن نوع المتغير‪.‬‬
‫‪13‬‬
‫‪ -7‬إمكانية اجراء العمليات الحسابية مباشرة وبدون مقدمات وال استدعاء لمكتبات الرياضيات او غيرها كما في بقية‬
‫لغات البرمجة األخرى‪.‬‬
‫‪ -3‬طباعة قيمة أي متغير باستخدام ايعاز (‪ )print‬في أي مكان من البرنامج‪.‬‬
‫‪ -4‬يمكن اسناد قيم جديدة للمتغير والذي يأخذ دائما ً اخر قيمة أسندت له وينسى القيم القديمة فمثالً ال (‪ )x‬كانت قيمته‬
‫األولية ‪ 9‬ثم وضعنا بداخله (أسندنا له) قيمة رمزية هي (”‪ )“hello world‬وحين طلبنا طباعة قيمته باإليعاز‬
‫)‪ print(x‬قام المفسر بطباعة قيمة المتغير النهائية‪.‬‬
‫‪ -5‬يمكن طباعة قيمة أي متغير بذكر اسمه فقط ومثال ذلك حين كتبنا (‪ )x‬قام المفسر بطباعة قيمته مباشرة وبدون‬
‫الحاجة الى ايعاز (‪ )print‬وهي خاصية مهمة جداً سنتعرف على أهميتها في الدروس القادمة ان شاء هللا‪.‬‬
‫واالن نعود الى أداة االدخال موضوع الدرس ونكتب الكود التالي في ملف (‪ ).py‬كما فعلنا في الدروس السابقة وكما في ادناه‪:‬‬
‫االن نقوم بتنفيذ هذا الكود لنرى النتيجة‪:‬‬
‫‪14‬‬
‫هنا نرى ان المفسر قام بطباعة العبارة داخل ايعاز االدخال (‪ )input‬منتظراً منا ادخال قيمة معينة ليقوم بأسنادها الى المتغير‬
‫(‪ )x‬فنقوم بكتابة أي شيء وننقر (‪ )enter‬لنرى النتيجة‪:‬‬
‫هنا قمنا بإدخال قيمة المتغير (‪ )x‬وهي كلمة (‪ )mustafa‬فقام المفسر بأسنادها الى المتغير ‪ x‬ثم طباعتها استناداً الى االيعاز‬
‫الثاني ‪ print‬واليكم مجموعة ايعازات أكثر توضيحا ً للفكرة‪:‬‬
‫‪15‬‬
‫واالن عند تنفيذ هذا البرنامج نجد النتائج التالية‪:‬‬
‫ولتوضيح البرنامج أعاله نقول‪:‬‬
‫االيعاز األول لعرض رسالة للمستخدم تطلب منه ادخال قيمة معينة ليتم اسنادها الى المتغير ‪ x‬كسلسلة رمزية (‪.)String‬‬
‫االيعاز الثاني لطباعة قيمة المتغير ‪x‬‬
‫االيعاز الثالث لعرض رسالة للمستخدم تطلب منه ادخال قيمة معينة ليتم اسنادها الى المتغير ‪ y‬كسلسلة رمزية (‪.)String‬‬
‫االيعاز الرابع لعرض رسالة للمستخدم تطلب منه ادخال قيمة معينة ليتم اسنادها الى المتغير ‪ z‬كسلسلة رمزية (‪.)String‬‬
‫‪16‬‬
‫االيعاز الخامس هو أداة تحويل للسلسلة الرمزية المخزونة في (‪ )y‬الى رقم صحيح (‪ )integer‬ليخزن في المتغير ‪.y1‬‬
‫االيعاز الخامس هو أداة تحويل للسلسلة الرمزية المخزونة في (‪ )z‬الى رقم صحيح (‪ )integer‬ليخزن في المتغير ‪.z1‬‬
‫االيعاز السابع هو عملية رياضية لحساب معدل القيمتين التي تم ادخالهما ووضع الناتج في متغير يسمى ‪avg‬‬
‫واخيراً االيعاز الثامن لطباعة قيمة الناتج (المعدل) المسمى (‪ )Avg‬وهذا ما حصل في التنفيذ كما هو واضح أعاله‪.‬‬
‫مالحظة‪ :‬للخروج من برنامج (‪ )IDLE Python GUI‬يمكن فقط كتابة )( ‪ exit‬في سطر األوامر او النقر (‪)Ctrl + C‬‬
‫سوية من لوحة المفاتيح‪ .‬اما محرر النصوص الذي قمنا بالكتابة بداخلة من البداية فيجب الحرص على خزن التغييرات فيه‬
‫قبل التنفيذ وقبل اغالقه تجنبا ً لضياع الشفرات البرمجية التي قمنا بكتابتها‪.‬‬
‫مالحظة أخرى‪ :‬عالمات االقتباس المفردة (’‘) وعالمات االقتباس المزدوجة (”“) تستخدمان داخل ايعازات االدخال ‪input‬‬
‫واإلخراج ‪ print‬بنفس الطريقة بدون أي فرق بينهما‪.‬‬
‫مثال اخر للتوضيح أكثر‪:‬‬
‫وعند التنفيذ تظهر النتائج التالية‪:‬‬
‫‪17‬‬
‫وايضا ً لتوضيح البرنامج نذكر التالي‪:‬‬
‫االسطر الثالثة األولى هي مجرد ادخال لثالث قيم وخزنها في متغيرات تسمى ‪ x,y,z‬كما سبق شرحه‪.‬‬
‫االسطر الرابع والخامس والسادس هي لتحويل قيم تلك المتغيرات من سالسل رمزية (‪ )string‬الى قيم صحيحة (‪.)int‬‬
‫السطر السابع لحساب المعدل فقط كما تم توضيحه سابقا ً‬
‫السطر األخير لطباعة عبارة اإلخراج للمستخدمين والتي تحتوي الكثير من األمور منها رسائل للمستخدم ال يتم تفسيرها من‬
‫قبل المفسر (‪ ) interpreter‬وقد وضعت بين عالمتي اقتباس (مفردة او مزدوجة فال فرق بينهما) واما بقية األمور التي‬
‫فصل ت بينها وبين الرسائل الغير مفسرة فوارز متعددة فهي قيم رياضية او منطقية او رمزية ليتم طباعة قيمها على شاشة‬
‫اإلخراج‪.‬‬
‫مالحظة أخيرة‪:‬‬
‫االن وبعد ان اكملنا العمل على هذا البرنامج‪ ،‬نستطيع اغالقه واغالق مفسر البايثون (‪ )idle python gui‬ثم النقر نقرتين‬
‫على ملف البرنامج الذي قمنا بخزنة في البداية تحت اسم (‪ )*.py‬لنرى النتيجة التالية‪:‬‬
‫‪18‬‬
‫مما يعني ان برنامجنا الذي قمنا بكتابته وحفظه قد أصبح ملف قابل للتنفيذ بعيداً عن اللغة ومفسرها أي اننا نستطيع وضع‬
‫أي شفرة برمجية بداخله وحفظه ليتم تنفيذه بشكل مباشر فيما بعد وهو أحد المميزات الممتازة للغة البايثون مقارنة ببقية‬
‫لغات البرمجة األخرى التي يتطلب انشاء ملف تنفيذي فيها خطوات كثيرة‪.‬‬
‫‪19‬‬
‫الدرس الرابع‪ :‬التعليقات والتعامل مع األرقام (‪)comments and numbers‬‬
‫بداية وككل لغات البرمجة تحتوي لغة البايثون على أدوات إلضافة تعليقات (‪ )comments‬في داخل البرنامج والتي ال يقوم‬
‫المفسر بتفسيرها وال حتى عرضها عند التنفيذ بل هي تستخدم فقط لترك مالحظات وتعليقات للمبرمج نفسه او لبقية المبرمجين‬
‫المسؤولين عن تدقيق او تطوير البرنامج في المستقبل وهذه التعليقات في لغة البايثون هي ببساطة كل ما يأتي بعد عالمة‬
‫(‪ )#‬وكما في المثال ادناه‪:‬‬
‫نفتح ال (‪ )IDLE python GUI‬كما تعلمنا سابقا ً ونكتب التالي ونرى نتيجة التنفيذ‬
‫هنا رأينا كيف ان الكلمات التي بعد العالمة (‪ )#‬لم يتم اخذها بعين االعتبار عند التنفيذ فالمفسر ال ينظر اليها اصالً وهي‬
‫للمبرمج فقط وليس للمستخدمين وهي ذات أهمية كبيرة للمبرمجين خصوصا ً للبرامج الكبيرة والمتشعبة‪.‬‬
‫االن ننتقل الى الجزء الثاني من درسنا اليوم وهو كيفية التعامل مع األرقام في البايثون‪:‬‬
‫ استخدام البايثون كألة حاسبة‪:‬‬‫نستطيع استخدام محرك األوامر في مفسر البايثون كألة حاسبة مباشرة وكما يلي‪:‬‬
‫‪20‬‬
‫كما نرى فقد تم تنفيذ كل االيعازات بمجرد النقر على (‪ )enter‬بعرض نتائج العمليات الرياضية مباشرة مع عدم اهمال أي‬
‫كسور عشرية‪.‬‬
‫كذلك من مميزات هذه اللغة عن بقية لغات البرمجة األخرى قابلية االسناد المتعدد وكما في ادناه‪:‬‬
‫ويعلم مبرمجي لغات الجافا والسي بلس بلس ان هذا غير مقبول في تلك اللغات مما يميز لغة بايثون عنها في هذا المجال‪.‬‬
‫كذلك يمكن التعامل مع االعداد المركبة وهي االعداد التي تتكون من جزئين حقيقي وتخيلي (‪ )x+jy‬حيث يمثل ال (‪ )j‬قيمة‬
‫غير حقيقية تمثل جذر السالب واحد وكما في ادناه‪:‬‬
‫‪21‬‬
‫ومن األمثلة أعاله نالحظ اننا نستطيع التعبير عن االعداد المركبة بعدة طرق واجراء كل العمليات الرياضية عليها بسهولة‪.‬‬
‫كذلك يمكن التعامل مع أجزاء االعداد المركبة الحقيقي (‪ )Real‬والتخيلي (‪ )imaginary‬وكما في ادناه‪:‬‬
‫‪22‬‬
‫ومن هنا نرى اننا نستطيع تسميه العدد التخيلي باسم معين ثم التعامل مع جزئه الحقيقي والتخيلي كل على حدة‪.‬‬
‫وكما عرفنا من الدروس السابقة فهناك عدة دوال للتحويل بين األنواع المختلفة لألعداد ومنها ()(‪ )int(), float‬وكما في‬
‫ادناه‪:‬‬
‫‪23‬‬
‫من هنا نرى اننا نستطيع تحويل االعداد الصحيحة الى عشرية وبالعكس اال ان هذا ال يمكن مع االعداد المركبة وكما في ادناه‪:‬‬
‫حيث نرى رسالة الخطأ واضحة بعدم قابلية تحويل االعداد المركبة الى اعداد عشرية ولكننا نستطيع إيجاد القيمة المطلقة‬
‫للعدد المركب وهي الجذر التربيعي لناتج جمع الجزء الحقيقي تربيع مع الجزء التخيلي تربيع وكما في ادناه‪:‬‬
‫))‪Abs(a)=sqrt((a.real*a.real)+(a.imag*a.imag‬‬
‫وكما في ادناه‪:‬‬
‫‪24‬‬
‫مالحظة أخرى‪ :‬عند التعامل مع المفسر كحاسبة ألجراء العمليات الحسابية فأن اخر نتيجة او رقم يتم طباعته يتم حفظه في‬
‫متغير خاص داخل المفسر اسمه (_) بحيث يمكن التعامل معه على انه متغير يدخل في عمليات حسابية أخرى وكما في ادناه‪:‬‬
‫وكما نرى هنا فقد تم التعامل مع المتغير (_) على انه قيمة عددية تدخل في الحسابات وحين قمنا بطرحه من نفسه وكان‬
‫الناتج صفر‪ ،‬تم خزن الصفر في نفس المتغير وحين حاولنا القسمة عليه ظهر خطأ عدم قابلية القسمة على صفر‪.‬‬
‫‪25‬‬
‫الدرس الخامس‪ :‬التعامل مع السالسل الرمزية (‪)Strings‬‬
‫بعد ان شرحنا أدوات االدخال واإلخراج والتعليقات واألرقام نأتي اليوم الى كيفية التعامل مع السالسل الرمزية وهي ببساطة‬
‫أي تركيبة من الحروف واألرقام والرموز الخاصة ويتم ببساطة إدخالها الى المفسر محصورة بين عالمات اقتباس مفردة‬
‫(‘ ‘) او عالمات اقتباس مزدوجة (" ") وكما في المثال ادناه‪:‬‬
‫وكما نرى هنا فأن أي شيء محصور بعالمات اقتباس يتم طباعته بدون تصرف من المفسر وكذلك فأن اسناد هذه السالسل‬
‫الرمزية الى متغيرات وطباعتها مرفقة مع بعضها البعض يتم باستخدام عالمة (‪ )+‬والتي تمثل هنا عالمة ارفاق‬
‫(‪ )appending‬وليست جمع حيث يتم طباعة المتغير األول ثم الثاني وهاكم مثاالً اخر لتوضيح الفكرة‪:‬‬
‫‪26‬‬
‫هنا نالحظ الفرق بين االدخال المباشر وبين االدخال عن طريق أداة (‪ )input‬ففي المرة األولى تعامل المفسر مع ال(‪ )x‬وال‬
‫(‪ ) y‬على انها متغيرات رقمية وفي المرة الثانية عاملها على انها سالسل رمزية والتي يمكن تحويلها الى ارقام باستخدام‬
‫الدالة التي تحدثنا عنها سابقا ً ()‪ )int(x‬ويمكن مراجعة الدروس السابقة لالطالع عليها‪.‬‬
‫كذلك فأن السالسل الرمزية يمكن ان تمتد ألكثر من سطر واحد كما هو الحال في بقية لغات البرمجة األخرى وباستخدام (\‪)\n‬‬
‫كما في المثال ادناه‪:‬‬
‫‪27‬‬
‫كذلك يمكن ان تتكون السلسلة الرمزية من مجموعة سالسل رمزية جزئية وكما في ادناه‪:‬‬
‫الحظ ايضا ً األمثلة ادناه‪:‬‬
‫‪28‬‬
‫االن وكما في لغة (‪ ) C‬من المهم التعامل مع مكونات السلسلة الرمزية (الرموز) كل على حدة لتغيير او تعديل أي شيء فيها‬
‫ويتم ذلك بفهرسة (‪ )index‬السلسلة الرمزية وهو شيء يحصل تلقائيا ً من قبل المفسر بحيث يكون الرمز األول ذو فهرس‬
‫صفر والعنصر الثاني ذو فهرس ‪ 9‬وهكذا وكما موضح في األمثلة ادناه‪:‬‬
‫‪29‬‬
‫واالن دعونا نشرح كل سطر على حدة‪:‬‬
‫السطر األول كان إلدخال قيمة سلسلة رمزية اسمها (‪ )string‬ومحتوياتها (‪)hello‬‬
‫السطر الثاني ]‪ string[0‬يستخدم لطلب طباعة الرمز األول من السلسلة (‪)string‬‬
‫السطر الثالث يستخدم لطلب طباعة الرمز الثاني من السلسلة (‪)string‬‬
‫السطر الرابع ]‪ string[5‬يطلب طباعة الرمز السادس من السلسلة وألن السلسلة تتكون من ‪ 5‬رموز فقط فقد حصلنا على‬
‫رسالة خطأ‪.‬‬
‫السطر الخامس يطلب طباعة الرموز من ‪ 7‬الى ‪ 4‬مع عدم شمول الرمز الرابع فقام بطباعة الرمزين الثاني والثالث فقط‬
‫السطر السادس يطلب طباعة الرموز من ‪ 7‬الى ‪ 5‬مع عدم شمول الرمز الخامس (الغير موجود اصالً) فقام بطباعة الرموز‬
‫الثاني والثالث والرابع‪.‬‬
‫السطر السابع ]‪ string[:3‬يطلب طباعة كل شيء قبل الرمز الرابع (الذي فهرسه ‪)3‬‬
‫السطر األخير ]‪ string[3:‬يطلب طباعة الرمز الرابع (ذو الفهرس ‪ )3‬وما بعده‪.‬‬
‫وهكذا نستطيع تعميم كل هذه المعلومات على بقية السالسل الرمزية األخرى‪.‬‬
‫مالحظة‪ :‬على خالف بقية لغات البرمجة فأن لغة بايثون ال تتقبل تغيير قيم رموز داخل السالسل الرمزية وكما موضح في‬
‫المثال ادناه‪:‬‬
‫‪30‬‬
‫كذلك يمكن انتاج سالسل رمزية جديدة باستخدام الخصائص أعاله وكما في المثال التالي‪:‬‬
‫‪31‬‬
‫مزيد من األمثلة على التعامل مع أجزاء السالسل الرمزية‪:‬‬
‫‪32‬‬
‫واخيراً نذكر اننا حين نكتب قيم فهارس سالبة فأننا بذلك نخبر المفسر بأن يبدأ الحساب من اليمين الى اليسار أي ان الفهرس‬
‫سالب واحد يعني اخر رمز في السلسلة والفهرس سالب ‪ 7‬هو الرمز قبل األخير وهكذا وكما في ادناه‪:‬‬
‫‪33‬‬
‫واخيراً يجب الحذر عند التعامل مع فهارس السالسل الرمزية من اليمين واليسار ومالحظة الترقيم الصحيح لكل اتجاه‪.‬‬
‫كما في كل لغات البرمجة األخرى‪ ،‬فأن لغة البايثون توفر دالة حساب طول السلسلة الرمزية وهي )‪ len(string‬وكما في‬
‫ادناه‪:‬‬
‫‪34‬‬
‫الدرس السادس‪ :‬الثوابت والمتغيرات (‪)Constants and variables‬‬
‫قبل البدء بمحتوى درس اليوم هناك مجموعة من المالحظات التي يجب االنتباه لها‪:‬‬
‫‪ -9‬اننا في هذه الدروس نعمل بشكل متبادل على لغات البايثون ‪ 7‬والبايثون ‪ 3‬ورغم التشابه الكبير بينهما اال ان هناك‬
‫اختالفات جوهرية بين تراكيب الجمل البرمجية الخاصة بكل منهما لذا يجب االنتباه الى أي منهما قمتم بتنصيبها وهو‬
‫السبب في ظهور بعض رسائل الخطأ للبرامج التي نكتبها هنا‪.‬‬
‫‪ -7‬مما ال شك فيه ان كل هذه الدروس ستكون بدون فائدة من دون تطبيق لكل خطوة نشرحها والسؤال عن كل شيء‬
‫غير مفهوم بل والتفكير اإلبداعي فيما وراء المشروح ومحاولة تجربة كل ما يخطر ببالكم وبأبسط األدوات بالتدريج‬
‫فهكذا يتكون العقل البرمجي لديكم بالتجربة والخطأ الى حد الوصول الى مرحلة التمرس فالبرمجة هي لغة الممكن‬
‫كالسياسة تماما ً ‪.‬‬
‫‪ -3‬سيتم تطبيق بعض البرامج في بيئة الدوز في الويندوز (‪ )command prompt‬في حين سيتم تطبيق البرامج‬
‫األكبر واألكثر تعقيداً كما شرحنا باستخدام برنامج (‪ )IDLE Python GUI‬لذا يرجى مالحظة الفرق بينهما عند‬
‫التنفيذ‪.‬‬
‫‪ -4‬اعود وأؤكد على أهمية المتابعة والتطبيق والسؤال عن كل ما هو غير مفهوم ونحن هنا ننتظر اسئلتكم لتوضيح ما‬
‫نحتاج اضافته الى المادة العلمية التي ننشرها لتعميم الفائدة وعدم الوقوع في نفس األخطاء مرة بعد أخرى‪.‬‬
‫واالن نبدأ درس اليوم وبعد ان شرحنا أدوات االدخال واإلخراج والتعليقات وبعض األمور األخرى في الدروس السابقة وقبل‬
‫البدء بشرح أدوات الشروط والتكرار‪ ،‬نود ان نذكر المعلومات البديهية (للمبرمجين القدامى والمحترفين) التالية‪:‬‬
‫الثوابت في لغة بايثون‪:‬‬
‫وهي على نوعين‪:‬‬
‫ثوابت رقمية مثل (‪ )11, 22.4, -45‬وهي األرقام الصحيحة والكسرية الموجبة والسالبة التي يمكن إدخالها مباشرة بأسنادها‬
‫الى متغيرات او عن طريق لوحة المفاتيح باستخدام أدوات االدخال (‪ )input‬وغيرها‪.‬‬
‫الثوابت النصية او السالسل الرمزية مثل (”‪ )“hello world‬والتي يتم إدخالها محصورة بين عالمتي اقتباس مفردة او‬
‫مزدوجة وكما رأينا في الدروس السابقة‪.‬‬
‫بعض األمثلة على ادخال الثوابت في بايثون‪:‬‬
‫‪35‬‬
‫المتغيرات في لغة البايثون‪:‬‬
‫وهي األسماء التي تطلق على مواقع خزن البيانات في الذاكرة حيث يستطيع المبرمج خزن واسترجاع البيانات بداخلها‬
‫ويستطيع المبرمج تحديد اسم المتغير وكذلك تحديد نوعية محتوياته (بدون تصريح مسبق) على خالف بقية لغات البرمجة‬
‫األخرى‪.‬‬
‫امثلة استخدام المتغيرات في لغة البايثون‪:‬‬
‫شروط تسمية المتغيرات‪ :‬كل لغات البرمجة فيها شروط معينة لتسمية المتغيرات وهي تقريبا ً متشابهة في كل لغات البرمجة‬
‫وتسمل التالي‪:‬‬
‫ يجب ان يبدأ اسم المتغير بحرف او عالمة (_ ‪.)underscore‬‬‫ يجب ان يحتوي حروف وأرقام ورمز (_ ‪ )underscore‬فقط وال يحتوي أي رموز خاصة أخرى‬‫‪36‬‬
‫ يجب االنتباه الى ان لغة بايثون حساسة لحالة الحروف (‪ )case sensitive‬أي ان المتغير الذي اسمه (‪ )Ali‬يختلف‬‫عن المتغير الذي اسمه (‪ )ALI‬وكذلك عن المتغير (‪ )ali‬فيجب االنتباه‪.‬‬
‫ يفضل ان تكون أسماء المتغيرات قريبة من معانيها الحقيقية لتسهيل قراءة البرنامج من قبل مبرمجه وغيره من‬‫المبرمجين وفي حالة كثرة المتغيرات وتشابهها يفضل استخدام التعليقات (‪ )comments‬لتوضيح معانيها‪.‬‬
‫امثلة على أسماء المتغيرات المقبولة وغير المقبولة‪:‬‬
‫مقبول‪_saad :‬‬
‫سيء‪Alaa :‬‬
‫‪Qasim22 ali‬‬
‫‪ALAA‬‬
‫غير مقبول‪ 123all :‬ألنه يبدأ برقم‪.‬‬
‫‪o1k2j3‬‬
‫‪ alaa‬ألنها متشابهة وتسبب مشاكل للمبرمجين‬
‫*‪ :Ali‬ألنه يحتوي رمز خاص (*) وهكذا‪.‬‬
‫‪ -‬الشرط األخير ألسماء المتغيرات ان ال تكون أحد الكلمات المحجوزة للغة وهي التالية‪:‬‬
‫تتكون برامج البايثون بصورة عامة من أسطر برمجية وتختلف أنواع هذه االسطر البرمجية باختالف مكوناتها وهي كما يلي‪:‬‬
‫‪37‬‬
‫حيث تكون بعض الجمل البرمجية هي عبارات اسناد فقط مثل (‪ )x=2‬وبعضها تكون جمل اسناد وتعابير رياضية مثل‬
‫(‪ )y=x+2‬وبعضها عبارات ادخال او طباعة او شروط او تكرار وكما سنرى في الدروس القادمة ان شاء هللا‪.‬‬
‫العمليات الرياضية األساسية للغة البايثون‪:‬‬
‫امثلة على تطبيق العمليات الرياضية في بايثون‪:‬‬
‫‪38‬‬
‫تسلسل تنفيذ العمليات في لغة بايثون‪ :‬كما في كل لغات البرمجة األخرى‪:‬‬
‫ االقواس‬‫ األسس‬‫ الظرب والقسمة‬‫ الجمع والطرح‬‫ من اليسار الى اليمين‬‫مثال‪:‬‬
‫‪39‬‬
‫مالحظة‪ :‬لتبسيط األمور على المفسر والقاري فيما بعد يفضل فصل كل العمليات ذات األولوية المهمة بأقواس عن بقية أجزاء‬
‫العمليات الرياضية‪.‬‬
‫مالحظة أخرى‪ :‬القسمة في البايثون ‪ 7‬معقدة قليالً بحيث ان ناتج قسمة عدد صحيح على عدد صحيح اخر هو عدد صحيح‬
‫مع اهمال الكسور العشرية ولكن هذا الشيء اختلف االن مع البايثون ‪ 3‬حيث أصبح المفسر ال يهمل أي جزء من الناتج‬
‫ويعرضه كامالً حتى لو كانت القيم االصلية صحيحة وكما في ادناه‪:‬‬
‫في البايثون ‪7‬‬
‫‪40‬‬
‫اما في البايثون ‪3‬‬
‫في لغة البايثون ‪ 7‬كانت عملية قسمة عدد صحيح على عدد عشري او بالعكس تعطي ناتج عشري دائما ً وهو امر مماثل لما‬
‫يحصل االن في لغة بايثون ‪ 3‬التي عالجت المشكلة من األساس‪.‬‬
‫أنواع المتغيرات والثوابت (‪:)Types of constants and variables‬‬
‫‪41‬‬
‫بعض األحيان نواجه مشاكل في التعامل مع المتغيرات والثوابت وتظهر لنا رسائل خطأ كثيرة بسبب محاولة اجراء بعض‬
‫العمليات الحسابية البسيطة بين الثوابت والمتغيرات من (أنواع) مختلفة وكما في ادناه‪:‬‬
‫والسبب في الخطأ األول هو محاولتنا جمع عدد صحيح مع سلسلة رمزية وهو خطأ بديهي طبعاً‪.‬‬
‫اما السبب للخطأ الثاني فعلى الرغم من اننا قمنا بإدخال رقم (‪ )x=55‬ومحاولة جمعه مع رقم اخر وهو (‪ )y=5‬اال ان رسالة‬
‫خطأ قد ظهرت ألن ادخاالت أداة (‪ )input‬كلها تعتبر سالسل رمزية ولمعرفة نوع كل متغير نقوم بكتابة‪:‬‬
‫)‪Type (variable name‬‬
‫وكما في ادناه‪:‬‬
‫‪42‬‬
‫ومن هنا عرفنا ما هو نوع كل متغير او ثابت بوضعه بين قوسين وسبق ذلك بكلمة ‪ type‬والتي تساعد في حل مشاكل األنواع‬
‫واما التحويل بين األنواع فقد تحدثنا عن بعضه سابقا ً وذلك بتحويل السلسلة الرمزية الى عدد صحيح باستخدام دالة‪:‬‬
‫)‪int(variable name or value‬‬
‫ويمكن استخدام دالة التحويل الى عدد عشري باستخدام‪:‬‬
‫)‪float(variable name or value‬‬
‫وكما في ادناه‪:‬‬
‫‪43‬‬
44
‫الدرس السابع‪ :‬الجمل الشرطية (‪)conditional statements‬‬
‫كما في كل لغات البرمجة‪ ،‬فأن لغة بايثون تتعامل مع الشروط بشكل ممتاز وباستخدام عبارة (‪ )if‬وبالصيغة التالية‪:‬‬
‫‪If condition:‬‬
‫‪Statements‬‬
‫‪Or:‬‬
‫‪If condition:‬‬
‫‪Statements‬‬
‫‪Else:‬‬
‫‪Statements‬‬
‫وكما يعرف الجميع فأن العبارات (‪ )statements‬ال تنفذ اال إذا كان الشرط (‪ )condition‬صحيحا ً واما إذا كان الشرط خطأ‬
‫فيتم القفز مباشرة الى العبارات بعد بلوك ال (‪ )if‬وكما في التوضيح التالي‪:‬‬
‫وكمثال على ذلك الحظوا البرنامج التالي‪:‬‬
‫‪45‬‬
‫ونالحظ هنا ان الشرط بجانب ال (‪ )if‬وهو (‪ )x>3‬صحيح فتم تنفيذ كل العبارات داخل بلوك ال (‪ )if‬واما لتمييز العبارات‬
‫التابعة لل (‪ )if‬فبخالف لغات البرمجة األخرى‪ ،‬ال تستخدم بايثون االقواس وانما المسافات (‪ )indents‬لتمييز العبارات التابعة‬
‫لل (‪ )if‬ولغيرها من عبارات الشروط والتكرار التي سنتحدث عنها الحقاً‪ .‬واما ألنهاء بلوك ال(‪ )if‬او ال (‪ )else‬او أي شيء‬
‫غيرها فنقوم فقط بإرجاع مؤشر الطباعة الى بداية السطر او بمحاذاة الدالة السابقة لنعطي للبايثون رسالة تفيد بأن البلوك‬
‫الحالي انتهى‪ .‬وقبل الخوض في بقية تفاصيل استخدام عبارة (‪ )if‬ال بد من التذكير بعبارات المقارنة المنطقية التي يمكن‬
‫استخدامها مع عبارة (‪ )if‬وهي كما يلي‪:‬‬
‫‪46‬‬
‫وكمثال لدور المسافات (‪ )indents‬في التفريق بين بلوك واخر الحظ الصورة التالية‪:‬‬
‫حيث نالحظ ان كل لون مختلف هو بلوك يتميز عن بقية البلوكات وبعضها يجتمع بسطر واحد وبعضها بعدة أسطر‪.‬‬
‫كما يعرف المبرمجون ببقية لغات البرمجة‪ ،‬فأن عبارة (‪ )if‬تحتوي الكثير من الخيارات والمميزات ومنها انها يمكن ان‬
‫تستخدم في التنفيذ بمسار واحد او بعدة مسارات وبحسب نوعية استخدامها وكما في التفصيل ادناه‪:‬‬
‫‪47‬‬
‫حيث يتضح من المثال أعاله ان هناك شرط واحد للتنفيذ اما ان يكون صحيح فيتم التنفيذ واما ان يكون خطأ فيقفز المفسر الى‬
‫ما بعد بلوك (‪ )if‬لتنفيذه‪.‬‬
‫مالحظة‪ :‬كما ذكرنا سابقا ً فأن المسافات (‪ )indents‬تعمل بدل االقواس لفصل بلوك (‪ )if‬عن بقية مكونات البرنامج وهنا‬
‫يجب االنتباه الى استخدام زر (‪ )space‬من لوحة المفاتيح أربع مرات واالبتعاد كليا ً عن استخدام (‪ )tab‬ألنه يعطي رسالة‬
‫خطأ دوما ً حيث يعتبر ال (‪ )tab‬رمزاً غير مفهوم للغة بايثون فيجب الحذر‪.‬‬
‫ولمزيد من التوضيح حول المسافات ودورها في تحديد مسار التنفيذ الحظ األمثلة التالية‪:‬‬
‫‪48‬‬
‫ولتوضيح البلوكات المتداخلة نضعها بألوان مختلفة هنا‪:‬‬
‫‪49‬‬
‫الحظ عدم وجود اقواس وانما مسافات فقط‪.‬‬
‫‪50‬‬
‫كما في الصورة السابقة نرى ان عبارة (‪ )if‬تستخدم بشكل متشعب ( ‪ if‬بداخل ‪ ) if‬وتسمى باصطالح البرمجة (‪)nested if‬‬
‫وتعني انه ان كان الشرط األول صحيح فقم بالدخول الى البلوك الخاص به لتجد شرطا ً اخر‪ ،‬فأن كان هذا الشرط صحيح ايضا ً‬
‫يقوم المفسر بالدخول الى داخل البلوك الخاص به واال فال‪ .‬وهكذا؟‬
‫يمكن في هذه الحاالت استخدام (‪ )else‬او (‪ )elif = else if‬وبحسب الحاجة وكما في ادناه‪:‬‬
‫‪51‬‬
‫ويمكن ان يكون التنفيذ متعدد المسارات وكما في ادناه‪:‬‬
‫ويمكن تنفيذ الكود أعاله بعدة طرق اعتماداً على قيمة (‪ )x‬وكما في ادناه‪:‬‬
‫حيث ينفذ الجزء البرتقالي فقط ألن قيمة (‪ )x‬تساوي صفر‪.‬‬
‫‪52‬‬
‫وهنا تنفذ األجزاء البرتقالية ألن قيمة (‪ )x‬تساوي ‪5‬‬
‫واخيراً لقيمة (‪ )x‬تساوي ‪ 72‬نرى التنفيذ التالي‪:‬‬
‫‪53‬‬
‫الحظ ايضاً‪:‬‬
‫واخيراً يمكن كتابة كودات برامج تحتوي على أسطر ال تنفذ ابداً وكما في الصورة التالية‪:‬‬
‫‪54‬‬
‫الدرس الثامن‪ :‬أدوات الشرط واالستثناء (‪)Try-except statement‬‬
‫بعد ان درسنا في الدرس السابق هيكل واستخدام األنواع المختلفة لعبارة (‪ )if‬الشرطية‪ ،‬نأتي اليوم لمناقشة مشكلة تحصل‬
‫بكثرة اثناء استخدام أدوات االدخال للمتغيرات والثوابت وهي احتمالية ادخال المستخدم لقيمة ال تطابق شروط البرنامج او ما‬
‫يتوقعه المبرمج فيسبب ذلك خطأ في التنفيذ عادة ولكن وجود أداة (‪ )try-except‬يسمح بتالفي هذه المشاكل وكما في‬
‫التوضيح التالي‪:‬‬
‫‪Try‬‬
‫هنا نضع الكود الخطر او المحتمل ان يسبب فشل تنفيذ البرنامج‬
‫‪Except‬‬
‫هنا نضع حل االشكال المحتمل وكما سنرى في المثال التالي‪:‬‬
‫نفترض اننا نريد المستخدم ان يدخل قيمة رقمية (‪ )integer or float‬ألدخالها في معادالت رياضية ولكنه يصدف ان يقوم‬
‫المستخدم بأدخال قيمة متغير رمزي (‪ )string‬مما يسبب توقف التنفيذ وظهور رسالة خطأ وكما في ادناه‪:‬‬
‫وهنا نرى انه من الطبيعي ان تظهر هذه الرسالة ألننا حاولنا تحويل قيمة رمزية الى عدد صحيح وهو شيء غير مقبول‬
‫برمجياً‪ .‬ولتجنب هذه المشكلة نقوم بالتالي‪:‬‬
‫‪55‬‬
‫وهنا قمنا بأخبار المفسر بالقيام بالتالي‪:‬‬
‫ان يقوم بأخذ قيمة المتغير (‪ )x‬على انها ”‪ “first‬والمتغير (‪ )y‬على انها ”‪ “second‬ثم قلنا للمفسر حاول (‪ )try‬تحويل‬
‫المتغيرين (‪ )x,y‬الى قيم صحيحة‪ ،‬فأن كان ذلك ممكنا ً فسيقوم بتنفيذ ما بداخل عبارة (‪ )try‬واال فسيقفز مباشرة الى ما بداخل‬
‫عبارة االستثناء (‪ )except‬لينفذ ما بداخلها وهو ما حصل أعاله‪.‬‬
‫مثال اخر على التعامل مع عبارة المحاولة واالستثناء‪:‬‬
‫‪56‬‬
‫والتوضيح لتسلسل التنفيذ كما في ادناه‪:‬‬
‫‪57‬‬
‫وهذه نتيجة التنفيذ في حالة تبديل قيمة المتغير (‪ )astr‬وجعلها قيمة عددية حيث يتم تنفيذ ما بداخل عبارة (‪ )try‬وكما في‬
‫ادناه‪:‬‬
‫‪58‬‬
‫واخيراً البد من اإلشارة الى ان عبارة المحاولة واالستثناء يفضل ان تستخدم في كل البرامج التي تتضمن نوع من االدخال‬
‫للمستخدم وعادة تستخدم لوضع رسالة تظهر للمستخدم في حالة ادخال خاطيء وغير مناسب لمتطلبات البرنامج وكما في‬
‫ادناه‪:‬‬
‫‪59‬‬
‫واما في حالة ادخال قيمة صحيحة فيكون التنفيذ كما في ادناه‪:‬‬
‫‪60‬‬
‫وفي نهاية درس اليوم ارفق لكم احبتي بعض األمثلة المحلولة لبرامج ذات متطلبات معينة أتمنى ان تكون مفيدة لكم ومن هللا‬
‫التوفيق‪:‬‬
‫‪61‬‬
62
‫الدرس التاسع‪ :‬الدوال (‪)functions‬‬
‫الدوال او البرامج الفرعية كما تسمى في بعض لغات البرمجة هي قطع برمجية يتم انشائها من قبل المبرمج ( ‪user defined‬‬
‫‪ )functions‬او تكون موجودة في لغة البرمجة مبنية بداخلها (‪ )built in functions‬ويتم استدعائها بعد انشائها بأي‬
‫عدد من المرات وتعتبر بديالً ممتازاً لكتابة هذه االكواد والقطع البرمجية مئات المرات داخل البرنامج الواحد‪ .‬فمثالً لو احتجنا‬
‫الى استدعاء دالة المفكوك (‪ )factorial‬في برنامج لحل المعادالت المعقدة عدداً كبيراً من المرات فبدل ان نقوم بكتابة كود‬
‫المفكوك كل مرة نحتاجه فيها‪ ،‬نقوم بوضع هذا الكود داخل دالة نستدعيها كل مرة ولمتغيرات مختلفة حيث نقوم بتمرير األرقام‬
‫او المتغيرات التي نريد حساب مفكوكها كل مرة بدل كتابة كود جديد‪.‬‬
‫ولتوضيح فائدة الدوال نقوم بتنفيذ المثال التالي‪:‬‬
‫‪63‬‬
‫هنا نالحظ األمور التالية‪:‬‬
‫‪ -9‬لتعريف دالة معينة نسبق اسمها بالعبارة المفتاحية (‪ )def‬وهي مختصر كلمة (‪ )Define‬بمعني تعريف‪.‬‬
‫‪ -7‬نكتب اسم الدالة بعد ذلك متبوعة بأقواس فارغة (او تحتوي شيئا ً ما سنشرحه الحقاً) ثم (‪):‬‬
‫‪ -3‬نالحظ ان المفسر يقوم مباشرة بتزحيف (‪ )shift‬العبارات داخل جسم الدالة بمقدار ‪ 4‬فراغات (‪ )4 spaces‬ليدل‬
‫على اننا االن نكتب بداخل جسم الدالة‪.‬‬
‫‪ -4‬يمكن ان تحتوي الدالة على أي عدد من العبارات البرمجية الحسابية او المنطقية او التكرارية او الشرطية‪.‬‬
‫‪ -5‬لتعريف المفسر ان جسم الدالة قط انتهى نقوم فقط بالنزول الى سطر جديد والرجوع الى بدايته أي الغاء المسافات‬
‫التلقائية ونحن بذلك نقوم بأخبار المفسر ان جسم الدالة قد انتهى‪.‬‬
‫‪ -6‬كل ما سبق يسمى تعريف الدالة (‪ )function definition‬وهو يقول للمفسر فقط خذ بنظر االعتبار وجود هذه‬
‫الدالة وال يتم تنفيذ أي جزء منه حتى يتم استدعاء الدالة (‪ )function call or revoke‬والذي يتم بكتابة اسم‬
‫الدالة متبوعة باألقواس الفارغة او المملوءة بشيء ما (سنعرفه بعد قليل)‪.‬‬
‫‪ -2‬يتم تنفيذ ما بداخل الدالة عند استدعائها وبأي عدد من المرات داخل البرنامج وهذه هي الميزة الرئيسية والفائدة‬
‫الكبرى للدوال‪ :‬تجنب تكرار كتابة نفس الكود أكثر من مرة‪.‬‬
‫‪ -9‬يمكن كتابة أي عدد من الدوال في أي مكان من البرنامج واستدعائها عند الحاجة ألي عدد من المرات‪.‬‬
‫واالن لمزيد من األمثلة لتوضيح الفكرة‪:‬‬
‫‪64‬‬
‫وهذا المثال ايضاً‪:‬‬
‫‪65‬‬
‫هنا نرى ان االقواس لم تعد فارغة والسبب في ذلك اننا في هذه الدالة قمنا باستدعاء الدالة لتنفيذ ما بداخلها لقيمة معينة يتم‬
‫استيرادها من البرنامج الرئيسي وهي قيمة المتغير (‪ )n‬والتي تأخذ محتواها من ادخال من المستخدم وهنا يكون تسلسل‬
‫التنفيذ كاالتي‪:‬‬
‫‪ -9‬يتم تعريف دالة للمفسر اسمها (‪ )repeat‬وتحتوي متغير استدعاء (‪ )argument‬اسمه (‪.)name‬‬
‫‪ -7‬تحتوي الدالة على عبارة واحدة تتمثل في طباعة قيمة المتغير (‪.)name‬‬
‫‪ -3‬بعد ذلك نقوم بتعريف متغير اسمه (‪ )n‬وهو عبارة عن قيمة يتم إدخالها من قبل المستخدم بدالة (‪.)input‬‬
‫‪ -4‬واالن نقوم باستدعاء دالة (‪ )repeat‬للمتغير (‪ )n‬أي اننا نقول للمفسر‪ :‬خذ قيمة المتغير (‪ )n‬وضعها بدل متغير‬
‫الدالة المسمى (‪ )name‬ثم طبق ما بداخل الدالة لهذا المتغير (‪.)n‬‬
‫‪ -5‬عندها يقوم المفسر بأخذ قيمة المتغير (‪ )n‬وهي شيء يقوم المستخدم بإدخاله ويضعها بدل المتغير (‪ )name‬في‬
‫الدالة ويطبق الدالة (التي تحتوي عبارة واحدة هي طباعة قيمة المتغير ‪.)name‬‬
‫‪ -6‬بعدها يكمل البرنامج عمله بشكل طبيعي بتكرار استدعاء الدالة للمتغير (‪ )n‬نفسه‪.‬‬
‫‪66‬‬
‫ولكن ماذا يحصل لو أردنا تكرار تنفيذ الدالة لمتغيرات مختلفة؟‬
‫دعونا نرى االن‪:‬‬
‫هنا نرى ميزة أخرى وفائدة أخرى من فوائد الدوال وهي اننا قمنا باستدعاء الدالة ألكثر من متغير وبعدة أسماء وقيم وهي‬
‫(‪ )n,x,y‬وفي كل مرة يتم استدعاء الدالة فيها يتم طباعة او تنفيذ الدالة بشكل مختلف‪.‬‬
‫واالن نأتي الى توضيح أحد مميزات الدوال األخرى وهي استخدام دالة (‪ )Return‬إلرجاع قيمة من الدالة الى البرنامج‬
‫الرئيسي وكما في المثال ادناه‪:‬‬
‫‪67‬‬
‫في هذا المثال نالحظ ان التنفيذ لم يختلف عن المثال السابق بإضافة عبارة (‪ )Return‬في نهاية الدالة وذلك ألنها هنا عبارة‬
‫فارغة تقول للمفسر‪ :‬قم بإرجاع نتيجة تنفيذ الدالة الى البرنامج الرئيسي حين يتم استدعاء الدالة‪ .‬ولكن لهذه الدالة فوائد‬
‫أخرى وكما يوضحها المثال التالي‪:‬‬
‫‪68‬‬
‫والحظ الفرق في التنفيذ االن‪:‬‬
‫‪69‬‬
‫هنا تم التنفيذ بنفس الطريقة تماما ً كما في المثال السابق رغم وجود سطر إضافي للطباعة بعد عبارة (‪ )Return‬داخل الدالة‬
‫وهذه من فوائد عبارة االرجاع (‪ ) return‬حيث انها تؤشر نهاية الدالة وتخبر المفسر ان الدالة قد انتهت وان كل ما ورائها‬
‫من العبارات المزحفة (‪ )indented‬ليست ذات أهمية بل ان المفسر يهملها مباشرة‪.‬‬
‫االن بعد ان شرحنا كيفية انشاء واستدعاء الدوال المعرفة من قبل المبرمجين (‪ )user defined functions‬قد يتساءل‬
‫البعض عن ماهية الدوال المبنية بداخل اللغة (‪ )built in functions‬ولتوضيح فكرتها نقوم بالتذكير بالدوال التالية‪:‬‬
‫‪70‬‬
‫حيث تعتبر هذه الدوال هي من الدوال الجاهزة المخزونة بداخل لغة البرمجة لتحديد نوع المتغيرات والثوابت والتحويل بينها‪.‬‬
‫المزيد من األمثلة عن الدوال‪:‬‬
‫‪71‬‬
‫المثال أعاله لدالة بدون استدعاء‪.‬‬
‫هنا تم استدعاء الدالة فظهرت نتيجة تنفيذها‪.‬‬
‫واالن مثال عن كيفية توظيف الشروط بداخل الدوال‪:‬‬
‫‪72‬‬
‫مثال اخر عن العمليات الرياضية واستدعاء الدالة ألكثر من متغير في نفس الوقت‪:‬‬
‫‪73‬‬
‫‪‬‬
‫يجدر بالذكر ان بعض الدوال ال ترجع أي قيمة الى البرنامج الرئيسي وانما تستخدم للعمل بشكل مستقل عن البرنامج‬
‫الرئيسي وفي هذه الحالة تسمى تلك الدوال بالدوال غير المثمرة (‪ )unfruitful functions‬او بتعبير المبرمجين‬
‫(‪.)void functions‬‬
‫واخيراً ولمن لم يستوعب فوائد الدوال نذكر النقاط التالية‪:‬‬
‫‪ -9‬يفضل استخدام الدوال لتنظم الكود وتمييز مكوناته المتعددة‪.‬‬
‫‪ -7‬يفضل استخدام الدوال لتجنب إعادة وتكرار كتابة نفس االكواد مرات متعددة داخل البرنامج‪.‬‬
‫‪ -3‬إذا أصبح البرنامج كبيراً جداً او طويالً فيفضل تجزئته الى دوال متعددة صغيرة للسيطرة عليه أكثر وتسهيل اكتشاف‬
‫األخطاء ومعالجتها‪.‬‬
‫‪ -4‬تستخدم الدوال ايضا ً في انشاء مكتبات المستخدم (‪ )user defined libraries‬كما سنتعلم ذلك الحقا ً للكودات التي‬
‫تحتاج اليها بشكل متكرر وكذلك لتسهيل مشاركة تلك المكتبات مع المبرمجين االخرين‪.‬‬
‫‪74‬‬
‫الدرس العاشر‪ :‬الحلقات التكرارية (‪)While‬‬
‫بعد ان شرحنا اساسيات البرمجة بلغة بايثون في الدروس السابقة‪ ،‬نصل اليوم الى شرح اول أداة من أدوات الحلقات التكرارية‬
‫والتي تختص بالحلقات التكرارية الغير محددة المدى (‪ )indefinite loops‬حيث ال نعرف كم مرة سيتم تنفيذ الحلقة التكرارية‬
‫بالضبط وانما يعتمد ذلك على نوع مدخالت المستخدمين وظروف التنفيذ واالداة المستخدمة لذلك هي نفسها المستخدمة في‬
‫الكثير من لغات البرمجة األخرى مثل السي والسي بلس بلس والجافا وهي (‪ )while‬واما كيفية استخدامها فيوضحها المثال‬
‫التالي‪:‬‬
‫وهنا نالحظ اننا اعطينا قيمة أولية للمتغير (‪ )n‬ثم كتبنا العبارة (‪ )while n>0:‬والتي تقول للمفسر‪ :‬طالما ان ال(‪ )n‬أكبر‬
‫من السفر استمر في التنفيذ وكرر كل ما بداخل عبارة (‪ .)while‬وهنا وكما ذكرنا سابقا ً ال تمتاز عبارة (‪ )while‬عن بقية‬
‫البرنامج بأقواس تحدد بداية ونهاية محتوياتها وانما بالمسافات (‪ .)indents‬وبعد ان يختبر المفسر كون الشرط صحيح يقوم‬
‫بالدخول الى داخل عبارة (‪ )while‬وينفذ محتوياتها وهي هنا طباعة قيمة (‪ )n‬ثم إنقاصها واحد وتكرار اختبار الشرط وهكذا‬
‫حتى يصبح الشرط غير صحيح (حين تصبح ‪ n‬صفر) فيخرج المفسر من اللوب (الحلقة التكرارية) وينفذ ما بعده وهي عبارات‬
‫طباعة فقط‪.‬‬
‫‪75‬‬
‫لتوضيح االمر أكثر الحظ المخطط التوضيحي التالي‪:‬‬
‫وهنا قمنا بتوضيح الية التنفيذ بشكل رسومي للتوضيح أكثر‪.‬‬
‫مشاكل التعامل مع عبارة (‪:)while‬‬
‫لكيال يتم فهم العنوان هنا بشكل خاطئ‪ ،‬فأن عبارة ‪ while‬ممتازة في الكثير من الحاالت وال اشكال في استخدامها في البرمجة‬
‫ولكن بشروط‪:‬‬
‫ تحديد نهاية متوقعة للتنفيذ ومنع الحلقات الالمتناهية (‪ )infinity loops‬وكما سنرى‪.‬‬‫‪ -‬تحديد شروط أولية للعبارة تسمح بالدخول الى داخل عبارة ‪ while‬واال فاستخدامها عبثي وكما سنرى ايضاً‪.‬‬
‫‪76‬‬
‫الحلقة الالنهائية‪:‬‬
‫هنا نالحظ ان شرط ‪ while‬سيبقى صحيحا ً الى ما ال نهاية ولذا تظهر الرسالة التالية عند محاولة التنفيذ‪:‬‬
‫وهنا يخبرنا المفسر ان نهاية الحلقة التكرارية غير معرفة والمشكلة هنا اننا لم نضع عبارة تحديد نهاية اللوب مثل‬
‫(‪ )n=n-1‬او غيرها من العبارات التي تغير قيمة المتغير في الشرط‪.‬‬
‫عبارة (‪ )while‬بال فائدة‪:‬‬
‫‪77‬‬
‫هنا نالحظ ان شرط (‪ )while‬لن يتحقق ابداً ولذا فال فائدة من وجودها اصالً‪ .‬وهذه امثلة على األخطاء التي يقع فيها‬
‫المبرمجون حين التعامل مع عبارة (‪ )While‬لذا يجب الحذر‪.‬‬
‫كسر حلقة التكرار بشرط معين‪:‬‬
‫نحتاج بعض األحيان الى إيقاف الحلقة التكرارية حين يتحقق شرط معين مثل وجود رقم معين كنا نبحث عنه او ادخال‬
‫المستخدم لقيمة معينة كنا نبحث عنها وهنا نستخدم عبارة (‪ )break‬والتي تقول للمفسر‪ :‬قم بأنهاء الحلقة التكرارية واقفز‬
‫الى ما بعدها‪ .‬وكما في المثال التالي‪:‬‬
‫هنا قمنا بوضع شرط لكسر حلقة التكرار وهو ادخال قيمة ‪ 6‬وقد حصل ذلك كما في نافذة التنفيذ أعاله‪.‬‬
‫‪78‬‬
‫ترك تنفيذ الحلقة في المنتصف بشرط معين‪:‬‬
‫في بعض األحيان نحتاج الى ترك الحلقة التكرارية الحالية في المنتصف والقفز الى بداية الحلقة من جديد الستئناف التنفيذ‬
‫حين يتحقق شرط معين ونستخدم عبارة (‪ )continue‬لهذا الغرض وكما في المثال ادناه‪:‬‬
‫هنا استخدمنا نفس المثال السابق مع إضافة شرط يقول (إذا كانت قيمة االدخال تساوي ‪ jump‬فقم بالقفز الى نهاية الحلقة‬
‫التكرارية بدون اكمالها) وهذا ما حصل حيث اننا حين قمنا بإدخال عبارة ‪ jump‬قام المفسر بالقفز الى بداية حلقة جديدة‬
‫‪79‬‬
‫بدون اكمال الحلقة الحالية ويتضح ذلك برؤية انه لم يطبع عبارة ‪ jump‬أي انه أهمل االيعاز ()‪ )print (x‬بعد عبارة‬
‫‪ continue‬حين تحقق شرطها‪.‬‬
‫مثال اخر على كيفية التعامل مع (‪ )continue‬و (‪:)break‬‬
‫والشرط للقفز هنا كان ادخال عبارة اول حرف فيها (]‪ )line[0‬هو الرمز (‪ )#‬حيث ال يتم طباعته واما لكسر الحلقة فيكفي‬
‫ادخال عبارة (‪ )done‬وهكذا‪.‬‬
‫مالحظة‪ :‬كل ما شرحناه هنا عن عبارة (‪ )while‬يسمى الحلقات التكرارية غير المحددة ألنها كما رأينا ال تلتزم بشرط توقف‬
‫معروف وانما تعتمد في اغلب األحيان على ادخاالت المستخدم وظروف التنفيذ ونتائج العمليات السابقة واما ما سنشرحه ان‬
‫شاء هللا في الدرس القادم فسيكون متركزاً على الحلقات التكرارية المحددة (‪ )definite loops‬والتي يمكن برمجتها باستخدام‬
‫األداة الشهيرة في كل لغات البرمجة تقريبا ً (‪ )for‬فتابعوا معنا ‪‬‬
‫‪80‬‬
‫مثال أخير العتماد شرط التوقف على العمليات الرياضية المتكررة‪:‬‬
‫هنا كان شرط االستمرار (‪ )continue‬ان يكون ناتج الجمع ‪ 92‬وشرط كسر الحلقة التكرارية (‪ )break‬ان يكون الناتج‬
‫أكثر من ‪ 92‬واما التنفيذ الطبيعي للحلقة التكرارية كاملة فيكون لقيم ناتج الجمع أصغر من ‪.92‬‬
‫‪81‬‬
‫الدرس الحادي عشر‪ :‬الحلقات التكرارية بأستخدام (‪)for‬‬
‫بعد ان شرحنا كيفية برمجة الحلقات التكرارية الغير محددة المدى (‪ )indefinite loops‬بأستخدام عبارة (‪ )while‬في‬
‫الدرس الماضي‪ ،‬نأتي اليوم الى شرح عبارة (‪ )for‬التي تستخدم لعمل حلقات تكرارية محددة (‪ )definite loops‬وصيغتها‬
‫العامة تختلف قليالً عما كانت عليه في لغات سي وسي بلس بلس وجافا وهي كاالتي‪:‬‬
‫‪for (iterations variable) in (list of numbers, names, …etc.) :‬‬
‫‪statement‬‬
‫‪statement‬‬
‫‪the rest of the program‬‬
‫حيث يمثل (‪ )iteration variable‬متغير التكرار وهو المتغير الذي سيحدد كم مرة سيتم تكرار تنفيذ ما بداخل عبارة‬
‫(‪.)for‬‬
‫واما (‪ )list of numbers, names, …etc.‬فهو المدى او قائمة األرقام او األسماء او المتغيرات التي سيتحرك ضمنها‬
‫متغير التكرار ليأخذ قيمها كل مرة‪.‬‬
‫واخيراً (‪ )statement‬هي العبارات داخل عبارة (‪ )for‬والتي تتكرر اعتماداً على متغير التكرار ونالحظ انها مزحفة الى‬
‫اليمين بمقدار ‪ 4‬فراغات (‪ )4 spaces‬كما في كل العبارات األخرى لتحديد بداية ونهاية العبارات التابعة لل (‪.)for‬‬
‫اما (‪ )the rest of the program‬فهو تكملة البرنامج ونالحظ انه غير مزحف أي انه يبدأ من بداية السطر ليحدد انه‬
‫غير تابع لعبارة (‪.)for‬‬
‫مالحظة مهمة جداً‪ :‬يجب مراعاة عدم نسيان (‪ ):‬في نهاية كل من عبارات الشروط والتكرار فهي مهمة جداً وال ينفذ‬
‫البرنامج بدونها‪.‬‬
‫وفي ادناه مثال بسيط يوضح الفكرة‪:‬‬
‫‪82‬‬
‫وهذا ابسط مثال على كيفية استخدام عبارة (‪ )for‬حيث عرفنا متغير التكرار على ان اسمه (‪ )i‬وهو يأخذ قيمه من القائمة‬
‫التي تبدأ من ‪ 9‬وتنتهي بال ‪ 1‬واخيراً وبداخل ال(‪ )For‬قلنا للمفسر فقط اطبع لنا قيم (‪.)i‬‬
‫امثلة أخرى اكثر تفصيالً‪:‬‬
‫‪83‬‬
‫هنا كانت قيم متغير التكرار (‪ )i‬هي أسماء من قائمة أسماء وليست ارقام‪.‬‬
‫‪84‬‬
‫جدول الضرب لألعداد من ‪ 9‬الى ‪ 5‬موضحا ً في المثال أعاله‪.‬‬
‫واما لمعرفة كيفية فهم المفسر لعمل عبارة (‪ )for‬وكيفية تسلسل تنفيذ عباراتها الداخلية فالمخطط التالي يشرح ذلك‬
‫ببساطة‪:‬‬
‫‪85‬‬
‫حيث ان االمر كما هو مسمى (حلقة تكرارية) يقوم فيها المفسر بأسناد قيم الى متغير التكرار من القائمة في كل مرة احد‬
‫القيم وينفذ العبارات داخل ال (‪ )For‬ثم يعود ليسند له القيمة التالية وهكذا‪:‬‬
‫‪86‬‬
‫المثال أعاله يبين ان متغير التكرار ال يشترط ان يكون موجوداً في عبارات داخل عبارة (‪ )For‬بل انه يمكن ان يستخدم‬
‫كمتغير تكرار للمفسر فقط وليس للمستخدمين‪.‬‬
‫‪87‬‬
‫برنامج أليجاد العدد األكبر في قائمة اعداد في الصورة أعاله‪.‬‬
‫واالن نفس البرنامج مع إضافة قابلية حساب عدد مرات التكرار للحلقة التكرارية وكما في ادناه‪:‬‬
‫‪88‬‬
‫أليجاد مجموع قيم متغير التكرار يمكن االستعانة بالبرنامج التالي‪:‬‬
‫‪89‬‬
‫واالن لحساب معدل مجموعة من األرقام نالحظ المثال التالي‪:‬‬
‫‪90‬‬
‫وألستخدام كل من عبارات التكرار والشروط يمكن مالحظة المثال التالي‪:‬‬
‫‪91‬‬
92
‫الدرس الثاني عشر‪ :‬المزيد عن الحلقات التكرارية‬
‫بعد ان شرحنا العبارات المستخدمة في الحلقات التكرارية مثل (‪ )while‬و (‪ )for‬نأتي اليوم الى مناقشة مشكلة يوضحها‬
‫المثال التالي‪:‬‬
‫شرحنا في المحاضرة السابقة كيفية إيجاد العدد األكبر من ضمن سلسلة (قائمة او مصفوفة) من االعداد وكما في الصورة‬
‫التالية‪:‬‬
‫وهنا كما هو واضح اعتمدنا على إعطاء قيمة أولية للمتغير األكبر (‪ )largest_so_far‬وهي قيمة صغيرة مقدارها سالب‬
‫واحد وقد حصلنا على نتائج صحيحة ولكن ماذا لو كانت كل االعداد في القائمة سالبة واصغر من السالب واحد؟‬
‫دعونا نرى ماذا سيكون اإلخراج‪:‬‬
‫‪93‬‬
‫كما هو متوقع تماماً‪ ،‬قام المفسر بمقارنة القيمة األولية وهي سالب واحد بكل القيم األخرى التي يصدف انها كلها اصغر منه‬
‫فقام بالقول بأن اكبر قيمة في القائمة هي سالب واحد مع العلم ان القائمة ال تحتوي هذا الرقم وهو خطأ كبير يؤشر حاجتنا‬
‫الى شيء اخر لتصحيح البرنامج‪.‬‬
‫مثال اخر على نفس المشكلة‪ :‬وهو البحث عن اصغر عدد في القائمة وكما في الصورة ادناه‪:‬‬
‫نفس المشكلة‪ ،‬ألن القيمة األولية للمتغير (‪ )smallest_so_far‬اصغر من كل القيم في القائمة فقد اظهر المفسر نتيجة تقول‬
‫بأن األصغر في القائمة هو سالب واحد علما ً ان القائمة ال تحتوي هذا المتغير وهو برنامج خاطيء اخر!‬
‫اذا ما الحل لذلك؟‬
‫الجواب ببساطة‪ :‬القيمة االفتراضية (‪ .)None‬نعم انها كلمة مفتاحية محجوزة في لغة بايثون وتستخدم للتعامل مع هذا النوع‬
‫من المشاكل حيث يتم إعطاء قيمة أولية للمتغير هي (‪ )None‬ثم يقوم المتغير بأخذ قيمة اول متغير او ثابت في القائمة او‬
‫المصفوفة المراد البحث بداخلها عن األكبر او األصغر وكما في المثال التالي‪:‬‬
‫‪94‬‬
‫واالن لنشرح خطوات البرنامج‪:‬‬
‫السطر األول‪ :‬إعطاء قيمة أولية للمتغير (‪ )smallest‬مقدارها (‪.)None‬‬
‫السطر الثاني‪ :‬طباعة عبارة (‪)before‬‬
‫السطر الثالث‪ :‬عبارة ‪ for‬للبحث بداخل القائمة‬
‫السطر الرابع‪ :‬وهو مهم جداً والهدف منه اختبار شرط يتحقق مرة واحدة فقط عند بداية اللوب عندما تكون‬
‫(‪ )smallest=None‬فيقوم بأسناد قيمة المتغير األول في القائمة (الذي قيمته االن مخزونة في ‪ )value‬الى المتغير‬
‫(‪ )smallest‬في السطر الخامس ثم يبدأ بعدها بالمقارنة‪.‬‬
‫السطر السادس‪ :‬عملية المقارنة المتكررة لكل عنصر في القائمة بالمتغير (‪ )smallest‬حتى اذا تحقق الشرط ان احد عناصر‬
‫القائمة اصغر من (‪ )smallest‬فيقوم المتغير (‪ )smallest‬بأخذ قيمة ذلك العنصر كما في السطر السابع‪.‬‬
‫واخيراً السطر الثامن طباعة نتيجة كل حلقة تكرارية قبل البدء بها من جديد والسطر األخير طباعة النتيجة النهائية بعد اكمال‬
‫الحلقة التكرارية‪.‬‬
‫واالن نأخذ مثال على كيفية البحث عن عنصر معين في قائمة بأستخدام القيم المنطقية صح (‪ )True‬وخطأ (‪:)False‬‬
‫‪95‬‬
‫وهنا نالحظ ان القيمة األولية ليست رقم وال قيمة (‪ )None‬وانما القيمة المنطقية (‪ )False‬والتي تصبح (‪ )True‬حين العثور‬
‫على المتغير او القيمة المطلوبة وهكذا‪.‬‬
‫واخيراً في الصورة ادناه مثال محلول عن كيفية استخدام الحلقات التكرارية بشكل احترافي‪:‬‬
‫‪96‬‬
‫الى هنا ينتهي الجزء األول من هذه الدورة المستمرة للبرمجة بلغة بايثون والتي ستتضمن ان شاء هللا في الجزء الثاني كيفية‬
‫التعامل مع السالسل الرمزية (‪ )strings‬والملفات (‪ )files‬والقوائم (‪ )lists‬وصوالً الى البرمجة الموزعة عبر الشبكات‪.‬‬
‫هذه الدروس وغيرها الكثير تم نشرها في مدونة مصطفى صادق العلمية التي يمكن زيارتها‬
‫لالطالع على المزيد على الرابط التالي‪:‬‬
‫‪97‬‬
Téléchargement