دروس بايثون

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

مقدمة و تعريف بلغة البايثون.

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

نشأت البايثون في مركز CWI (مركز العلوم والحاسب الآلي) بأمستردام على يد جويدو فان رزوم “Guido van Rossum” في أواخر الثمانينات من القرن المنصرم، و كان أول إعلان عنها في عام 1991. تم كتابة نواة اللغة بلغة C. أطلق فان رزوم إسم “بايثون” على لغته تعبيرا عن إعجابه بفرقة مسرحية هزلية شهيرة من بريطانيا كانت تطلق على نفسها إسم مونتي بايثون “Monty Python‏”.

تتميز البايثون بمجتمعها النشط، كما أن لها الكثير من المكتبات البرمجية ذات الأغراض الخاصة والتي برمجها أشخاص من مجتمع هذه اللغة، مثلاً مكتبة PyGame التي توفر مجموعه من الوظائف من أجل برمجة الألعاب. و يمكن لبايثون التعامل مع العديد من أنواع قواعد البيانات مثل MySQL و غيرها.

من يستخدم البايثون ؟

إذا قمنا بالبحث قليلا عن المواقع و البرامج و الألعاب التي تم برمجتها و تطويرها بهذه اللغة فسوف نجد كم هائل و منها محرك البحث الشهير قوقل “Google” فلقد تم إنشائه بهذه اللغة و لا يزال يتم تطويره بهذه اللغة حتى يومنا هذا, و هناك أيضا موقع الفيديوهات الشهير اليوتوب “YouTube” فهو أيضا يستخدم هذه اللغة و لا ننسى موقع الياهو “Yahoo” أيضا, و الكثير من المواقع الأخرى.. أما بالنسبة للبرامج فهناك البرنامج العملاق في تصميم الألعاب و الأفلام 3D و هو “Blender” فهو أيضا تم برمجته بهذه اللغة, و لرؤية المزيد من المواقع و البرامج و الألعاب على موسوعة ويكيبيديا الرابط:

http://en.wikipedia.org/wik...

كيف يمكنني البدء

طبعا لغة البايثون ليست مختلفة عن جميع اللغات الأخرى في طريقة العمل بها فهي كأي لغة برمجة أخرى فإذا كنت تستخدم نظام الويندوز أو نظام الماك فسوف تحتاج إلى مفسر لكي تستطيع إستخدام هذه اللغة و متابعة هذه الدورة و يمكنك معرفة المزيد و تحميله من الموقع الرسمي لبايثون الرابط:

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

كتابة أول برنامج خاص بك

لمستخدمين الويندوز و الماك بعد تنصيب و تهيئة كل شيء على النظام إفتح المفسر و من ثم أكتب فيه :

print "Hello world!"

و عند كتابة الشيفرة السابقة إضغط على زر الإدخال “Enter” و سوف يقوم المفسر بقرأة الشيفرة و تفسيرها و من ثم يعرض النتائج على نفس النافذة.

لمستخدمين اللينكس أولا قم بفتح أي محرر نصوص و أظن أفضلها محرر GEdit و إذا تستخدم توزيعة أبونتو “Ubuntu” فهو المحرر الإفتراضي لهذه التوزيعة و لا يحتاج إلى تنصيب و بالمناسبة هناك نسخة خاصة بالويندوز و الماك و سوف تجدها بالصفحة الخاصة به, و من ثم أكتب الشيفرة الماضية و إحفظ الملف بنوع .py و هذا مهم جدا أما بالنسبة للإسم فيمكنك تسميته كما تريد و لكن في الوقت الحالي من الأفضل أن تسميه “hello” يعني يصبح الإسم كاملا “hello.py” و أيضا من المستحسن أن تحفظه في المجلد الرئيسي “Home”, و بعد الحفظ قم بفتح الطرفية “Terminal” و أكتب :

python hello.py

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

و تهانيا لقد كتبت أول برنامج لك بواسطة لغة البايثون !

لغة البايثون: الدرس الثاني

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

أولا ماهي المتغيرات ؟

ببساطة المتغيرات هي عبارة عن أسماء و حروف و أرقام تختارها أنت و تكون تحتوي على قيمة و لا يهم نوعها سوى كانت قيمة نصية (تحتوي على كلمة أو جملة) أو رقمية (تحتوي على أرقام).. و تسمح المتغيرات للمبرمجين بحجز مكان في ذاكرة الحاسوب و هذا لكي يتم تخزين القيم التي ذكرتها منذ قليل حيث أنها لا تأخد الكثير من الذاكرة بل بعض البيتات فقط, و المميز في لغة البايثون هو أنها لا تحتاج إلى تحديد نوع المتغيرات بل كل ما عليك فعله هو كتابة إسم للمتغير و من ثم إدخال قيمة فيه و سوف يتم كشفه تلقائيا! إذا كان متغير نصي أو رقمي أو إذا كان يحتوي على مصفوفة و إلخ…

و ما هي الثوابت ؟

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

أمثلة عن المتغيرات

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

var = 100

و لو تقوم بكتابة الأرقام على الشكل التالي فسوف يكون المتغير نصي لأنه بين علامات التنصيص :

var = "100"

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

و أترككم مع هذه الأمثلة

hello = "Hello world!" #إدخال قيمة نصية
 print hello #hello طباعة المتغير

النتيجة: Hello world!

a = 120 #a إدخال قيمة رقمية في المتغير
 print a #a طباعة المتغير

النتيجة: 120

x = 5 #x إدخال قيمة رقمية في المتغير
 y = 5 #y إدخال قيمة رقمية في المتغير
 print x+y #y و x طباعة نتيجة جمع المتغير

النتيجة: 10

a = 10 #a إدخال قيمة رقمية في المتغير
 x = 5 #x إدخال قيمة رقمية في المتغير
 y = 5 #y إدخال قيمة رقمية في المتغير
 print a+x*y #y و من ثم ضربه في المتغير x بالمتغير a طباعة نتيجة جمع المتغير

النتيجة: 35

لغة البايثون: الدرس الثالث

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

طبعا كلنا نعلم أن أي لغة برمجة تحتوي على خاصية عرض و التحكم في النصوص و أنا أتكلم عن تطبيقات Console و التي لا تحتوي على واجهة رسومية يعني لا تحتوي على أزرار و ألوان و أيقونات و إلخ.. حيث أن الطريقة الوحيدة لجعل هذه التطبيقات يعمل بها المستخدم هي إظهار و إدخال النصوص مثل Dos الخاصة بنظام الويندوز أو Terminal الخاصة باللينكس و غيرها من أنظمة أخرى, و طبعا بالنسبة للتطبيقات الأخرى (ذات الواجهة الرسومية) سوف نتكلم عنها في دروس قادمة بإذن الله لأنها صعبة نوعا ما و أحتاج إلى وضع دروس أخرى لكي يتم فهم الدروس المتقدمة لذلك كل شيء في وقته.

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

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

print "Hello world" #طباعة نص
 var = 'Hello' #إدخال قيمة في المتغير
 print var #طباعة متغير
 print 12511 #طباعة رقم

النتيجة:

Hello world

Hello

12511

لقد قمت بكتابة الكلمة و من ثم مساحة لأنها مهمة جدا و تذكر دائما عندما تكتب هذه الكلمة يجب عمل مساحة بينها و بين النص أو الرقم أو المتغير.. و بعدها النص الذي أريد إظهاره بين علامات التنصيص و لاحظ أنه يمكنك إستعمال أكثر من علامة تنصيص فهناك هذه “ و هناك هذه ‘ و كلاهما يقوم بنفس العمل.

الآن بعد ما عرفت كيف تقوم بإظهار النصوص و الأرقام و المتغيرات.. ألا تريد أن تعرف كيف تنسقها و تتحكم بها ؟ إذا كان الجواب نعم فتابع المثال التالي

print "Hello\nworld"

النتيجة:

Hello

world

أممم, أظن أنك لاحظت شيء جديد صح ؟ و هو رمز “\n” يا ترى ماذا يفعل هذا الرمز ؟ ببساطة عمله هو إنشاء سطر جديد في نافذة التطبيق يعني إذا كنت تريد كتابة نص كبير بعض الشيء أو تريد أن تنزل إلى سطر آخر إستخدم هذا الرمز مثل لغة ++C/C أو PHP تماما, و لكن يا ترى إذا كنا نريد أن نعرف كم هناك حرف أو كلمة أو رقم في نص معين بدل ما نقوم بعملها يدويا يعني مثلا كلمة “Hello” فيها خمسة حروف و لكن إذا نريد أن نعمل هذا بلغة البايثون كيف نفعل ذلك ؟ بسيطة جدا أنظر المثال التالي

print len("Hello")

النتيجة: 5

أظن واضحة و هي كلمة len حيث تقوم هذه الكلمة بحساب عدد الحروف في النص بالإضافة إلى المساحات أيضا و لكي تستخدمها أكتب إسمها أولا و من ثم إفتح قوس و أكتب النص أو المتغير الذي تريده و من ثم إغلق القوس.. و لكن إذا كنا نريد حساب حروف معينة فقط كيف نفعل ذلك ؟ يعني مثلا كلمة “Hello” هناك فيها إثنين “L” كيف نفعل ذلك برمجيا في لغة البايثون ؟ أيضا بسيطة جدا أنظر المثال التالي

 var = "Hello"
 print var.count("l")

النتيجة: 2

و كما هو واضح في المثال الماضي و هي الكلمة count حيث تقوم بحساب عدد الحروف التي يحددها المبرمج و لإستخدامها يجب عليك أولا إنشاء متغير جديد و يحتوي على النص المراد حساب حروفه و من ثم نكتب إسم المتغير و بعدها نقطة و من ثم إسم الكلمة و هو count و بعد ذلك نفتح قوس جديد و نكتب الحرف المراد حسابه في النص بين علامات التنصيص طبعا و أخيرا و ليس آخرا نغلق القوس, طيب الآن ماذا لو نريد أن نبحث أو نستبدل كلمة في النص يعني مثلا مثل في المفكرة الخاصة بالويندوز أو محررات النصوص بشكل عام كيف نفعل ذلك في البايثون ؟ كل ما عليك فعله هو إستبدال كلمة count الماضية بكلمة find أو replace ! أظن لا يوجد أسهل من هذه الكلمات ؟ أنظر المثال التالي

var = "saif blog is the best!"
print var.find("is")

النتيجة: 10

var = "saif blog is the best!"
print var.replace('blog', 'website')

النتيجة: saif website is the best!

في المثال السابق يوجد الكلمة find و الكلمة replace بالنسبة للأولى فهي لا تحتاج إلى تفسير يعني مثل الكلمة count تماما و لكن فقط هي تقوم بالبحث عن الكلمات و الحروف و الأرقام أو أي شيء آخر في النص و من ثم تعطي النتيجة و النتيجة سوف تكون إما سلبية أو إجابية فمثلا لو بحثت عن كلمة و تم إيجادها فسوف تعطيك رقم إيجابي يعني من 0 إلى إلخ.. و هذا الرقم سوف يكون مكانها في النص أما إذا لم يتم إيجاد الكلمة فسوف يكون الرقم سلبي مثل -1 و لاحظ جيدا علامة - و هذا يعني عدد سلبي, و بالنسبة لكلمة replace فهي تحتوي على قيمتين و القيمة الأولى هي الكلمة أو الحرف أو الرقم.. المراد البحث عنه و إستبدالها أما القيمة الثانية فهي الكلمة التي سوف توضع مكان الكلمة الأولى.

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

var = "saif, blog, python"
print var.split(', ')

النتيجة: ['saif', 'blog', 'python']

نعم, يتم ذلك بإستعمال كلمة split و بنفس طريقة كلمة count أو find السابقة حيث تكتب إسم الكلمة بعد إسم المتغير و من ثم العلامة أو الرمز أو الحرف المراد إستعماله للتقسيم بين قوسين, و سوف تعطيك النتيجة على شكل مصفوفة و إن شاء الله سوف نشرح ما هي المصفوفات و كل شيء في دروس قادمة لذلك لا داعي للقلق :wink: و طبعا إذا أردنا أن نستخرج الكلمات من النص فسوف تكون الشيفرة على الشكل التالي

var = "saif, blog, python"
var = var.split(', ')
 for i in range(0, len(var)):
     print var[i]

النتيجة:

saif

blog

python

و أنا لن أفسد بعض الأشياء في الشيفرة الماضية لأني أحضر لها دروس في الأيام القادمة بإذن الله و لكن أظن الذي تريد معرفته اليوم واضح جيدا :) , و الآن نأتي إلى التحكم بالحروف و الكلمات فمثلا لو نريد أن نجعلها كبيرة يعني مثلا هكذا “HELLO” و هي في الحقيقة عكس ذلك كيف نفعل هذا بلغة البايثون ؟ أنظر المثال التالي

var = "olá mundo"
print var.upper()

النتيجة: OLA MUNDO

و هي الكلمة upper و هي لا تحتاج إلى قيمة بل فقط أكتب إسمها و جنبه القوسين و إنتهى 8) و بالمناسبة لقد إستعملت اللغة البرتغالية في الشيفرة الماضية لكي أغير قليلا :P .. و لكن لو نريد فعل العكس يعني من كلمات و حروف كبيرة إلى كلمات و حروف صغيرة كيف نفعل ذلك ؟ أنظر المثال التالي

var = "SAIF BLOG"
print var.lower()

النتيجة: saif blog

نعم.. الكلمة lower و هي تستعمل مثل الكلمة الماضية تماما و لكن فقط عملها مختلف, و أخيرا و ليس آخرا و لكي نجعل النص منسق و أفضل بكثير تلقائيا و بدون تدخل المبرمج يعني مثلا لو لدينا جملة مثل “hello world” و نريد أن نجعلها هكذا “Hello World” و لاحظ أن أول الحرف من كل كلمة كبير.. كيف نفعل ذلك ؟ أنظر المثال التالي

var = "hello world"
print var.title()

النتيجة: Hello World

و بهذا أكون قد ذكرت أغلب الكلمات و الدوال التي سوف تحتاجها في المستقبل و التي سوف تختصر عليك الكثير من الجهد و العمل فمثلا لو نريد عمل كل هذا في لغة أخرى مثل ++C/C فسوف نضطر إلى عمل كلاس أو دالة تحتوي على مئات الأسطر و هذا يظهر سهولة لغة البايثون و قوتها و سهولة التعامل معها.

لغة البايثون: الدرس الرابع

الدرس الرابع سوف يكون بسيط و سهل الفهم و لكن لا ننسى أنه مهم جدا و إذا ركزت جيدا إن شاء الله سوف يتضح لك كل شيء و هو عن كيفية قرأة إدخالات المستخدم ! و للتوضيح أكثر تابع معي.

إذا كنت مثلا تنوي برمجة تطبيق بسيط يقوم بإظهار كلمة أو رسالة يتم كتابتها من طرف المستخدم يعني ليس أنت بل المستخدم يقوم بكتابة شيء و عند الضغط على زر الإدخال (Enter) يقوم التطبيق بإظهار هذه الرسالة كيف تفعل ذلك ؟ أظن لو أنك تابعت الدروس الماضية سوف تقول أنه يمكنني أن أظهر الرسائل و هو أمر بسيط جدا و يتم ذلك عن طريق كلمة “print” و لكن لا أعرف كيف أظهر ما يكتبه المستخدم ؟ و هنا تأتي أهمية درس اليوم حيث سوف أشرح كيف يتم عمل ذلك بكل سهولة, أولا سنجرب عمل متغير جديد و ندخل فيه قيمة معينة و لنفرض أن هذه القيمة هي نصية و تحديدا هي “Hello world”.. حتى الآن كل شيء واضح و من ثم نقوم بإظهار قيمة هذا المتغير بكلمة “print” و لنرى ماذا يحدث ؟!

var = "Hello world"
print var

النتيجة: Hello world

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

var = raw_input("Enter something: ")
print var

النتيجة:

Enter something: Hello

Hello

هل لاحظت شيء جديد ؟ أكيد و هي كلمة raw_input و هي عبارة عن كلمة تقوم بعرض نص يحدده المبرمج و من ثم ترجع له قيمة معينة فمثلا لو تريد أن تطلب من المستخدم أن يكتب شيء ما مثل ما نريد نحن الآن فعله فقم بإستعمال هذه الكلمة و لكن هناك شيء مهم جدا يجب أن تعرفه و هو هناك نوعان من هذه الكلمة فهناك الأولى و التي شرحتها الآن و هناك كلمة “input” يعني بدون كلمة “raw”, و الفرق بينهما هو أن الأولى نصية و الثانية رقمية فمثلا لو تريد جمع أعداد يختارها المستخدم كيف تفعل ذلك ؟ لاحظ هذه الشيفرة

a = input("Number one: ")
b = input("Number two: ")
print "Result: ", a+b

النتيجة:

Number one: 1

Number two: 1

Result: 2

و لكن لو نستبدل كلمة input بكلمة raw_input ماذا يحصل ؟ لو تجرب ذلك سوف يقوم المفسر بكتابة الأرقام جنب بعضها يعني مثلا لو جمعت رقم 5 برقم 8 فسوف تكون النتيجة 58 أما إذا غيرت رمز الجمع + إلى رمز آخر مثل الطرح - فسوف يكون هناك أخطاء برمجية, و بهذه الكلمات يمكنك معرفة كل ما يريده المستخدم من التطبيق :) يعني بإختصار مثل Dos الخاصة بالويندوز أو مثل Terminal الخاصة بنظام اللينكس و الماك.. فعند كتابة أمر يتم قرأة و تنفيذ ذلك الأمر.

لغة البايثون: الدرس الخامس

الدرس الخامس هو مهم جدا و يعنبر درس أساسي يعني يجب أن تقرأه جيدا و تفهمه و إذا لم تفعل ذلك فلا تتوقع أن تتعلم البرمجة بشكل عام لأن درس اليوم يتكلم عن جملة الشرط “if” و هي توجد في جميع اللغات الأخرى حتى في لغات الويب و لا توجد أي لغة برمجة إلا و هي تحتوي على هذه الجملة لأنها ببساطة لها دور أساسي في البرمجة و من دونها سوف يكون هناك مشاكل كثيرة و إن شاء الله سنعرف مميزات و أهمية هذه الجملة.

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

cmd = raw_input('Enter your command: ')
print "Hello world!"

أظن المثال السابق واضح جيدا بالنسبة لك إذا كنت قد تابعت الدروس الماضية صح ؟ و هو يقوم بإخبار المستخدم بكتابة أمر ما و عند كتابة هذا الأمر يتم الضغط على زر الإدخال “Enter” و من ثم تقوم البايثون بعرض جملة “Hello world!” و لكن ألم تلاحظ أن البايثون لا تهتم بالأمر الذي كتبه المستخدم ؟ يعني في كل الحالات تقوم بإظهار الجملة الماضية و لا تفرق بين الأوامر التي يكتبها المستخدم !, و الآن لنجرب إضافة جملة شرط و نلاحظ النتيجة

cmd = raw_input('Enter your command: ')
if cmd == "print":
    print "Hello world!"
else:
    print "Unknown command ?"

أممم.. أظن الآن أصبحت البايثون تفرق بين الأوامر فلو تجرب كتابة كلمة “print” فسوف تقوم بإظهار لك الجملة الماضية أما إذا كتبت كلمة أخرى فسوف تخبرك بأن الأمر الذي قمت بإدخاله غير معروف و هذا الذي أحاول أن أوضحه حيث جملة الشرط “if” تقوم بالشرط على البايثون و لو تلاحظ في الشيفرة الماضية ستجد أننا قمنا بعمل متغير جديد بإسم cmd و جعلنا قيمته عبارة عن إدخالات و من ثم في السطر الثاني عملنا جملة شرط بكتابة كلمة if و الشرط هو إذا كان المتغير السابق و الذي إسمه cmd يحتوي على القيمة “print” فإذا أنزل إلى السطر التالي و قم بإظهار جملة “Hello world!” أو إذا كان يحتوي على شيء آخر فإذهب إلى السطر الخامس و الأخير و قم بتنفيذه, أظن الشيفرة بدءت تتضح الآن ؟ و يجب أن تعرف بأن جملة الشرط تحتوي على أكثر من كلمة و هي :

  • if : و هي التي دائما تبدأ بها إذا كنت تريد عمل جملة شرط جديدة.
  • else : و هي تستعمل في حالة إذا لم يتحقق الشرط و يمكنك التخلي عنها إذا كنت لا تريد عمل شيء عند عدم تحقق الشرط فهي كلمة إختيارية.
  • elif : و هي لعمل أكثر من شرط و لكن تذكر أنك لا تستطيع أن تبدأ بها فهي تتبع دائما الكلمة if و بالإضافة إلى أنها أيضا كلمة إختيارية مثل السابقة.
  • or : و هي كلمة إختيارية أيضا و يمكنك إستعمالها إذا كنت تريد أن تضع أكثر من خيار أو إحتمال واحد.
  • and : و أظن من الإسم واضح عملها فهي تسمح للمبرمج بوضع أكثر من إحتمال و يجب أن يكون مطابق تماما للشرط و هي كلمة إختيارية أيضا.

كما يمكنك إستعمال الرموز مثل أصغر من < أو أكبر من > و غيرها.. و لكن تذكر أنه عندما تستعمل علامة المساواة يجب أن تكررها مثل في المثال السابق لأن في جمل الشرط يجب أن يكون هناك إثنان من = جنب بعضهما البعض.

أمثلة :

cmd = raw_input('Enter your command: ')
if cmd == "print":
    print "Hello world!"



cmd = raw_input('Enter your command: ')
if cmd == "print" or cmd == "show":
    print "Hello world!"
else:
    print "Unknown command ?"



cmd_1 = raw_input('Enter your command 1: ')
cmd_2 = raw_input('Enter your command 2: ')
if cmd_1 == "print" and cmd_2 == "show":
    print "Hello world!"
else:
    print "Unknown command ?"



cmd = raw_input('Enter your command: ')
if cmd == "print":
    print "command: Print"
elif cmd == "show":
    print "command: Show"
else:
    print "Unknown command ?"



num = input("Please enter a number: ")
if num > 10:
    print "Your number is bigger than 10!"
elif num < 10:
    print "Your number is smaller than 10!"
else:
    print "Please enter a number first!"

لغة البايثون: الدرس السادس

سنتكلم عن الحلقات التكرارية أو كما تدعى باللغة الإنجليزية “Loop” و أنا وصفتها بالمهمة لأن هذه الميزة توجد في جميع اللغات الأخرى بدون إستثناء حتى في لغات الويب و من دونها سوف يكون هناك مشاكل حقيقية في لغات البرمجة لأنها تلعب دور أساسي في البرمجة فمثلا لو نريد تنفيذ عمل واحد أكثر من مرة أو نريد التحقق من شيء ما بدون توقف حتى يتحقق ذلك الشيء أو نريد نشرط على لغة البرمجة شيء و عند عدم تحقق هذا الشرط نفعل شيء بدون توقف و إذا تحقق هذا الشرط نوقف العمل و غيرها من أشياء أخرى.. كيف نفعل ذلك ؟

أولا دعونا نبدأ بمثال بسيط و واضح كالعادة و هذا هو :

print "Hello world"
print "Hello world"
print "Hello world"
print "Hello world"
print "Hello world"

أممم.. أظن أنك لو متابع لهذه الدورة جيدا سوف تفهم الشيفرة الماضية ماذا تفعل و هي تقوم بطباعة جملة “Hello world” خمس مرات و لكن إذا كنت تريد مثلا طباعة هذه الجملة مئة مرة ! كيف تفعل ذلك ؟ أظن أنك سوف تحاول كتابة الشيفرة الماضية سطر سطر مئة مرة صح ؟ إذا كنت تفكر في ذلك فإعلم أنها سوف تأخذ منك وقت طويل جدا و يمكن لهذا الوقت تستغله في برمجة أشياء أخرى في تطبيقك و بالإضافة إلى أنها سوف تجعل التطبيق ثقيل العمل و كبير الحجم ! إذا ما هو الحل ؟ لاحظ الشيفرة التالية و تعجب :wink:

for i in range(1, 101):
    print "Hello world"

نعم صدق أو لا.. يمكنك طباعة مئة جملة بواسطة سطرين :) و إذا أردت المزيد يمكنك ذلك حتى إذا كان العدد مليون أو أكثر ! و هنا تتضح أهمية حلقات التكرار فلقد سهلت علينا الكثير من الأمور و منها المشكلة السابقة, و الآن لنشرح الشيفرة الماضية :

أولا بدأنا بكلمة for و هي أحد كلمات حلقات التكرار و هناك أكثر من كلمة و هما for و while و سوف أشرح الكلمة الثانية في ما بعد و تذكر أن هذه الكلمات موجودة في جميع لغات البرمجة حتى لغات الويب لأنها كما قلت منذ قليل مهمة جدا في البرمجة, و بعدها هناك حرف i و هو المتغير الذي سوف تقوم عملية التكرار تخزين فيه عدد عمليات التكرار التي قامت بها الحلقة لأن في كل مرة تنتهي من فعل شيء تقوم بإضافة رقم واحد إلى الرقم القديم فمثلا إذا المتغير يحتوي على الرقم 5 فسوف تضيف له رقم واحد و يصبح 6 و هكذا حتى تصل إلى الرقم النهائي و الذي أنت تحدده في كلمة range حيث تكتب هذه الكلمة و من ثم تفتح قوسين و تكتب بينهما من أين تبدأ الحلقة و أين تنتهي مثل ما في الشيفرة الماضية و من ثم تكتب النقاط : لكي تقوم البايثون بكشف شيفرة الحلقة و التي هي عبارة عن كلمة print و القيمة التي سوف تطبعها على الشاشة, و بالنسبة لكلمة in فهي تساعد البايثون على كشف العدد الذي سوف يكون الحد الأقصى للحلقة.

و للتوضيح أكثر جرب إضافة المتغير i إلى جنب القيمة النصية مثل ما في الشيفرة التالية :

for i in range(1, 101):
    print "Hello world", i

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

li = ["Hello", 1, 52, "Hi"]
for i in li:
    print i

و هكذا.. و إن شاء الله في المستقبل سوف تفهم أكثر ماذا أعني و كيفية التعامل مع حلقات التكرار.

نرجع لحلقة التكرار while و أظن أنها سوف تكون أسهل من الأولى و لكنها تحتاج تركيز فقط :idea: و تعتمد هذه الكلمة على الشرط فمثلا أنت تريد أن تشرط على البايثون شيء ما و إذا لم يتحقق هذا الشرط تفعل شيء مرارا و تكرارا حتى يتحقق هذا الشرط و من ثم تتوقف و هذا هو عمل كلمة while حيث أنها تعتمد على الشرط يعني مثل جملة الشرط if و لكنها تحتوي على حلقة تكرار ! أنظر إلى المثال التالي :

i = 0
while i < 10:
    print "Hello world"

الآن لو تجرب الشيفرة الماضية سوف تقوم البايثون بإعادة طباعة الجملة في كل مرة بدون توقف و لكن يا ترى لماذا ؟ ببساطة لأن حلقة التكرار تقارن قيمة المتغير i بالرقم 10 و إذا كان أصغر منه تقوم بطباعة الجملة و هكذا.. و لكن كيف نجعلها تتوقف يعني نعطيها عدد تتوقف عنده ؟ أولا لنرجع قليلا لحلقة التكرار for و نرى كيفية عملها و أنا ذكرت منذ قليل أن هذه الحلقة تقوم بتخزين عدد عمليات التكرار و تضيف عدد في كل مرة تقوم فيها بعملية تكرار و هذا صحيح و لكن بشكل خفي أما حلقة while فهي عبارة عن جملة شرط عادية و لكن تحتوي على حلقة تكرار مثل ما ذكرت منذ قليل و لجعلها تحتوي على الميزة التي تحتوي عليها حلقة for يجب أن نخزن عدد مرات التكرار و نقارنها بالعدد الذي سوف تتوقف عنده, و الشيفرة سوف تكون على الشكل التالي :

i = 0
while i < 10:
    print "Hello world"
    i += 1

نعم, كما هو واضح لقد أضفت علامة زائد (+) قبل علامة المساواة (=) و هذا لكي يتم إضافة رقم واحد في كل عملية تكرار و بالمناسبة يجب أن تعرف أن في أغلب لغات البرمجة و منها البايثون أيضا هناك إختصار فمثلا بدل ما تكتب هذه الشيفرة :

i = i + 1

يمكنك كتابة هذه الشيفرة :

i += 1

و مع تغيير علامة الزائد (+) يعني لو مثلا تريد إنقاص عدد أكتب (-), و بهذا أكون قد شرحت كل ما أتذكره الآن عن حلقات التكرار الخاصة بالبايثون.

لغة البايثون: الدرس السابع

الآن سوف أشرح ما هي المصفوفات أو كما تدعى باللغة الإنجليزية في البرمجة “Array” أو “Matrix” و أظن أنك تعرف جيدا الكلمة الثانية لأنها عنوان فلم مشهور جدا 8) .. و المصفوفة هي عبارة عن متغير يحتوي على أكثر من قيمة واحدة و لو تلاحظ جيدا في الدروس الماضية و خصوصا في الدرس السادس و الماضي سوف تجد بعض الشيفرات التي تحتوي على مصفوفة و لكني لم أشرحها لأنها تحتاج درس كامل و اليوم سوف أفعل ذلك إن شاء الله.

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

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

array = ["Hello", 122, "Saif", 552]

نعم.. سهلة جدا :) حيث أنك تختر إسم للمصفوفة و من ثم تضع جنبها علامة المساواة (=) كما في المتغيرات تماما و لكن في المصفوفات يجب عليك وضع جميع القيم بين [] و تفصل كل قيمة بفاصلة.

طيب الآن نعرف كيف نقوم بإنشاء المصفوفات و لكن يا ترى كيف نتعامل معها و نستدعي القيم التي تحتوي عليها ؟ ببساطة عندما تقوم أنت بإنشاء مصفوفة جديدة تقوم البايثون بإعطاء كل قيمة من القيم التي تحتوي عليها هذه المصفوفة رقم و يكون هذا الرقم هو رقم ترتيبها في المصفوفة و دائما الترتيب يكون من الصفر لذلك مثلا لو المصوفة تحتوي على ثلاثة قيم فالقيمة الأولى هي 0 و القيمة الثانية هي 1 و الثالثة هي 2 و بهذا تستطيع تعرف كل أرقام القيم و مكانها و عندما تريد معرفة أحد محتوى القيم كل ما عليك فعله هو كتابة إسم المصفوفة و وضع رقم القيمة بين [] جنب إسم المصفوفة, أنظر المثال التالي :

array = ["Hello", 122, "Saif", 552]
print array[2]

النتيجة :

Saif

فقط ! الآن تستطيع أن تقول أنك تعرف كيف تتعامل مع المصفوفات في البايثون :D , طيب الآن لدي تطبيق لمتابعين هذه الدورة :idea: و هذا لكي تعرف إذا كنت حقا قد إستفدت من الدروس الماضية أو لا

أريد منك أن تصنع برنامج بسيط يحتوي على مصفوفة و يقوم بطباعة جميع قيمها تلقائيا يعني أولا يقوم بكشف كم قيمة تحتوي عليها هذه المصفوفة و من ثم يطبع محتوى جميع القيم :dizzy: