أغسطس 11، 2009

سلسلة بايثون للمبتدئين - 02

في التدوينة السابقة قمنا بخطواتنا الأولى لتعلم بايثون، و اليوم سنرى المزيد بخصوص المتغيرات.

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

لكن ما نوع هذه العمليات؟
على سبيل المثال يمكن أن نطلب من المستخدم أن يدخل نسبه بالعجمية. لكنه عند إدخاله قد يكتبه بالأحرف الصغيرة (abcd) أو الكبيرة (ABCD)، و نحن نريد أن نعرض إسمه دائما بالأحرف الكبيرة فكيف نفعل ذلك؟
سنكتب ما يلي:
lastname = raw_input("Please enter your last name: ")
print  "Welcome back " + lastname.upper()

في السطر الأول تقوم raw_input() بعرض رسالة "Please enter your last name: " ثم تنتظر من المستخدم أن يدخل المعلومة المطلوبة. و بعد التوصل بها يتم حفض النتيجة داخل المتغيرة lastname
في السطر الثاني تقوم print بعرض رسالة تتألف من جزء ثابت و محدد هو "Welcome back " و جزء متغير متواجد داخل lastname.upper()
ملاحظتين:
1. يسمى جزء متغير لأن محتواه يتغير بحسب محتوى المتغيرة، و هذه الأخيرة محتواها يتغير حسب المعلومة التي توصلت بها (النسب في هذه الحالة)
2. لاحظ أن lastname أصبحت lastname.upper() لماذا؟. upper() هي وظيفة يمكن تطبيقها على المتغيرات النصية. سنرى الوظائف لاحقا، المهم أن هذه الوظيفة هي نوع من أنواع العمليات التي يمكن تطبيقها على المحتوى/المتغيرات النصية. العملية التي تقوم بها upper() هي تكبير حروف المتغيرة lastname و بذلك نضمن أن النسب سيظهر دائما بالأحرف الكبيرة.


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

سؤالي إدا كنا نريد الحصول على أسماء 5 أشخاص فهل يجب إستخدام 5 متغيرات؟ ماذا لو كان عدد الأشخاص 100؟ أو عدد الأشخاص غير معروف كعدد الزبائن مثلا؟
في هذه الحالة يفضل أن نستخدم القوائم (Lists)

القوائم:
القائمة هي متغيرة يمكن أن تستوعب أكثر من معلومة واحدة، و حتى يمكن الوصول إلى أية معلومة من تلك المعلومات المخزنة يتم إستخدام الرتبة. تبدوا صعبة و لكن بعد التوضيح و التطبيق ستبدو على العكس تماما :)

قم بتحرير ما يلي:
countries = []
ثم
countries = ["Algeria", "Palestine", "UK", "France"]
ثم
countries.append("China")
ثم
countries.append("Germany")
ثم
print countries[1]
ثم
print countries[0]
ثم
print countries[-1]
ثم
print countries[2:4]
ثم
print countries
الشرح:
أولا نقوم بتحديد متغيرة بإسم countries و محتواها سيكون على شكل قائمة. المعقوفات [] تستخدم لتعبير على أن المتغيرة هي قائمة فارغة (لا تحتوي على شيء بعد)
ثانيا، المتغيرة countries ستعبر عن قائمة تتكون من 4 عناصر، كل عنصر منهم هو محتوى نصي لأنه داخل "" و يتم التمييز بينهم بإستخدام الفاصلة ,
ثالثا، بما أن المتغيرة countries تعبر عن قائمة (list) فيمكن إستخدام الوظائف التي تستخدم على القوائم تماما كما رأينا في حالة المتغيرات العادية. الوظيفة التي سنستخدمها هي append() و ستقوم بإضافة المعلومة النصية بين قوسين ("China") إلى القائمة countries ثم نكرر نفس الشيء بالنسبة ل "Germany"

بعد ذلك نبدأ بعرض محتوى القائمة:
أولا، print countries[1] تقوم بعرض المعلومة صاحبة الرتبة الثانية. نعم الثانية و ليست الأولى، لماذا؟ لأن أول عنصر في القوائم يعبر عليه بالرتبة صفر 0 و ليس 1، و بالتالي فإن العنصر 1 يعبر عن الرتبة 2

ثانيا print countries[-1] العنصر -1 هو العنصر الأخير، لماذا؟ لأن القوائم قد تختلف عن بعضها البعض من حيث عدد العناصر التي قد تعبر عنها. فإذا كان عدد العناصر مختلف كبف يمكن عرض آخر عنصر في كل قائمة؟ نستخدم [-1] لتعبير عليه.

ملاحظة: الطريقة الأخرى لعرض آخر عنصر هي print countries[len(countries)-1] في هذه الحالة ما نقوم به هو أننا نطلب حساب عدد العناصر الموجودة داخل القائمة ثم ننقص منه -1 حتى نستطيع التعبير عن آخر عنصر. لماذا نقوم بالنقص -1 لأنه إذا كانت القائمة تضم 6 عناصر مثلا و العنصر الأول يعبر عنه بـ 0 فإن آخر عنصر في القائمة سيكون 5 و ليس 6. لما كل هذا و الطريقة الأولى أبسط :)

ثالثا، print countries[2:4] تقوم بعرض كل عناصر القائمة بدءا من العنصر الثاني و حتى العنصر ما قبل الرابع.
و حتى يتضح الأمر أكثر فإن:
"Algeria" هو العنصر 0 و رتبته عندنا نحن هي 1
"Palestine" هو العنصر 1 و رتبته عندنا نحن هي 2
"UK" هو العنصر 2 و رتبته عندنا نحن هي 3
"France" هو العنصر 3 و رتبته عندنا نحن هي 4
"China" هو العنصر 4 و رتبته عندنا نحن هي 5
"Germany" هو العنصر -1 أو 5 و رتبته عندنا نحن هي 6

رابعا، print countries تقوم بعرض محتوى القائمة بأكمله


الآن ماذا لو أردنا حذف العنصر 0 من القائمة؟
نستخدم الأمر del و هو من الكلمات المفتحية/المحجوزة. سيكتب الأمر بهذه الطريقة:
del countries[0]

و هنا نقوم بحذف العنصر 0 الذي يحتوي المعلومات التي أردنا حذفها و هذا يتطلب منا معرفة مسبقة بمكانها، لكن ماذا لو أردنا حذف المعلومة أينما وجدة دون معرفة مسبقة بمكانا؟ في هذه الحالة نستخدم وظيفة remove() و ستكتب كما يلي:
countries.remove("China")
بحيث نطلب حذف أول عنصر من القائمة يحتوي على تلك المعلومة. لاحظ معي جيدا أول عنصر و ليس كل العناصر.

قد يظهر أن القوائم صعبة التعلم، لا تستسلم و تتوقف هنا. سبق و أن تطرقت إلى القوائم عند حلي لمشاكل المشروع Euler و يمكنك مراجعة الشرح هناك، كما سأتطرق إليها في تدوينات لاحقة. و لا تنسوا الإطلاع على كتاب بايثون للصديق أحمد يوسف، ستجدون فيه كل التفاصيل و التوضيحات اللازمة للتمكن من القوائم.

ليست هناك تعليقات:

إرسال تعليق