البرمجة بلغة بايثون (الفصل الثالث)
- أبريل 12, 2023
- تم النشر بواسطة: كود خانة
- الفئة: البرمجة بلغة بايثون

الوظائف (Functions):
هي اكواد جاهزة تؤدي وظيفة معينة ولقد تعاملنا مسبقا معها في بداية الدورة فمثلاً الوظيفة ()type هي وظيفة جاهزة في لغة بايثون نستخدمها لمعرفة نوع المتغير حيث مدخل هذه الوظيفة هي البيانات ومخرج او ناتج هذه الوظيفة هو نوع البيانات
فمثلاً لو كان لدينا متغير قيمته الاسم ياسين لو استخدمنا الوظيفة type مع هذا المتغير سوف يكون ناتج الوظيفة هو نوع هذا المتغير وكما هو واضح في ناتج الكود ان نوع المتغير هو str وتعني متغير نصي string
1 2 |
name = "Yaseen" type(name) |
1 |
str |
وايضاً تعلمنا سابقاً وظائف مهمة اخرى مثل ()print() , int(), str(), bool(), list وتعلمنا ما هي فائدة كل من هذه الوظائف
استخدام الوظائف الجاهزة في البرمجة مهم جدا ويسهل علينا العمل بشكل كبير لانه بدل من كتابة مجموعة اكواد لاداء مهمة معينة نستطيع استدعاء وظيفة جاهزة تقوم بهذه المهمة وللتوضيح اكثر لنأخذ المثال التالي
مثال:
لنفترض ان لدينا قائمة اسمها قائمة الاعمار ages تحتوي على اعمار مجموعة من الاصدقاء ونريد معرفة ماهو اكبر عمر وماهو اصغر عمر في هذه القائمة
فبدلاً من كتابة عدة سطور برمجية والدخول الى القائمة وكتابة العديد من الشروط والخ.. نستطيع استدعاء الوظيفة ()max لايجاد اكبر رقم في القائمة والوظيفة ()min لايجاد اصغر رقم في القائمة والكود التالي يوضح لك
1 2 3 4 5 |
ages = [23, 26, 41, 21, 18, 32] # Maximum print( max(ages) ) # Minimum print( min(ages) ) |
1 2 |
41 18 |
وكما هو واضح في ناتج الكود ان اكبر قيمة هي 41 واصغر قيمة هي 18 والذي حصل بالضبط في الكود السابق هو عند استخدام الوظيفة max مع القائمة ages سوف يكون مدخل الوظيفة max هو قيم قائمة الاعمار ومخرج او الناتج للوظيفة max سيكون هو اكبر قيمة في قيم قائمة الاعمار وكذلك الحال بالنسبة للوظيفة min
وايضاً من الممكن خزن ناتج الوظيفة في متغير معين على سبيل المثال نستطيع خزن اكبر عمر في قائمة الاصدقاء في متغير اسمه max_age او اي اسم اخر
1 2 3 4 5 |
ages = [23, 26, 41, 21, 18, 32] # Maximum max_ages = max(ages) # Print out the result print(max_ages) |
1 |
41 |
بعض الوظائف الشائعة:
في لغة بايثون هناك العديد من الوظائف الجاهزة سنتعلم بعضها في هذا الدرس وسنتعلم الباقي في الدروس والدورات القادمة
أبرز هذه الوظائف هي:
- وظيفة حساب الطول (len)
- وظيفة التقريب (round)
- وظيفة الحصول على مساعدة (help)
- وظيفة الترتيب (sorted)
- والمزيد ..
ملاحظة: يوجد في لغة بايثون العديد من الوظائف ( بأمكانك الاطلاع عليها من هنا ) غير مطلوب منك حفظها وكل ما مطلوب منك فهم دور اهم هذه الوظائف ( الوظائف الاكثر استخداماً ) والتي سنتعرف عليها في هذه الدورة والدورات القادمة
مساحة تجريبية:
وظيفة حساب الطول او عدد العناصر ()len
من اجل ايجاد طول قائمة او نص او نوع اخر من البيانات التي سنتعرف عليها لاحقا نستخدم وظيفة ()len والتي هي مختصر لكلمة الطول length حيث تقوم هذه الوظيفة بحساب عدد العناصر
مثال عن استخدام وظيفة ()len مع القائمة:
1 2 |
ages = [23, 26, 41, 21, 18, 32] len(ages) |
1 |
6 |
مثال عن استخدام وظيفة ()len مع النص:
1 2 |
x = "hello world!" len(x) |
1 |
12 |
وظيفة التقريب ()round
تستخدم لتقريب الاعداد الكسرية الى اقرب رقم كسري او الى اقرب رقم صحيح فهي تأخذ مدخلين وهما:
- المدخل الاول ( اجباري ) وهو المتغير الرقمي او الرقم الذي نريد تنفيذ الوظيفة عليه
- المدخل الثاني ( اختياري ) وهو عدد الارقام الكسرية التي نريدها في الناتج ( مثلا 2 تعطينا رقمين كسرية في الناتج )
1 2 |
a = 3.729 round(a, 2) |
1 |
3.73 |
المدخل الثاني مبني في هذه الوظيفة افتراضياً على انه صفر ( يعني التقريب لاقرب رقم صحيح بدون اي رقم كسري ) إلا اذا قمنا بتحديده برقم اخر فمثلاً في ناتج الكود السابق حصلنا على رقم مع قيمتين كسرية وذلك لأن قيمة المدخل الثاني لوظيفة التقريب كانت 2 اما اذا لم يتم تحديد اي رقم في المدخل الثاني فسيتم تقريب الى اقرب رقم صحيح
1 2 |
a = 3.729 round(a) |
1 |
4 |
ملاحظة هامة:
كل وظيفة من الوظائف تأخذ عدد معين من المدخلات فمثلاً بعض الوظائف تأخذ مدخل واحد فقط وبعض الوظائف تأخذ مدخلين وبعض الوظائف تأخذ ثلاثة والخ..
هذه المدخلات تسمى براميتر او معامل او وسيط ولكن في عالم البرمجة عادة يتم استخدام مصطلح براميترز Parameters وبعض هذه البراميترز تكون اجبارية (يجب تحديدها) وبعضها تكون اختيارية (بالامكان تحديدها او تركها)
وظيفة الحصول على مساعدة ()help
وتستخدم من اجل فهم تفاصيل اي وظيفة مثلاً ماهو دور وظيفة معينة وماهي المدخلات التي تأخذها هذه الوظيفة وماهي المدخلات الاجبارية وماهي المدخلات الاختيارية وماهي القيم الافتراضية للمدخلات الاختيارية والخ..
لمعرفة كل ذلك نحتاج الى استخدام وظيفة المساعدة ()help وبداخل اقواس هذه الوظيفة نكتب اسم الوظيفة التي نريد الاستعلام عنها ، فمثلاً حتى نعرف اكثر عن تفاصيل الوظيفة السابقة ( وظيفة التقريب round ) نحتاج الى استخدام وظيفة المساعدة ()help معها
1 |
help(round) |
1 2 3 4 5 6 7 8 |
Help on built-in function round in module builtins: round(...) round(number[, ndigits]) -> number Round a number to a given precision in decimal digits (default 0 digits). This returns an int when called with one argument, otherwise the same type as the number. ndigits may be negative. |
او للأختصار نستطيع استخدام علامة الاستفهام مع اسم الوظيفة المراد الاستعلام عنها وسنحصل في الناتج على معلومات هذه الوظيفة
1 |
round? |
1 2 3 4 5 6 7 |
Docstring: round(number[, ndigits]) -> number Round a number to a given precision in decimal digits (default 0 digits). This returns an int when called with one argument, otherwise the same type as the number. ndigits may be negative. Type: builtin_function_or_method |
وظيفة الترتيب (sorted):
لترتيب العناصر تصاعدياً او تنازلياً في قائمة معينة او في نوع من انواع البيانات الاخرى التي سنتعرف عليها لاحقاً نستخدم الوظيفة ()sorted ومن اجل فهم هذه الوظيفة وماهي المدخلات ( الـ parameters ) التي تأخذها لنقم بقراءة معلوماتها بأستخدام (help(sorted او بأستخدام ?sorted كما تعلمنا قبل قليل
1 |
help(sorted) |
1 2 3 4 5 6 7 |
Help on built-in function sorted in module builtins: sorted(iterable, key=None, reverse=False) Return a new list containing all items from the iterable in ascending order. A custom key function can be supplied to customise the sort order, and the reverse flag can be set to request the result in descending order. |
ومن الواضح في المعلومات ان هذه الوظيفة تأخذ 3 مدخلات iterable وهو المتغير الذي نريد ترتيبه و key=None وتعني انها بدون قيمة افتراضيا يعني في حال عدم ذكرها لن تأخذ اي قيمة الا في حال كتابتها واعطائها قيمة معينة والمدخل الثالث هو reverse وقيمته الافتراضية هي False اي بمعنى ترتيب غير عكسي ( تصاعدي ) يعني في حال عدم اعطاء قيمة لهذا البراميتر سيتم ترتيب العناصر تصاعدياً بشكل افتراضي وفي حال جعل قيمة هذا البراميتر reverse=True سيتم ترتيب العناصر عكسياً ( تنازلياً )
مثال:
لنفترض ان لدينا القائمة التالية
1 |
x = [5, 3, 8, 6] |
ولنفترض اننا نريد ترتيبها تصاعدياً ومن اجل القيام بهذه المهمة نحتاج الى استدعاء الوظيفة ()sorted واعطائها براميتر واحد وهو اسم المتغير x لان ()sorted افتراضياً تقوم بالترتيب تصاعدياً
1 |
sorted(x) |
1 |
[3, 5, 6, 8] |
تمرين برمجي (1):
افترض ان لدينا القائمتين التاليتين
1 2 |
first = [12.35, 24.5, 31.0] second = [8.45, 6.4] |
والمطلوب منك هو التالي:
-
قم بانشاء متغير اسمه full قيمته دمج القائمتين معا بأستخدام علامة +
-
قم بأنشاء متغير اسمه full_sorted قيمته هي القائمة full مرتبة تنازلياً
first = [12.35, 24.5, 31.0]
second = [8.45, 6.4]
# Create full list
full = _________________
# Sort full list in descending order
full_sorted = __________________________
# Print out full list
print(full)
# Print out full_sorted list
print(full_sorted)
first = [12.35, 24.5, 31.0]
second = [8.45, 6.4]
# Create full list
full = first + second
# Sort full list in descending order
full_sorted = sorted(full , reverse = True)
# Print out full list
print(full)
# Print out full_sorted list
print(full_sorted)
Ex().has_equal_ast(exact=False)
success_msg("اجابة صحيحة، احسنت")
من اجل ترتيب القائمة full تنازلياً استخدم الوظيفة sorted واجعل البراميتر الاول لهذه الوظيفة هو القائمة full والبراميتر الثاني هو تفعيل الترتيب العكسي reverse=True
الميثودز (Methods):
في لغة بايثون كل شيء عبارة عن كائن object فمثلاً المتغيرات الصحيحة والمتغيرات النصية والقوائم وكل شيء تعلمناه سابقاً او سنتعلمه لاحقاً هو عبارة عن كائن object
1 2 3 4 5 6 7 8 |
# int object x = 7.13 # str object y = 'hello world!' # list object Friends = ['Ahmed', 30, 'Ali', 29, 'Sara', 25] |
جميع الوظائف التي تعرفنا عليها سابقاً مثل ()len(), int(), type كلها يتم استدعائها على الكائن object اياً كان نوعه مثلاً (type(x حيث هنا استدعينا الوظيفة ()type على الكائن x
1 2 |
x = 7.13 type(x) |
1 |
float |
الميثود ( Methods ) هي ايضاً وظائف برمجية ولكن يتم استدعائها من داخل الكائن object وليس على الكائن ، فمثلاً لتحويل الحروف في متغير نصي من صغيرة الى كبيرة نستدعي الميثود ()upper من داخل الكائن النصي ونستطيع القيام بعملية استدعاء الميثود من داخل الكائن بأستخدام النقطة ( . )
1 2 |
y = 'hello world!' y.upper() |
1 |
'HELLO WORLD!' |
لاحظ في الكود السابق اننا قمنا بخزن نص في المتغير y فأصبحت y عبارة عن كائن نصي ، ثم قمنا بأستدعاء الـ method ( الوظيفة upper لتكبير الحروف ) من داخل هذا الكائن النصي ، وكذلك الحال مع الميثود ()lower والذي يستخدم لتحويل جميع الحروف الى صغيرة
1 2 |
text = 'Nice Day' text.lower() |
1 |
'nice day' |
وفي لغة بايثون لكل كائن نوع مخصص من الوظائف methods بعضها لايمكن استخدامها مع الانواع الاخرى من الكائنات فمثلاً الوظيفة ()upper من المستحيل استدعائها من داخل متغير رقمي لأن هذه الوظيفة وظيفتها تكبير الحروف في المتغيرات النصية ولكن في نفس الوقت هناك وظائف تستخدم مع عدة انواع من الكائنات فمثلاً الوظيفة ()count يمكننا استخدامها مع النصوص لحساب عدد مرات ظهور حرف او علامة او رقم معين في النص
1 2 |
p = 'programming' p.count('r') |
1 |
2 |
وبامكاننا ايضاً استخدامها مع القوائم لحساب عدد مرات ظهور عنصر معين في القائمة
1 2 |
z = [1, 2, 2, 4, 2] z.count(2) |
1 |
3 |
تمرين برمجي (2):
افترض ان لدينا المتغير النصي التالي
1 |
name = "yaseen" |
المطلوب منك هو التالي:
1- قم بتحويل اول حرف من المتغير name الى حرف كبير ( اول حرف فقط وباقي الحروف تبقى كما هي ) وبأمكانك القيام بذلك من خلال أستدعاء الميثود ()capitalize من داخل المتغير name واطبع الناتج
2- قم بحساب عدد مرات ظهور حرف e في المتغير name من خلال استدعاء الميثود ()count من داخل المتغير واطبع الناتج
3- قم بتغيير الحرف e في المتغير name واستبدله بالحرف i وبأمكانك القيام بذلك من خلال استدعاء الميثود (“replace(“e”,”i من داخل المتغير name واطبع الناتج
name = "yaseen"
#1 capitalize name
print( ______________________ )
#2 count number of "e" in name
print( ______________________ )
#3 replace "e" in name with "i"
print( ______________________ )
name = "yaseen"
#1 capitalize name
print( name.capitalize() )
#2 count number of "e" in name
print( name.count("e") )
#3 replace "e" in name with "i"
print( name.replace("e", "i") )
Ex().has_equal_ast(exact=False)
success_msg("اجابة صحيحة، احسنت")
الميثود (index):
من الوظائف التي يتم استخدامها مع النصوص والقوائم هي الميثود ()index حيث تأخذ مدخل واحد وتعطينا الاندكس لاول ظهور لهذا المدخل في الكائن
المثال الاول: عن استخدام الـ ()index مع النصوص
1 2 |
y = 'hello world!' y.index('w') |
1 |
6 |
المثال الثاني: عن استخدام الـ ()index مع القوائم
1 2 |
z = [1, 2, 2, 4, 2] z.index(2) |
1 |
1 |
ايضا نستطيع استخدام الميثود ()find من اجل اداء نفس المهمة والحصول على اول اندكس في نص او قائمة والفرق بين ()find وبين ()index هو انه في حال لم يكن العنصر الذي نبحث عنه في المتغير النصي او القائمة بأستخدام الميثود ()find فسوف نحصل في الناتج على 1- وتعني انه هذا العنصر غير موجود اما في ()index فسوف نحصل على خطأ Error
مثال عن عملية البحث عن عنصر غير موجود بأستخدام المثود ()find
1 2 |
y = 'hello world!' y.find('z') |
1 |
-1 |
مثال عن عملية البحث عن عنصر غير موجود بأستخدام المثود ()index
1 2 |
y = 'hello world!' y.index('z') |
1 |
ValueError: substring not found |
تمرين برمجي (3):
لدينا قائمة المساحات التالية
1 |
areas = [14.35, 15.0, 19.0, 12.5, 8.75] |
1- قم بطباعة الاندكس للقيمة 12.5 في القائمة areas
2- قم بطباعة عدد مرات ظهور القيمة 23.5 في القائمة areas
# Area list
areas = [14.35, 15.0, 19.0, 12.5, 8.75]
#1 Print out the index of 12.5 in areas
print( _________________ )
#2 Print out how often 23.5 appears in areas
print( _________________ )
# Area list
areas = [14.35, 15.0, 19.0, 12.5, 8.75]
#1 Print out the index of 12.5 in areas
print( areas.index(12.5) )
#2 Print out how often 23.5 appears in areas
print( areas.count(23.5) )
Ex().has_equal_ast(exact=False)
success_msg("اجابة صحيحة، احسنت")
– استخدم المثود index لمعرفة الاندكس للرقم 12.5
– استخدم المثود count لمعرفة عدد مرات ظهور الرقم 23.5
بعض الميثود المهمة في القوائم:
- الاضافة والدمج
من اجل اضافة اي عنصر الى قائمة معينة نستخدم الميثود append وهي تستخدم بشكل واسع جدا في لغة بايثون
1 2 3 |
num = [11,22,33] num.append(44) num |
1 |
[11,22,33,44] |
ايضا بأمكاننا اضافة قائمة اخرى بأستخدام append ولكن ستضاف القائمة على شكل عنصر في القائمة وليست دمج بين قائمتين
1 2 3 4 |
list1 = [1, 2, 3] list2 = [4, 5, 6] list1.append(list2) list1 |
1 |
[1, 2, 3, [4, 5, 6]] |
ونستطيع ايضاً دمج عناصر قائمتين معاً في قائمة واحدة بأستخدام الميثود extend او اشارة +
1 2 3 4 |
list1 = [1, 2, 3] list2 = [4, 5, 6] list1.extend(list2) list1 |
1 |
[1, 2, 3, 4, 5, 6] |
- الحذف والازالة
من اجل حذف اي عنصر من القائمة نستخدم الميثود pop ونكتب الاندكس للعنصر الذي نريد حذفه
1 2 3 |
num= [11,22,33,44] num.pop(2) num |
1 |
[11,22,44] |
ايضاً نستطيع حذف اي عنصر من القائمة بأستخدام قيمة العنصر وليس الاندكس للعنصر وذلك بأستخدام الميثود remove
1 2 3 |
num = [11,22,33,44] num.remove(33) num |
1 |
[11,22,44] |
- الترتيب العكسي
من اجل ترتيب عناصر قائمة معينة بشكل عكسي نستخدم الميثود reverse
ضع في بالك ان عكس الترتيب يعني اعادة ترتيب عناصر القائمة بشكل عكسي ( من اليمين الى اليسار او العكس ) ويختلف عن عملية اعادة الترتيب تصاعدياً او تنازلياَ
1 2 3 |
num = [11,44,33,22] num.reverse() num |
1 |
[22, 33, 44, 11] |
تمرين برمجي (4):
لدينا قائمة المساحات التالية
1 |
areas = [14.35, 15.0, 19.0, 12.5, 8.75] |
1- قم بأضافة مساحة الكراج 17.0 الى قائمة المساحات areas
2- قم بحذف مساحة غرفة المعيشة 19.0 من قائمة المساحات areas
3- قم بعكس ترتيب عناصر قائمة المساحات areas
# Area list
areas = [14.35, 15.0, 19.0, 12.5, 8.75]
#1 Append garden area (17.0)
areas.____________
print(areas)
#2 Remove living room area (19.0)
areas.____________
print(areas)
#3 Reverse the orders of the elements in areas
areas.____________
print(areas)
# Area list
areas = [14.35, 15.0, 19.0, 12.5, 8.75]
#1 Append garden area (17.0)
areas.append(17.0)
print(areas)
#2 Remove living room area (19.0)
areas.remove(19.0)
print(areas)
#3 Reverse the orders of the elements in areas
areas.reverse()
print(areas)
Ex().has_equal_ast(exact=False)
success_msg("اجابة صحيحة، احسنت")
– استخدم المثود remove من اجل حذف مساحة غرفة المعيشة من قائمة المساحات
– استخدم المثود reverse من اجل عكس ترتيب عناصر قائمة المساحات
المكتبات والحزم:
كما تعلمنا سابقا هناك عدد كبير من الوظائف والميثود في لغة بايثون تقوم بمهام معينة تغنينا عن كتابة عدة سطور برمجية هذه الوظائف جميعها موجودة ضمن لغة بايثون ولكن هذه الوظائف محدودة جداً وبسيطة وغير كافية
على سبيل المثال لايوجد وظائف ضمن لغة بايثون تخص تصوير البيانات او تحليلها ولا يوجد وظائف تخص الذكاء الاصطناعي او فتح روابط المواقع الالكترونية ولا يوجد ادوات لتصميم البرامج والخ.. من الاشياء المهمة التي نحتاجها في البرمجة
هنا يأتي دور المكتبات والحزم البرمجية حيث احد الامور التي تجعل لغة بايثون قوية جداً هو العدد الكبير للمكتبات الموجودة على الانترنت والتي تسهل علينا عمل اي شيء نريده في لغة بايثون حيث يوجد مكتبات في لغة بايثون لكل شيء تقريباً
هذه المكتبات والحزم هي عبارة عن اكواد جاهزة للاستخدام تم كتابتها بواسطة مبرمجين محترفين وهذه المكتبات والحزم تغنينا عن كتابة العديد من السطور البرمجية المعقدة والطويلة وتسهل عملنا بشكل كبير جداً ومن اهمها:
- مكتبة NumPy والتي تستخدم للقيام بالعمليات الرياضية المهمة مثل المصفوفات وغيرها
- مكتبة Pandas والتي تستخدم للقيام بعمليات تحليل البيانات
- مكتبة MatPlotLib والتي تستخدم في عمليات تصوير البيانات
- مكتبة SciKit-Learn والتي تستخدم في مجال تعلم الالة
- مكتبة Keras والتي تستخدم في مجال التعلم العميق
- مكتبة OpenCV والتي تستخدم في مجال الرؤية الحاسوبية
- مكتبة NLTK والتي تستخدم في مجال معالجة النصوص الطبيعية
- وعدد كبير اخر من المكتبات الرائعة والتي سنتعلمها في الدروس والدورات القادمة
هذه المكتبات هي خارجية ليست ضمنية داخل بايثون ولذلك نحتاج الى تحميلها وتنصيبها ولكن نحن في كود خانة قمنا بكل شيء وغير مطلوب منك تحميل او تنصيب اي شيء على حاسبتك (وفي حال اردت تنصيب لغة بايثون او تنصيب اي مكتبة على حاسبتك الشخصية بأمكانك اتباع الخطوات الموضحة بالصور من هنا)
ملاحظات:
المقصود بكلمة مكتبة هي مجموعة من الوظائف البرمجية وبأمكانك تخيل المكتبة على شكل فولدر قامت شركة علمية او مبرمج محترف برفعه على الانترنت وتخيل انه يوجد في داخل هذا الفولدر عدد من الفايلات حيث كل فايل من هذه الفايلات يمثل وظيفة برمجية ( كود برمجي يؤدي وظيفة معينة ) مثل وظيفة لحساب ناتج ضرب مصفوفتين او وظيفة لتحويل مجموعة من الارقام (الارباح) الى رسم بياني يسهل فهمه اوغيرها من الوظائف
احياناً سنقوم بأستيراد مكتبة كاملة من الوظائف تسمى library واحياناً سنقوم بأستيراد حزمة من الوظائف تسمى package واحياناً اخرى تسمى module ولا يهم الفرق بين التسميات حيث جميعهم عبارة عن مجموعة من الوظائف جاهزة
وللتوضيح اكثر لنفترض اننا نريد تنصيب وتحميل مكتبة NumPy من اجل استخدام وظيفة معينة في داخل هذه المكتبة (مثلاً وظيفة تحويل القائمة الى مصفوفة رياضية) ومن اجل القيام بذلك نحتاج الى اتباع الخطوات البسيطة التالية:
- تنصيب المكتبة: اول خطوة نحتاج الى القيام بها هي تنصيب المكتبة وذلك لأن المكاتب هي اكواد خارجية غير موجودة داخل لغة بايثون
ومن اجل تنصيب اي مكتبة في لغة بايثون كل ماعلينا فعله هو استخدام الامر pip3 install! ثم بعدها نكتب اسم المكتبة المراد تنصيبها (على سبيل المثال numpy)
في لغة بايثون عادة يتم استخدام حزمة تنصيب المكاتب pip3 install! من اجل تنصيب اي مكتبة فمثلاً لو اردت تنصيب اي مكتبة في لغة بايثون بامكانك البحث في محرك البحث كوكل عن طريقة تنصيب المكتبة التي تريدها من خلال كتابة pip3 install ثم اسم المكتبة التي تريد تنصيبها وستظهر لك عدة صفحات توضح لك طريقة تنصيب المكتبة التي تريدها
1 |
!pip3 install numpy |
ملاحظة: نحن في هذه الدورة والدورات القادمة سنوفر لك كل ماتحتاجه من مكاتب ولذلك لا داعي لتنصيب اي شيء
- استيراد المكتبة: كما ذكرنا سابقاً ان المكتبات هي اكواد خارجية ( غير موجودة ضمنياً داخل بايثون ) ولذلك نحتاج الى استيراد المكتبة بعد تنصيبها لتضمينها في لغة بايثون ويتم ذلك من خلال استخدام الامر import مع اسم المكتبة
1 |
import numpy |
- استخدام الوظائف من داخل المكتبة: الان بأمكاننا استخدام اي وظيفة من داخل مكتبة numpy ويتم ذلك من خلال كتابة اسم المكتبة ثم كتابة اسم الوظيفة التي نريد استخدامها مثلا نريد استخدام وظيفة المصفوفات array من مكتبة numpy
1 2 3 |
x = [1, 2, 3] # Convert x list to array numpy.array(x) |
1 |
array([1, 2, 3]) |
ملاحظة: الوظيفة ()array تستخدم لتحويل القائمة الرقمية الى مصفوفة رقمية وسنتعرف اكثر على فائدتها واستخداماتها في الدورات القادمة
- في العادة يتم اختصار اسم المكتبات لانه من المزعج ان تقوم بكتابة اسم المكتبة في كل مرة تريد استخدامها وخاصة اذا كان اسم المكتبة طويل فمثلاً من الشائع جدا اختصار اسم مكتبة numpy بالحرفين np ويتم ذلك من خلال استخدام الامر as
1 2 3 |
import numpy as np x = [1, 2, 3] np.array(x) |
1 |
array([1, 2, 3]) |
- في بعض الاحيان نحتاج الى استيراد وظيفة معينة من مكتبة ولانحتاج الى المكتبة بأكملها فبعض المكاتب حجمها كبير جداً وتحتوي على مئات الحزم والوظائف الداخلية.
من اجل استيراد وظيفة معينة من مكتبة معينة نستخدم الامر from وبعدها نكتب اسم المكتبة ثم نستخدم الامر import وبعدها نكتب اسم الوظيفة التي نريد استيرادها ( مثلاً نريد استيراد فقط وظيفة المصفوفات من مكتبة numpy وليس المكتبة بأكملها ) وبعد استيراد هذه الوظيفة نستطيع استخدامها بدون ذكر اسم المكتبة قبلها لاننا قمنا بأستيراد فقط الوظيفة وليست المكتبة
1 2 3 |
from numpy import array x = [1, 2, 3] array(x) |
1 |
array([1, 2, 3]) |
- ولكن يفضل دائما استيراد المكتبة ثم تنفيذ اي وظيفة من داخلها لان هذا يسهل علينا فهم الكود خاصةً لو كنا نعمل على مشروع كبير يحتوي على عدد كبير من السطور البرمجية
فمثلاً الكود التالي لو قرأته في منتصف المشروع الذي تعمل عليها سيكون من الواضح لك اننا ننستخدم المصفوفات من مكتبة numpy
1 |
np.array(x) |
اما الكود التالي لو واجهك فسيكون غير مفهوم ماهي الـ array ومن اين اتت ( هل هي وظيفة قمت انت بصناعتها او وظيفة تم استيرادها من مكتبة NumPy او من مكتبة اخرى؟ )
1 |
array(x) |
تمرين برمجي (5):
في هذا التمرين سوف نستخدم احدى المكاتب الشهيرة في لغة بايثون وهي مكتبة math والتي توفر لنا عدد كبير من الوظائف الرياضية مثل وظائف الجذر التربيعي والجيب والجيب تمام والرقم π وغيرها من وظائف الرياضيات
افترض ان لدينا دائرة نصف قطرها r = 0.4 ونريد حساب مساحتها حيث ان مساحة الدائرة A يتم حسابها بالمعادلة الرياضية التالية
مساحة الدائرة = نصف القطر تربيع مضروب في الرقم باي
( باي هو رقم ثابت في الرياضيات مقداره 3.14)
والمطلوب منك هو التالي:
1- قم بأستيراد المكتبة math من اجل استخدام الوظيفة pi الموجودة في داخل هذه المكتبة
2- احسب مساحة الدائرة بأستخدام المعادلة الرياضية الموضحة في الصورة واخزن الناتج في متغير اسمه A
# Radius
r = 0.4
# Import math package
______ ____
#2 Calculate A
A = ______________
# Print out A
print("Area: " , A)
# Radius
r = 0.4
# Import math package
import math
#2 Calculate A
A = math.pi * r**2
# Print out A
print("Area: " , A)
Ex().has_equal_ast(exact=False)
success_msg("اجابة صحيحة، احسنت")
تمرين برمجي (6):
في هذا التمرين سوف نتدرب على الاستيراد الانتقائي حيث سنقوم بأستيراد وظيفة معينة من داخل مكتبة وليست مكتبة كاملة كما في التمرين السابق والمطلوب منك في هذا التمرين هو حساب الجذر التربيعي للمتغير x والذي قيمته 16
1- قم بأستيراد وظيفة حساب الجذر التربيعي ()sqrt من المكتبة math
2- قم بحساب الجذر التربيعي للمتغير x ثم اخزنه في المتغير s
x = 16
#1 Import sqrt function from math package
____ ____ ____ ____
#2 Calaculate square root of x
s = ________
# Print out s
print("Square root: ", s)
x = 16
#1 Import sqrt function from math package
from math import sqrt
#2 Calaculate Sqrt x
s = sqrt(x)
# Print out s
print("Square root: ", s)
Ex().has_equal_ast(exact=False)
success_msg("اجابة صحيحة، احسنت")