Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
AhmadAlsaadi
GitHub Repository: AhmadAlsaadi/Arabic-python-notebook
Path: blob/master/الفصل الثاني-المبادئ الاساسية للغة بايثون.ipynb
675 views
Kernel: Python 3 (ipykernel)
import style style._set_css_style("custom.css")

الفصل الثاني : المبادئ الأساسية للغة بايثون


بعد ان تأكدنا من ان نظام التشغيل الذي نعمل عليه يحتوي على احدى اصدارات لغة بايثون 3 يمكننا الان ان نبدأ رحلة التعلم والتى اتمنى ان تكون حافلة بالمتعة والفائدة.

أهداف الفصل

عند اتمام هذا الفصل يجب ان يكون لديك المام بعدة مبادئ اساسية عن لغة بايثون والتي من اهمها:
  1. طريقة كتابة المتغيرات
  2. طريقة تدوين الملاحظات على الكود البرمجي
  3. كيفية طباعة نص على شاشة الكمبيوتر
  • الفرق بين استخدام الاحرف الصغيرة والكبيرة في كتابة الكود البرمجي.
  • اجراء العمليات الحسابية الاساسية
  • انواع البيانات الاساسية في لغة بايثون.
  • القاعدة التي تحكم عدد المسافات الفارغة المتروكة قبل بداية كل سطر برمجي
  • تعريف البرنامج

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

    المتغيرات

    المتغيرات هي اسماء تستخدم للدلالة على قيم البيانات التي يراد حفظها في ذاكرة الكمبيوتر. واستخدام المتغيرات في كتابة الأكواد البرمجية ذو أهمية قصوى بحيث لا يكاد يخلو برنامج من وجود متغير واحد أو أكثر وذلك لأنها تسهل على المبرمج تذكر البيانات باسماء يسهل حفظها بدلاً من استخدام قيم البيانات ذاتها. لإسناد قيمة الى متغير فإننا نختار اسماً مناسباً للمتغير ومن ثم نضع علامة اليساوي وأخيراً نضع القيمة المراد إسنادها للمتغير كما في المثال التالي:
    x=5
    في المثال السابق علامة اليساوي تسمى معامل الاسناد. لذلك يصبح الآن بمقدورنا استخدام x عوضا عن القيمة 5 في أي عمليات حسابية. كما يجب التنويه إلى أن قيمة x قابلة للتغيير. فعند تكرار المثال السابق باستخدام القيمة 10 فإن x اﻵن تصبح تشير للقيمة 10 عوضاً عن القيمة 5 كما في المثال التالي:
    x=5 x=10 x

    القواعد التي تحكم كتابة اسماء المتغيرات

    ان لغة بايثون تتطلب التقيد بقواعد اساسية عند كتابة أسماء المتغيرات وتتلخص هذه القواعد فيما يلي:
    اولاً: لا يمكن استخدام اي رمز في كتابة المتغيرات عدا الاحرف والارقام والشرطة السفلية. كما في الامثلة التالية
    y_2=5
    y$="Saeed"
    y&="Waleed"
    لاحظ انه عند استخدامنا للرمزين $ و & كجزء من اسم المتغير فان مفسر بايثون اعطانا رسالة بوجود خطأ في التركيب اللغوي "Invalid syntax"
    ثانياً: المتغيرات يجب ان تبدأ بحرف او شرطة سفلية. عدا ذلك فان مفسر بايثون يعطي رسالة بوجود خطأ. وهذه بعض الامثلة على هذه القاعدة:
    number=20
    _number=30
    2y=5
    لاحظ ان في المثال الاخير حاولنا كتابة متغير يبدأ اسمه برقم 2 لكن مفسر بايثون رفض ذلك واعطانا رسالة تفيد بوجد خطأ في التركيب اللغوي "invalid syntax"
    ثالثاً: يمكن استخدام الارقام في كتابة أسماء المتغيرات ولكن لايمكن استخدامها في بداية الاسم كما في الامثلة التالية:
    number2=7
    one2one=1
    رابعاً: أسماء المتغيرات يمكن ان تكون حرف كما وضحنا سابقا بالمتغير x او كلمة كما وضحنا ذلك بالمتغير name او مجموعة كلمات مربوطة بشرطة سفلية كما في المثال التالي:
    student_number=1234
    tag number= 444
    لاحظ انه عندما حاولنا كتابة اسم المتغير من كلمتين بترك فراغ يين الكلمتين رفض مفسر بايثون هذه العملية واعطانا رسالة مشابه للرسالة السابقة تفيد بوجود خطأ في التركيب اللغوي
    خامساً: أسماء المتغيرات يجب ان لا تكون احد الكلمات المستخدمة في التركيب اللغوي للغة بايثون والجدول التالي يبين الكلمات المحجوزة من قبل لغة بايثون:
    and as assert break class continue
    def del elif else except exec
    finally for from global if import
    in is lambda not or pass print raise return try while whith yield
    المثال التالي يلخص القواعد السابقة:
    pass=45
    لاحظ عند استخدامنا لكلمة pass وهي كلمة مججوزة تستخدم في التركيب اللغوي للغة بايثون والتي سوف نتعرف على طريقة استخدامها لاحقا اعطانا مفسر بايثون رسالة بوجود خطأ في التركيب اللغوي
    تمرين: اسند القيمة 100 للمتغير n. في سطر ثاني قم بتغير قيمة n الى القيمة 50. في سطر ثالث حاول ان تعرف القيمة النهائية للمتغير n ؟
    n=100 n=50 n

    تدوين الملاحظات

    تسمح لغة بايثون كغيرها من لغات البرمجة الاخرى بان يكتب المبرمج ملاحظاته داخل الكود البرمجي من اجل ان تساعدة على تذكر وظيفة الكود البرمجي او من اجل اعطاء شروحات وافيه للمبرمجين الاخرين الذين قد يعملون على صيانة وتطوير الكود البرمجي في المستقبل. ويمكن كتابة ملاحظة من سطر واحد في اي مكان من الكود البرمجي ولكن بعد ان يسبق الملاحظة علامة هاش تاق (#). فعند كتابة علامة (#) في بداية السطر فان بايثون يعتبر جميع محتويات هذا السطر ملاحظات للمستخدم وليست كود برمجي كما موضح في المثال التالي:
    # ملاحظات وتعليقات على الكود تكتب هنا x=10
    كما يمكن للمبرمج ان يدون ملاحظاته باستخدام علامة (#) بعد ان كتب سطر من الكود البرمجي كما في المثال التالي:
    x=10 # ملاحظات وتعليقات على الكود البرمجي تكتب هنا
    فمفسر بايثون هنا يتعامل مع الجزء الذي يسبق علامة (#) على انه كود برمجي يتحاج الى تفسير والجزء الذي يقع بعد علامة (#) يعتبره ملاحظات وتعليقات للمبرمج لاتحتاج الى تفسير فيتجاهلها.
    كما يمكن كتابة ملاحظة متعددة السطور باستخادام علامة التنصيص الثلاثية كما في المثال التالي:
    """ تعليقات وملاحظات تعليقات وملاحظات تعليقات وملاحظات """ x=10
    وسوف نتحدث بشىئ من التفصيل عن انواع علامات التنصيص واستخداماتها ولكن ليس الان بل عند بدء الحديث عن البيانات النصية.

    الطباعة على شاشة الكمبيوتر

    ان من المعتاد عند تعلم اي لغة برمجة جديدة ان يتم البدء بتعلم كيفية الطباعة على شاشة الكمبيوتر و ذلك لانها تعتبر وظيفة اساسية في جميع لغات البرمجة.ونحن سوف نسير على هذا العرف هنا على الرغم من تأخيرنا له قليلا. فامر الطباعة على الشاشة في بايثون يكون باسيتخدام الدالة ()print متبوعا بما يراد طباعته داخل قوسي الدالة. وبما اننا في بداية المشوار ولم نتطرق لمفوهم المتغيرات فسوف نبدأ بطباعة قيم رقمية اولا. فالسطر البرمجي التالي يقوم بطباعة القيمة 5 على الشاشة:
    print(5)
    تمرين: قم باسناد القيمة 25 للمتغير m وفي سطر ثاني قم بطباعة قمية m؟
    m=25 print(m)

    الاحرف الكبيرة و الاحرف الصغيرة

    لغتنا العربية الجميلة لاتحوي على مفهوم الحروف الصغيرة والكبيرة بعكس ما هو موجود في اللغة الانجليزية. وبما ان لغة بايثون مكتوبة باللغة الانجليزية فان هذه اللغة تهتم بما اذا كان الكود البرمجي او جزء منه مكتوب بالاحرف الصغيرة او الكبيرة. فالمتغير b يتعامل معه مفسر بايثون على انه مختلف عن B. فعندما نسند القيمة 5 مثلا للمتغير b فان اسناد القيمة 10 للمتغير B لا يغير من قيمة b لان مفسر بايثون يتعامل معهما على انهما متغيرين مختلفين كما في المثال التالي:
    b=5 B=10 print(b) print(B)

    العمليات الحسابية

    اجراء العمليات الحسابية الاساسية

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

    اولاً: تسخدم العلامة "+" لاجراء عمليات الجمع
    مثال:
    3+4
    ثانياً: تسخدم علامة "-" (الشرطة الاعتيادية وليست السفلية) لاجراء عمليات الطرح
    مثال:
    7-5
    ثالثاً: استخدام علامة النجمة "*" لاجراء عمليات الضرب
    مثال:
    2*3
    رابعاً: تستخدم الشرطة المائلة "/" لاجراء عمليات القسمة
    مثال:
    5/3
    خامساً: تستخدم النجمتين "**" لرفع قيمة عدد لقوة معينه
    مثال:
    3**2
    في المثال السابق تم رفع قيمة العدد 3 للقوة او الاس 2
    سادساً: تستخدم الشرطتين المائلتين "//" لحساب ناتج القسمة بعد اهمال الباقي
    مثال:
    11//3
    سابعاً: تستخدم علامة النسبة المئوية "%" لحساب باقي القسمة
    مثال:
    7%3
    بالنسبة لعملية القسمة فان هناك اختلاف بسيط بين اصدارة بايثون 2 و 3 يجب التنبه عليه. فعند اجراء عملية القسمة في اصدارة بايثون 2 على اعداد طبيعية فان ناتج القسمة يكون عدد طبيعي. بمعنى انه اذا اردنا قسمة العدد 3 على العدد 2 مثلا فان ناتج القسمة يكون 1 وليس 1.5 هذه المشكله غير موجوده في اصدارة بايثون 3. ولتصحيح هذه المشكلة لمن يستخدمون الاصدار 2 يمكنهم استخدام الاعداد الصحيحة في عملية القسمة سواء في البسط او المقام او كليهما.

    قواعد الاسبقية في تنفيذ العمليات الحسابية

    كما هو متعارف عليه في علم الرياضيات فان عمليتي القسمة والضرب تسبق كلا من عمليتي الطرح والجمع وعملية الاس تسبق عمليتي الضرب والجمع الا اذا استخدمت الاقواس لتحديد اسبقية العمليات الحسابية. وهذه امثلة توضح هذا المفهوم:
    3+4*2
    لاحظ ان عملية الضرب تم القيام بها قبل اجراء عملية الجمع لذلك تم الحصول على الناتج 11 بدلا من 14
    10/2-1
    10**2/5+4
    (3+4)*2
    15/(6-3)

    أنواع البيانات

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

    البيانات العددية

    تنقسم البيانات العددية الى ثلاثة اقسام رئيسية:
    اولاَ: الاعداد الصحيحة (Integers) او بشكل مختصر int وهي الاعداد التي تعبر عن عدم التجزئة وتشمل الاعداد الموجبة والسالبة والصفر { 3 , 2 , 1 , 0 , 1- , 2- , 3- }
    ثانياً: الأعداد العائمة (float) او العشرية وهي الاعداد التي تحتوي على فاصلة عشرية سواء كانت موجبة او سالبة. يجب ملاحظة ان العدد 5 يعتبر عدد صحيح integer وبمجرد وضع فاصلة عشرية بعد هذا الرقم ليصبح .5 فان العدد الان يعتبر عدد عشري float وليس عدد صحيح ويمكن التأكد من ذلك من خلال استخدام الدالة ()type كما في المثال التالي:
    type(5)
    type(5.)
    ثالثاً: الاعداد المركبة (complex numbers) وهي الاعداد التي تحتوي على اعداد حقيقية واعداد خيالية فمثلا العدد 2+3j يعتبر عدد مركب يتكون من جزء صحيح وهو العدد 2 وجزء خيالي هو العدد 3 ويمثل الحرف j الجذر التربيعي للعدد -1 حيث يكتب في لغة بايثون بالطريقة التالية:
    2+3j
    type(2+3j)

    البيانات المنطقية

    البيانات المنطقية هي البيانات التي تحوى احدى القيمتين صح True أو خطأ False . لاحظ ان هاتين القيمتين تبتدأ بحرف كبير في لغة بايثون. وهناك عمليات مقارنة كثير تنتج عنها احدى هاتين القيمتين. فعملية مقارنة التساوي بين قيمتين في بايثون تستخدم علامتي يساوي متتابعتين "==" فعند مقارنة عددين مثلا فاننا نكتبهما بالشكل التالي:
    5==4
    لاحظ ان عدم تساوي القيمتين في المثال السابق ادى الى حصولنا على القيمة False اي خطأ. اما اذا كانت القيمتين متساويتين فان الناتج يكون "True" اي صحيح كما في المثال التالي:
    15==15
    يجب الاشارة الى ان القيمة المنطقية True تمثل 1 في الاعداد الصحيحة. والقيمة المنطقية False تمثل 0 في الاعداد الصحية ويمكن التأكد من ذلك من خلال المثال التالي:
    True==1
    False==0

    البيانات النصية

    كل ما يكتب بين علامتى تنصيص سواء كانت احادية ('z') او ثنائية ("z") او ثلاثية ('''z''') يطلق عليه بيان نصي string أو بشكل مختصر str. فالقيمة "123" يتعامل معها بايثون على انها سلسلة من الرموز النصية الرقمية مختلفة عن القيمة العددية 123. ويمكن التأكد من ذلك باستخدام الدالة ()type كما في المثال التالي:
    x="123" type(x)
    "123"==123
    وهناك عدة قواعد يجب اتباعها عند كتابة البيانات النصيية والتي يمكن تلخيصها في النقاط التالية:
    اولاً: علامتي التنصيص لكل بيان نصي يجب ان تكون من نفس النوع. فعند البدء بعلامة تنصيص احادية يجب ان ينتهي البيان النصي بعلامة تنصيص احادية وكذلك الحال مع علامة التنصيص الثنائية والثلاثية كما في المثال التالي:
    student_name='Ahmad' student_name="Ali" student_name='''Hassan'''
    لاحظ انه عندما نقوم باستخدام علامتي تنصيص مختلفة فان ذلك سوف يجعل مفسر لغة بايثون يظهر رسالة تفيد بوجود خطأ كما في المثال التالي:
    'welcome to python"
    ثانياً: علامة التنصيص الاحادية والثنائية تستخدم لكاتبة نصوص من سطر واحد بينما علامة التنصيص الثلاثية تسمح بطباعة اكثر من سطر. فعند استخدام علامة التنصيص الاحادية والثنائية لطباعة بيان نصي متعدد السطور فان مفسر بايثون يظهر لنا رسالة تفيد بوجود خطأ كما في المثالين التاليين:
    print('welcome to python')
    print("welcome to python")
    اما عند استخدام علامة التنصيص الثلاثية فان مفسر بايثون يتم عملية الطباعة بدون اظهار اي رسالة خطأ كما في المثال التالي:
    print('''welcome to python ''')
    ثالثاً: يمكن استخدام رمز التجاهل "\" في نهاية كل سطر لتمكين علامة التنصيص الاحادية والثنائية من طباعة اكثر من سطر على الشاشة. لكن هناك فرق بين الطريقتين فعلامة التنصيص الثلاثية تبقي البيان النصي كما كتب من ناحية تعدد السطور بينما استخدام رمز التجاهل يقوم بكتابة البيان النصي كسطر واحد كما في المثالين التاليين:
    print ('welcome \ to \ python') print("welcome \ to \ python")
    print('''welcome to python''')
    رابعاً: يمكن استخدام علامة تنصيص او اكثر داخل علامتي تنصيص اخرى ولكن بعد التأكد من ان علامة التنصيص الداخلية مختلفة عن علامة التنصيص المستخدمة في بداية ونهاية النص.
    print('They "like" python') print("My brother's car is quite old")
    خامساً: يمكن استخدام رمز التجاهل المشار اليه سابقا لاداء نفس الوظيفة اذا كانت علامة التنصيص الداخلية مشابهة لعلامتي التنصيص الخارجية. كما ماهو موضح في الامثلة التالية:
    print('They \'like\' python') print('My brother\'s car is quite old')
    وهناك علامات تجاهل أخرى خاصة تؤدي وظائف خاصة فمثلا t\ يعتبرها مفسر بايثون على انها حقل فارغ مكون من اربع مسافات كما في المثال التالي:
    print("1\t2\t3\t4")
    فمفسر بايثون في المثال السابق قام بتحويل كل زمر تجاهل t\ الى حقل فارغ مكون من اربع مسافات. وكذلك الامر مع رمز التجاهل n\ فانه يخبر مفسر بايثون بالنزول الى سطر جديد كما في المثال التالي:
    print("1\n2\n3\n4")
    اما اذا اردنا ان نخبر مفسر بايثون بأن يتجاهل جميع رموز التجاهل الموجودة في النص فإننا نسبق النص بالحرف r ليخبر مفسر بايثون ان هذا النص لا يحتاج الى تفسير الرموز بداخله كما في المثال التالي:
    print(r"1\t2\t3\t4")
    كما يجب الإشارة الى ان البيانات النصية ليس لها حد في قيمها فممكن ان تتكون من سلسلة من الحروف والأرقام والرموز بقدر ما تستوعبه ذاكرة كمبيوتر المستخدم. ويكمن كذلك ان يكون البيان النصي فارغاً كما في المثال التالي:
    x=""
    يجب الاشارة الى انه في معظم لغات البرمجة المعروفه لا يمكن استخدام المتغيرات الا بعد تعريفها مسبقا وذلك بتحديد نوع البيانات التي تشير اليه هذه المتغيرات. لكن الامر مختلف تماما في لغة بايثون. فالمبرمج لا يحتاج الى تعريف المتغيرات قبل استخدامها كما تعلمنا سابقا عن كيفية اسناد قيمة لمتغير. لذلك يطلق على لغة بايثون بانها ديناميكية لانها تقوم بتحديد نوع المتغيرات ذاتيا من خلال التعرف على نوع البيانات المستخدمة مع كل متغير. وهذه الخاصية تعطي المبرمج بلغة بايثون سهوله وسرعة غير مسبوقة في كتابة الاكواد البرمجية. والدالة ()type التي استخدمناها سابقا كفيلة بتوضيح هذه النقطة من خلال المثال التالي:
    x=5 type(x)

    ترك مسافات

    في حين ان لغات البرمجة الاخرى تستخدم مصطلحات واقواس لتحديد بداية ونهاية الاجزاء الداخلية للكود البرمجي فان لغة بايثون تتبع نظام ترك المسافات عند بداية كتابة السطر البرمجي لاداء نفس المهمة. فلغة جافا تستخدم الاقواس لتحديد جزئية الكود الداخلي و علاقته ببقية الاجزاء كما في المثال التالي:
    public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World"); } }
    بينما لغة بايثون تعمد الى ترك مسافة عند بداية كتابة الجزء الداخلى للكود لتجديد مداه وعلاقتة بالاجزاء الاخرى كما في المثال التالي:
    for i in [1,2,3,4]: print (i)
    ليس من المهم ان تفهم وظيفة الكود البرمجي السابق الان لاننا سوف نتطرق اليه في وقت لاحق ولكن المهم ان تعرف ان لغة بايثون تهتم بترك مسافات عند بداية كتابة الاسطر البرمجية لتحديد الاجزاء الداخلية من الكود.فعند كتابة برنامج من سطر واحد مثلا فان ترك اي مسافة قبل بداية السطر البرمجي يجعل مفسر بايثون يرفض التركيب اللغوي و يظهر رسالة تبين سبب المشكلة هو ترك مسافة عند بداية كتابة السطر البرمجي في موضع لايستدعي ترك اي مسافة. لكن ترك مسافة في اي موضع اخى من السطر ليس له اي تأثير على التركيب اللغوي. كما يجب الاشارة الى ان ترك اسطر فارغة بين اسطر الكود البرمجي ليس له اي تأثير يذكر ايضا. سوف نعاود الحديث عن ترك المسافات عندما نبدأ الحديث عن الحلقات التكرارية والدوال في بايثون حيث تستدعى الحاجة للحديث عن ترك مسافات عند كتابة هذه التراكيب اللغوية.

    ملخص الفصل


    اسئلة استيعابية

    1- ما هو اقصى عدد من الاحرف والأرقام يمكن استخدامه في كتابة اسماء المتغيرات؟

    2- صح ام خطأ؟ لا يفرق مفسر بايثون في تعامله مع الكود البرمجي بين الاحرف الكبيرة والصغيرة.

    3-كيف تكتب في بايثون العملية الرياضية x مرفوعا للقوة y؟
    4-ماهو ناتج العملية الرياضية 3%22؟
    5-ماهو ناتج العملية الرياضية 3**1*3؟
    6-اي من الاسماء التالية يمكن استخدامه كاسم متغير ["in","it","on","__init"]؟