دورة Python للمبتدئين

2: البرمجة بلغة بايثون – Constants, Variables و أنواع البيانات

Python3.8

السلام عليكم و رحمة الله و بركاته

في هذا الجزء من الدرس الأول، ستنعرف أكثر على المتغيرات في لغة البرمجة بايثون.

Constants أو الغير متغيرات:

هي قِيَم ثابتة لا تتغير سواء كانت أرقاما، نصا، أو لائحة… و لهذا السبب تُسَمى بـ Constants، أي ثابتة.

مثال:

>>> print(23)
23
>>> print(2.45)
2.45
>>> print("Shafrah")
Shafrah
>>> 

عندما نقوم بطبع رقم 23 مثلا يظهر لنا نفس الرقم دون تغيير، و هكذا.

ما هي الكلمات المحجوزة Reserved words ؟

الكلمات المحجوزة reserved words أو الكلمات المفتاحية keywords هي مُعرَّفة مسبقا من قبل اللغة البرمجية و لكل واحدة دور معين مخصص لها. مثلا، كلمة print هي دالة تقوم بإظهار عبارة معينة على الشاشة، كلمة if و هي تعني الدالة الشرطية التي تقوم بتنفيذ أمر ما عندما يتحقق شرط معين… إلخ

هذه لائحة بعض الكلمات المحجوزة الخاصة بلغة بايثون:

                                          and                 assert                in
                                          del                  else                    raise
                                          from              if                         continue
                                          not                 pass                    finally
                                          while             yield                   is
                                          as                   break                 return
                                          elif                 except                def
                                          global            import               for
                                          or                   print                   lambda
                                          with              class                    try
                                          exec

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

كي نفهم أكثر مبدأ عمل المتغيرات، لنلاحظ المثال التالي:

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

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

Assignment statement

Assignment statement أو تعبير “التكليف” يعني التعبير الذي يسمح لنا بتخزين قيمة ما في متغير معين. و يتم تخزين القيم في المتغيرات باستعمال الرمز = .

عند استعمال الرمز = ، لا يجب التفكير هنا بنفس منطق الرياضيات، أي أن المتغير number مثلا يساوي 12 دائما، و ما إذا كتبنا number = 10 نقول أن هذا خطأ لأن number = 12.

بل رمز التساوي هنا يعمل كسهم يُوجِّه القيمة نحو متغير محدد. يعني أن بفضله يمكن أن نضع 12 في المتغير number ، و إذا كتبنا number = 10 فهذا يعني أننا وضعنا 10 في المتغير و أزلنا القيمة السابقة فأصبح المتغير يحتوي على 10.

Assignment statement with expression

expression هنا تعني التعبير الرياضي أو عمليات رياضية. أي أننا نستطيع أن نُخزن قيمة ما في متغير باستعمال عملية رياضية:

>>> number = 12
>>> print(number)
12
>>> number = number * 2
>>> print(number)
24

في البداية لدينا المغير number = 12 ، و بعدها غيرنا قيمة المتغير number من خلال تخزين تعبير رياضي فيه و هو number * 2 .

البرنامج في هذه الحالة، سيبدأ أولا بتنفيذ التعبير الرياضي، يأخذ القيمة 12 و يضربها في 2، و من ثم يخزن النتيجة التي حصل عليها و هي 24 في المتغير number، و بالتالي عندما نقوم بطبع المتغير number باستعمال print (و هي كلمة مفتاحية keyword) نرى أن قيمة المغير تغيرت و أصبحت بالفعل 24.

ما شروط تسمية المتغيرات؟

هناك شروط معينة نتبعها من أجل اختيار أسماء متغيرات صحيحة في لغة بايثون:

  • يجب أن يبتدئ اسم المتغير بحرف، أو بالواصلة السفلية _ فقط . مثال: spam ، _joke
  • يمكن أن يُركَّب الاسم على حروف، أرقام و على الواصلة السفلية _ فقط
  • لا يمكن استعمال رموز أخرى في الاسم كـ : # ، $ ، @ …
  • الأسماء في بايثون تأخذ في الحسبان الحروف الكبيرة و الصغيرة، أي إذا كتبنا نفس المتغير بحروف كبيرة سيُعتَبرُ متغيرا آخرا، حتى لو كان الاسم بحرف كبير واحد. مثلا: SHAFRAH تختلف عن Shafrah و عن shafrah ، نقول أن المتغيرات في بايثون case sensitive، أي تتأثر بتغير الحروف الكبيرة و الصغيرة؛
  • لا يمكن استعمال كلمات محجوزة كأسماء متغيرات.

Mnemonic variable names

نقصد هنا بـ mnemonic variables names أسماء المتغيرات التي تساعدنا على تذكر المغزى من شفرتنا و كيفية عملها. أنه أننا باختيارنا أسماء سهلة التذكر و ذات دلالة معينة فسيسهل علينا الأمر فهم الشفرة أكثر خصوصا بعد الرجوع إليها بعد مدة من الزمن.

لنقارن بين الشفرات التالية:

  • الشفرة الأولى:
esjgqjgjq = 7000
esjgqjejq = 11
esjjqjejq = esjgqjgjq * esjgqjejq

print(esjjqjejq)
  • الشفرة الثانية:
a = 7000
b = 11
c = a * b

print(c)
  • الشفرة الثالثة:
Salary = 7000
Months_of_work = 11
Annual_Salary = Salary * Months_of_work

print(Annual_Salary)

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

استعمال أسماء واضحة تساعدنا على تذكر الهدف من شفرتنا و سهولة فهمها، و لكن بايثون لا يبالي بأية أسماء نختار، فهو في كل الحالات سيشتغل ما دمنا نستعمل نفس الأسماء التي اخترناها.

ما أنواع المتغيرات؟

تدعم بايثون خمسة أنواع من البيانات:

  • الأعداد Numeric
  • النصوص String
  • القوائم Lists
  • المصفوفات Tuples
  • القواميس Dictionnaries
  • المجموعات Sets

الأعداد

  • int (أعداد صحيحة)
a = 15
  • float (القيم الحقيقية)
f = 12.07
  • complex (أعداد معقدة)
c = 12 + 3j

j = الجذر التربيعي لـ 1-

  • bool (يُرجِع قيمتين: صحيح True أو خطأ False )

bool هو اختصار لكلمة boolean. لدينا في المثال أعلاه f = 12.07

bool(f == 12.07)

هذه الدالة تتأكد من ما إذا كان المتغير f يساوي فعلا 12.07، أي f == 12.07

في حالة تحقق التساوي: تظهر كلمة True:

>>> f = 12.07
>>> bool(f== 12.07)
True

في حالة عدم تحقق التساوي، لنضع مثلا f == 13 ، تظهر الكلمة False:

>>> f
12.07
>>> bool(f == 13)
False

النصوص و القوائم:

تطرقنا للنصوص و القوائم في الدرس التمهيدي السابق.

المصفوفات، القواميس و المجموعات:

سنتطرق لها في وقت لاحق في هذه الدورة بحول الله.

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

كما رأينا سابقا، يمكن تحويل أنواع البيانات باستعمال الدوال التالية:

                          • int()
                          • float()
                          • str()

لا يمكن تحويل نصوص تحتوي على حروف و أرقام، أو فقط حروف إلى رقم صحيح أو حقيقي:

>>> int("Shafrah")
Traceback (most recent call last):
  File "<pyshell#13>", line 1, in <module>
    int("Shafrah")
ValueError: invalid literal for int() with base 10: 'Shafrah'
>>> int('01code')
Traceback (most recent call last):
  File "<pyshell#14>", line 1, in <module>
    int('01code')
ValueError: invalid literal for int() with base 10: '01code'

و لكن إذا كان النص يحتوي فقط على أرقام، فالتحويل ممكن:

>>> int('123')
123
>>> float('230')
230.0

Operators

لتلخيص ما تم التطرق إليه في الدرس الماضي:

  • لحساب الجمع Addition نستعمل +
  • لحساب الطرح Subtraction نستعمل –
  • لحساب الضرب Multiplication نستعمل *
  • لحساب القسمة العشرية Float division نستعمل /
  • لحساب القسمة الصحيحة Integer division نستعمل //
  • لحساب الباقي Remainder نستعمل %
  • لحساب القوى Power نستعمل **

Assignment Operators

عندما نرغب في تخزين عملية رياضية بمتغير ما تحتوي على قيمته السابقة، مثلا a = a + 2، فإننا نختصر الأمر بكتابة a += 2 :

>>> a = 10
>>> a = a + 2
>>> print(a)
12
>>> a = 10
>>> a += 2
>>> print(a)
12

و هذا ينطبق أيضا على الباقي :

a += b  # a = a + b
a -= b  # a = a - b
a *= b  # a = a * b
a /= b  # a = a / b
a //= b # a = a // b
a %= b  # a = a % b

Comparison Operators

من أجل المقارنة بين المتغيرات مثلا، نستعمل الرموز التالية:

  • == : التساوي
>>> 12 == 12
True
  • =! : الاختلاف
>>> 12 != 13
True
>>> 12 != 12
False
  • <= و >= :
>>> 13 >= 12
True
>>> 14 <= 14
True
  • < و > :
>>> 12 < 6
False
>>> 12 > 6
True

Membership Operators

معاملات العضوية أو membership operators تسمح لنا بالتأكد من عضوية قيمة ما. باستعمالهم يمكن لنا التحقق من تواجد قيمة ما في تسلسل sequence معين. نقصد بالتسلسل مثلا نص string (تسلسل حروف و/أو أرقام) أو قائمة list أو مصفوفة tuple.

  • in operator :

مثال:

>>> text = 'Shafrah'
>>> 't' in text
False
>>> 's' in text
False
>>> 'S' in text
True
>>> List1 = [1,2,3,5]
>>> 4 in List1
False
>>> 2 in List1
True

ملاحظات:

عند استعمال in ، فإننا نتحقق من تواجد قيمة ما، مثلا الحرف t في نص Shafrah.

فالأمر كما لو كنا نسأل المترجم هل توجد t في المتغير text الذي يحمل النص Shafrah ؟

  • الحرف t لا يوجد في كلمة Shafrah، لذا ظهرت النتيجة False.
  • الحرف s الصغير لا يوجد في كلمة Shafrah ، تظهر النتيجة False.
  • الحرف S الكبير يوجد في الكلمة، تظهر النتيجة True.

=> نستنتج إذا أن المعامل in يعتبر الحروف الكبيرة مختلفة عن الحروف الصغيرة، مثلا s تختلف عن S.

  • not in operator :

نأخذ نفس الأمثلة أعلاه و لكن هذه المرة نستعمل عكس المعامل in:

>>> text = 'Shafrah'
>>> 't' not in text
True
>>> 's' not in text
True
>>> 'S' not in text
False
>>> list1 = [1,2,3,5]
>>> 4 not in list1
True
>>> 2 not in list1
False

إذا كان المعامل in يتحقق من تواجد قيمة ما في تسلسل معين، فإن المعامل not in يتحقق من عدك تواجد تلك القيمة في التسلسل المحدد.

فلنلاحظ الأمثلة أعلاه:

هنا نسأل هل لا يوجد الحرف t مثلا في النص Shafrah ؟

إذا كانت القيمة تتواجد فعلا في التسلسل (نص، قائمة…)، ستظهر النتيجة False، كما لو كانت الإجابة من المترجم: خطأ فالقيمة متواجدة.

أما إذا كانت القيمة غير متواجدة في التسلسل، ستظهر النتيجة True، كما لو كانت الإجابة من المترجم: صحيح، معكم حق، القيمة غير متواجدة.

Identity Operators

تُستعمل من أجل التأكد من انتماء متغير ما إلى نوع type معين أو قسم class معين.

  • is operator :
>>> number = 23
>>> type(number) is int
True
>>> type(number) is float
False
  • is not operator :
>>> text = '47'
>>> type(text) is not str
False
>>> type(text) is not int
True
السابق
1: البرمجة بلغة بايثون – Numbers, Strings, Lists
التالي
3: البرمجة بلغة بايثون – الحلقات For و While و الدالة If

شاركنا برأيك