View Categories

3.1. استخدام بايثون كآلة حاسبة

11 دقيقة

3.1. استخدام بايثون كآلة حاسبة #

مقدمة غير رسمية لبايثون #

في الأمثلة التالية، يتم تمييز المدخلات والمخرجات من خلال وجود أو عدم وجود المطالبات (* >>> * و * … *): لتكرار المثال، يجب كتابة كل شيء بعد الموجه، عند ظهور الموجه ؛ الأسطر التي لا تبدأ بموجه يتم إخراجها من المترجم. لاحظ أن موجهًا ثانويًا في سطر بمفرده في مثال يعني أنه يجب عليك كتابة سطر فارغ ؛ يستخدم هذا لإنهاء أمر متعدد الأسطر.

تتضمن العديد من الأمثلة في هذا الدليل، حتى تلك التي تم إدخالها في الموجه التفاعلي، تعليقات. تبدأ التعليقات في Python بحرف التجزئة “#” وتمتد حتى نهاية السطر المادي.

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

بعض الأمثلة:

# this is the first comment
spam = 1  # and this is the second comment
          # ... and now a third!
text = "# This is not a comment because it's inside quotes."

3.1. استخدام بايثون كآلة حاسبة

لنجرب بعض أوامر بايثون البسيطة. شغّل المترجم وانتظر الأمر الأساسي “>>>”. (لن يستغرق الأمر وقتًا طويلاً).

3.1.1. الأعداد #

يعمل المترجم الفوري كآلة حاسبة بسيطة: يمكنك كتابة تعبير فيه وسيكتب القيمة. صيغة التعبير واضحة ومباشرة: تعمل عوامل التشغيل “+” و “-” و “*” و “/” تمامًا مثل معظم اللغات الأخرى (على سبيل المثال، باسكال أو سي) ؛ يمكن استخدام الأقواس (“()”) للتجميع. فمثلا:

>>> 2 + 2
4
>>> 50 - 5*6
20
>>> (50 - 5*6) / 4
5.0
>>> 8 / 5  # division always returns a floating point number
1.6

الأعداد الصحيحة (مثل “2”، “4”، “20”) لها النوع “int”، والأرقام التي تحتوي على جزء كسري (مثل “5.0”، “1.6”) لها النوع “float”. سنرى المزيد عن الأنواع الرقمية لاحقًا في البرنامج التعليمي.

تعرض القسمة (“/”) دائمًا عددًا عشريًا. لإجراء * تقسيم الأرضية * والحصول على نتيجة صحيحة (مع استبعاد أي نتيجة جزئية)، يمكنك استخدام عامل التشغيل “//” ؛ لحساب الباقي يمكنك استخدام “٪”:

>>> 17 / 3  # classic division returns a float
5.666666666666667
>>> 
>>> 17 // 3  # floor division discards the fractional part
5
>>> 17 % 3  # the % operator returns the remainder of the division
2
>>> 5 * 3 + 2  # result * divisor + remainder
17

باستخدام Python، من الممكن استخدام عامل التشغيل “**” لحساب القوى:

>>> 5 ** 2  # 5 squared
25
>>> 2 ** 7  # 2 to the power of 7
128

تُستخدم علامة التساوي (“=”) لتعيين قيمة إلى متغير.

بعد ذلك، لا تظهر أي نتيجة قبل المطالبة التفاعلية التالية:

>>> width = 20
>>> height = 5 * 9
>>> width * height
900

إذا لم يتم “تعريف” المتغير (تم تعيين قيمة له)، فستتسبب محاولة استخدامه في ظهور خطأ:

>>> # try to access an undefined variable
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'n' is not defined

هناك دعم كامل للنقطة العائمة ؛ العوامل ذات المعاملات المختلطة تحول المعامل الصحيح إلى النقطة العائمة:

>>> 4 * 3.75 - 1
14.0

في الوضع التفاعلي، يتم تعيين آخر تعبير مطبوع للمتغير “_”. هذا يعني أنه عند استخدام Python كآلة حاسبة مكتبية، فمن الأسهل إلى حد ما متابعة الحسابات، على سبيل المثال:

>>> tax = 12.5 / 100
>>> price = 100.50
>>> price * tax
12.5625
>>> price + _
113.0625
>>> round(_, 2)
113.06

يجب معاملة هذا المتغير على أنه للقراءة فقط من قبل المستخدم. لا تحدد قيمة لها صراحة – يمكنك إنشاء ملف مستقل

متغير محلي بنفس الاسم يخفي المتغير الداخلي بسلوكه السحري.

بالإضافة إلى “int” و “float”، تدعم Python أنواعًا أخرى من الأرقام، مثل “Decimal” و “Fraction”. تحتوي Python أيضًا على دعم مدمج للأرقام المركبة، وتستخدم لاحقة “j” أو “J” للإشارة إلى الجزء التخيلي (على سبيل المثال “3 + 5j”).

3.1.2. السلاسل #

إلى جانب الأرقام، يمكن لبايثون أيضًا التعامل مع السلاسل، والتي يمكن التعبير عنها بعدة طرق. يمكن تضمينها بين علامتي اقتباس مفردتين (“” … “”) أو علامتي اقتباس مزدوجتين (“” … “”) مع نفس النتيجة. يمكن استخدام “\” للتخلص من علامات الاقتباس:

>>> 'spam eggs'  # single quotes
'spam eggs'
>>> 'doesn\'t'  # use \' to escape the single quote...
"doesn't"
>>> "doesn't"  # ...or use double quotes instead
"doesn't"
>>> '"Yes," they said.'
'"Yes," they said.'
>>> "\"Yes,\" they said."
'"Yes," they said.'
>>> '"Isn\'t," they said.'
'"Isn\'t," they said.'

في المترجم التفاعلي، يتم وضع سلسلة الإخراج بين علامتي اقتباس ويتم تخطي الأحرف الخاصة بشُرط مائلة للخلف.

في حين أن هذا قد يبدو أحيانًا مختلفًا عن الإدخال (يمكن أن تتغير علامات الاقتباس المرفقة)، فإن السلسلتين متكافئتان.

يتم تضمين السلسلة في علامتي اقتباس مزدوجتين إذا كانت السلسلة تحتوي على علامة اقتباس مفردة ولا توجد علامات اقتباس مزدوجة، وإلا يتم تضمينها بين علامتي اقتباس مفردة.

تنتج وظيفة “print ()” إخراجًا أكثر قابلية للقراءة، عن طريق حذف علامات الاقتباس المرفقة وطباعة الأحرف الخاصة والهروب:

>>> '"Isn\'t," they said.'
'"Isn\'t," they said.'
>>> print('"Isn\'t," they said.')
"Isn't," they said.
>>> s = 'First line.\nSecond line.'  # \n means newline
>>> # without print(), \n is included in the output
'First line.\nSecond line.'
>>> print(s)  # with print(), \n produces a new line
First line.
Second line.

إذا كنت لا تريد تفسير الأحرف التي يسبقها “\” كأحرف خاصة، يمكنك استخدام * سلاسل خام * بإضافة حرف “r” قبل الاقتباس الأول:

>>> print('C:\some\name')  # here \n means newline!
C:\some
ame
>>> print(r'C:\some\name')  # note the r before the quote
C:\some\name

يمكن أن تمتد القيم الحرفية للسلسلة على عدة أسطر. إحدى الطرق هي استخدام علامات الاقتباس الثلاثية: “” “” … “” “” أو “” “…” “” “. يتم تضمين نهاية السطور تلقائيًا في السلسلة، ولكن من الممكن منع ذلك عن طريق إضافة “\” في نهاية السطر. المثال التالي:

print("""\
Usage: thingy [OPTIONS]
     -h                        Display this usage message
     -H hostname               Hostname to connect to
""")

ينتج الناتج التالي (لاحظ أن السطر الجديد الأولي غير مضمن):

Usage: thingy [OPTIONS]
     -h                        Display this usage message
     -H hostname               Hostname to connect to

يمكن ربط السلاسل (لصقها معًا) باستخدام عامل التشغيل “+”، وتكرارها باستخدام “*”:

>>> # 3 times 'un', followed by 'ium'
>>> 3 * 'un' + 'ium'
'unununium'

اثنين أو أكثر من * سلسلة حرفية * (أي تلك المحاطة بين علامتي الاقتباس) بجانب بعضها البعض يتم ربطها تلقائيًا.

>>> 'Py' 'thon'
'Python'

هذه الميزة مفيدة بشكل خاص عندما تريد كسر السلاسل الطويلة:

>>> text = ('Put several strings within parentheses '
...         'to have them joined together.')
>>> text
'Put several strings within parentheses to have them joined together.'

هذا يعمل فقط مع حرفيين، وليس مع المتغيرات أو التعبيرات:

>>> prefix = 'Py'
>>> prefix 'thon'  # can't concatenate a variable and a string literal
  File "<stdin>", line 1
    prefix 'thon'
                ^
SyntaxError: invalid syntax
>>> ('un' * 3) 'ium'
  File "<stdin>", line 1
    ('un' * 3) 'ium'
                   ^
SyntaxError: invalid syntax

إذا كنت ترغب في ربط المتغيرات أو المتغيرات والحرفية، فاستخدم “+”:

>>> prefix + 'thon'
'Python'

يمكن أن تكون السلاسل مفهرسة * (منخفضة)، مع احتواء الحرف الأول على فهرس 0. لا يوجد نوع حرف منفصل ؛ الحرف هو مجرد سلسلة من الحجم الأول:

>>> word = 'Python'
>>> word[0]  # character in position 0
'P'
>>> word[5]  # character in position 5
'n'

قد تكون المؤشرات أيضًا أرقامًا سالبة، لبدء العد من اليمين:

>>> word[-1]  # last character
'n'
>>> word[-2]  # second-last character
'o'
>>> word[-6]
'P'

لاحظ أنه بما أن -0 هي نفسها 0، فإن المؤشرات السلبية تبدأ من -1.

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

الحصول على سلسلة فرعية:

>>> word[0:2]  # characters from position 0 (included) to 2 (excluded)
'Py'
>>> word[2:5]  # characters from position 2 (included) to 5 (excluded)
'tho'

لاحظ كيف يتم دائمًا تضمين البداية والنهاية مستبعدة دائمًا.

هذا يضمن أن “s [: i] + s [i:]” تساوي دائمًا “s”:

>>> word[:2] + word[2:]
'Python'
>>> word[:4] + word[4:]
'Python'

مؤشرات الشرائح لها افتراضات مفيدة ؛ يتم حذف الفهرس الأول الافتراضي إلى الصفر، بينما يتم حذف الفهرس الثاني الافتراضي لحجم السلسلة

مقطع إلى شرائح.

>>> word[:2]   # character from the beginning to position 2 (excluded)
'Py'
>>> word[4:]   # characters from position 4 (included) to the end
'on'
>>> word[-2:]  # characters from the second-last (included) to the end
'on'

طريقة واحدة لتذكر كيفية عمل الشرائح هي التفكير في المؤشرات على أنها تشير * بين الأحرف *، مع الحافة اليسرى للأول

حرف مرقم 0. ثم يكون للحافة اليمنى للحرف الأخير من سلسلة من * n * حرف فهرس * n *، على سبيل المثال:

+---+---+---+---+---+---+
 | P | y | t | h | o | n |
 +---+---+---+---+---+---+
 0   1   2   3   4   5   6
-6  -5  -4  -3  -2  -1

يعطي الصف الأول من الأرقام موضع الفهارس 0 … 6 في السلسلة ؛ يعطي الصف الثاني المؤشرات السلبية المقابلة.

تتكون الشريحة من * i * إلى * j * من جميع الأحرف بين الحواف المسماة * i * و * j *، على التوالي.

بالنسبة للمؤشرات غير السالبة، يكون طول الشريحة هو الفرق بين المؤشرات، إذا كان كلاهما داخل الحدود. على سبيل المثال، طول “الكلمة [1: 3]” هو 2.

محاولة استخدام فهرس أيضًا ستؤدي محاولة استخدام فهرس كبير جدًا إلى حدوث خطأ:

>>> word[42]  # the word only has 6 characters
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range

ومع ذلك، يتم التعامل مع فهارس الشرائح خارج النطاق بأمان عند استخدامها للتقطيع:

>>> word[4:42]
'on'
>>> word[42:]
''

لا يمكن تغيير سلاسل Python – فهي * غير قابلة للتغيير *. لذلك، يؤدي التعيين إلى موضع مفهرس في السلسلة إلى حدوث خطأ:

>>> word[0] = 'J'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
>>> word[2:] = 'py'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment

إذا كنت بحاجة إلى سلسلة مختلفة، فيجب عليك إنشاء سلسلة جديدة:

>>> 'J' + word[1:]
'Jython'
>>> word[:2] + 'py'
'Pypy'

تعرض الوظيفة المضمنة “len ()” طول السلسلة النصية:

>>> s = 'supercalifragilisticexpialidocious'
>>> len(s)
34

3.1.3. القوائم #

تعرف Python عددًا من أنواع البيانات * المركبة *، وتستخدم لتجميع القيم الأخرى معًا. الأكثر تنوعًا هي * القائمة *، والتي يمكن كتابتها كقائمة من القيم المفصولة بفواصل (العناصر) بين قوسين مربعين.

قد تحتوي القوائم على عناصر من أنواع مختلفة، ولكن عادةً ما يكون لجميع العناصر نفس النوع.

>>> squares = [1, 4, 9, 16, 25]
>>> squares
[1, 4, 9, 16, 25]

مثل السلاسل (وجميع أنواع التسلسل * المضمنة الأخرى)، يمكن فهرسة القوائم وتقطيعها إلى شرائح:

>>> squares[0]  # indexing returns the item
1
>>> squares[-1]
25
>>> squares[-3:]  # slicing returns a new list
[9, 16, 25]

تقوم جميع عمليات الشرائح بإرجاع قائمة جديدة تحتوي على العناصر المطلوبة. هذا يعني أن الشريحة التالية تُرجع نسخة ضحلة من القائمة:

>>> squares[:]
[1, 4, 9, 16, 25]

تدعم القوائم أيضًا عمليات مثل التسلسل:

>>> squares + [36, 49, 64, 81, 100]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

بخلاف السلاسل * غير القابلة للتغيير *، تعد القوائم من النوع * القابل للتغيير *، أي أنه من الممكن تغيير محتواها:

>>> cubes = [1, 8, 27, 65, 125]  # something's wrong here
>>> 4 ** 3  # the cube of 4 is 64, not 65!
64
>>> cubes[3] = 64  # replace the wrong value
>>> cubes
[1, 8, 27, 64, 125]

يمكنك أيضًا إضافة عناصر جديدة في نهاية القائمة، باستخدام “append ()” * طريقة * (سنرى المزيد عن الطرق لاحقًا):

>>> cubes.append(216)  # add the cube of 6
>>> cubes.append(7 ** 3)  # and the cube of 7
>>> cubes
[1, 8, 27, 64, 125, 216, 343]

من الممكن أيضًا التعيين إلى الشرائح، ويمكن أن يؤدي ذلك إلى تغيير حجم القائمة أو مسحها بالكامل:

>>> letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> letters
['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> # replace some values
>>> letters[2:5] = ['C', 'D', 'E']
>>> letters
['a', 'b', 'C', 'D', 'E', 'f', 'g']
>>> # now remove them
>>> letters[2:5] = []
>>> letters
['a', 'b', 'f', 'g']
>>> # clear the list by replacing all the elements with an empty list
>>> letters[:] = []
>>> letters
[]

تنطبق الوظيفة المضمنة “len ()” أيضًا على القوائم:

>>> letters = ['a', 'b', 'c', 'd']
>>> len(letters)
4

من الممكن تداخل القوائم (إنشاء قوائم تحتوي على قوائم أخرى)، على سبيل المثال:

>>> a = ['a', 'b', 'c']
>>> n = [1, 2, 3]
>>> x = [a, n]
>>> x
[['a', 'b', 'c'], [1, 2, 3]]
>>> x[0]
['a', 'b', 'c']
>>> x[0][1]
'b'
error: Content is protected !!
Scroll to Top