الدرس الثاني – تعلم البرمجة للمبتدئين – PYTHON

في هذا الدرس سنتعرف على

  • الحلقات Loops
  • التوابع أو Functions

المشروع الأول: مشروع ادارة موظفي شركة

بعد اكتسابك الخبرات الجديدة. اتصل بك مدير شركة وطلب منك أن تقوم بتصميم برنامج لادارة موظفيه. وبالتأكيد قبلت المشروع 🙂

المهمة الأولى

تصميم برنامج يقوم بتخزين معلومات عن الموظفين. وعند الحاجة طباعة اسم أي منهم حسب رقمه المتسلسل. وقد يكون عدد الموظفين كبيرا جدا.

بالإضافة الى ذلك يجب على البرنامج طباعة أسماء كل الموظفين المخزنين كالتالي:

Name of employee is : …….

لنحاول انجاز المهمة وفق ما تعلمناه في الدرس الأول

ملاحظة سيتم تحميل الفديو في وقت لاحق ويتم ربطه مع المقالة

لقد تعلمنا في الدرس الماضي:

  • Numbers
  • Strings
  • Lists

لنخزن البيانات في البداية ضمن قائمة List

#تخزين البيانات
employee1 = "Ahmad"
employee2 = "Mazen"
employee3 = "Noor"
employee4 = "Samira"
#نخزن البيانات في قائمة
employeeList = [employee1 ,employee2, employee3, employee4]
#طباعة أسماء الموظفين

print("Name of employee is :" + employeeList[0])
print("Name of employee is :" + employeeList[1])
print("Name of employee is :" + employeeList[2])
print("Name of employee is :" + employeeList[3])
#النتيجة:
#Name of employee is :Ahmad
#Name of employee is :Mazen
#Name of employee is :Noor
#Name of employee is :Samira

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

print("Name of employee is :" + employeeList[])

فكيف يمكننا أن نقوم باختصار كل من هذه السطور الى أمر واحد فقط؟ لنتعرف على مفاهيم الـ functions والـ Loops وكيف يمكن أن تساعدنا في هذه المهمة

التوابع أو Functions

لننظر الى هذا المثال الجانبي. نود أن نكتب تابع يقوم بالتحية والوداع.

#تعريف التابع
def my_function():
  print("Hello")
  print("Goodbye")

#استدعاء التابع
my_function()

#النتيجة
#Hello
#Goodbye

تعريف التابع

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

def my_function():

جسم التابع

كل مايلي النقطتين سيتم تنفيذه عند استدعاء التابع أي هذا الجزء

  print("Hello")
 print("Goodbye")

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

white space

استدعاء التابع

بعد تعريف التابع يمكننا استدعائه في أي وقت وسيقوم بتكرار الأوامر المخزنة فيه. اذا استدعاء التابع مرتين سيقوم باعادة تنفيذ الأوامر كما نرى في هذا المثال:

my_function()
my_function()
#النيجة
#Hello
#Goodbye
#Hello
#Goodbye

تمرير المتحولات الى التابع

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

def my_function(myName):
  print("Hello")
  print(myName)
  print("Goodbye")

#استدعاء التابع
person1 = "Ahmad"
person2 = "Ali"
my_function(person1)
my_function(person2)

#النتيجة
#Hello
#Ahmad
#Goodbye
#Hello
#Ali
#Goodbye

نلاحظ أننا استطعنا توفير كتابة نفس الأوامر كل مرة وذلك باستخدام التوابع. لنحاول تحسين الكود الذي كتبناه في البداية

#تخزين البيانات
employee1 = "Ahmad"
employee2 = "Mazen"
employee3 = "Noor"
employee4 = "Samira"
employeeList = [employee1 ,employee2, employee3, employee4]
# تعريف التابع
def printEmp(name):
  print("Name of employee is :" + name)
#استدعاء التابع
printEmp(employeeList[0])
printEmp(employeeList[1])
printEmp(employeeList[2])
printEmp(employeeList[3])
#النتيجة:
#Name of employee is :Ahmad
#Name of employee is :Mazen
#Name of employee is :Noor
#Name of employee is :Samira

نلاحظ أن النتيجة لاتزال نفسها ولكن بواسطة كود أقل. ولكن السطر التالي مازال متكررا وقد يكون لدينا المئات من العمال في الشركة ولا نريد كتابة هذا يدويا. لنتعرف سويا على الحلقات أو Loops والتي ستساعدنا في تجاوز هذه العقبة.

الحلقات Loops

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

numbers = [1,2,3,4,5,6,7,8,9,10]
for x in numbers:
  print(x)
#النتيجة
#1
#2
#3
#4
#5
#6
#7
#8
#9
#10

وفي حال أردنا طباعة الأرقام من 0 الى 998؟ لحسن الحظ لدينا تابع جاهز في بايثون مخصص لهذا الغرض. عوضا عن كتابة الأرقام بأنفسنا يمكننا استخدام التابع Range

numbers = range(999)
for y in numbers:
  print(y)

أو بشكل مكافئ ومختصر

for z in range(999):
  print(z)

سترى الكثير من الأشخاص يكتبون الحلقات في البايثون بالشكل التالي. لنفترض أن لدينا ثلاث أشخاص مخزنين في قائمة ونود طباعة الأسماء: يقوم الشخص بتعريف طول القائمة. ومن ثم يقوم باستدعاء عناصر القائمة عن طريق الـ Index كالتالي:

names = ["Ahmad","Mazen","Noor"]
n = len(names)
#len() تابع يعطي عدد العناصر في القائمة
for i in range(n):
  print(names[i])

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

names = ["Ahmad","Mazen","Noor"]
for n in names:
  print(n)

لنقم بالعودة الى مهمتنا نحن جاهزون لكتابة الكود بشكل أفضل

#تخزين البيانات
employee1 = "Ahmad"
employee2 = "Mazen"
employee3 = "Noor"
employee4 = "Samira"
employeeList = [employee1 ,employee2, employee3, employee4]
def printEmp(name):
 print("Name of employee is :" + name)
#الحلقة
for emp in employeeList:
  printEmp(emp)
#النتيجة:
#Name of employee is :Ahmad
#Name of employee is :Mazen
#Name of employee is :Noor
#Name of employee is :Samira

أصبح الكود الخاص بنا مختصرا ويمكننا استخدامه لأي عدد اضافي من الموظفين بدون جهد اضافي.

تحديث على المهمات

المدير سعيد جدا بالكود الذي كتبته ويريدك الان تخزين معلومات اضافية عن الموظفين

  • العنوان: عبارة عن احداثيات مكانية X,Y
  • الوظيفة: مدير, عامل, مهندس …. الخ
  • الراتب: رقم معين
  • الرقم التسلسلي: غير مرتبط بالـ Index في القائمة
  • واسترجاعها عند الحاجة كالتالي. عنوان الموظف ذو الـ Index 0 مثلا

اذا يمكن لكل موظف أن يملك معلومات متعددة مخزنة. لنتعرف على مفهوم الـ Dictionraies والذي يساعدنا على تجاوز هذه المهمة

القواميس Dictionaries

يمكن أيضا تخزين البيانات في بايثون كالتالي أيضا:

person1 = {'id':23123,'name':'Ahmad','Job':'Surveyor', 'Address':[3,2]}

 

الان التحدي من That GIS Guy لك:

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

لاتنسى مشاركة هذه الدورة مع أصدقائك المهتمين

رأي واحد حول “الدرس الثاني – تعلم البرمجة للمبتدئين – PYTHON

التعليقات مغلقة.