في أمثلة بايثون Python التالية، يتم تمييز المدخلات والمخرجات من خلال وجود أو عدم وجود المطالبات (>>> و …). لتكرار المثال، يجب عليك كتابة كل شيء بعد الموجّه أو Prompt. عندما تظهر المطالبة؛ الأسطر التي لا تبدأ بموجه يتم إخراجها من المترجم، لاحظ أن موجهًا ثانويًا في سطر بمفرده في مثال يعني أنه يجب عليك كتابة سطر فارغ؛ يتم استخدام بايثون Python في هذا الأسلوب لإنهاء أمر متعدد الأسطر.
تتضمن العديد من الأمثلة في هذا الدليل، حتى تلك التي تم إدخالها في الموجه التفاعلي أو Prompt، تعليقات. تبدأ التعليقات في Python بحرف التجزئة، #، وتمتد حتى نهاية السطر المادي، وقد يظهر تعليق في بداية السطر أو بعد مسافة بيضاء أو رمز، ولكن ليس ضمن سلسلة حرفية. حرف التجزئة داخل سلسلة حرفية هو مجرد حرف تجزئة، ونظرًا لأن التعليقات تهدف إلى توضيح التعليمات البرمجية ولا يتم تفسيرها بواسطة 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
استخدام بايثون كآلة حاسبة
لنجرب بعض أوامر بايثون أو Python البسيطة. ابدأ المترجم وانتظر الموجه الأساسي أو >>>. (لن يستغرق الأمر وقتًا طويلاً).
أمثلة بايثون في استخدام الأعداد
يعمل المترجم الفوري كآلة حاسبة بسيطة: يمكنك كتابة تعبير فيه وسيكتب القيمة. صيغة التعبير واضحة ومباشرة: عوامل التشغيل + ، – ، * و / تعمل تمامًا كما هو الحال في معظم اللغات الأخرى (على سبيل المثال، لغة باسكال Pascal أو لغة سي C)؛ يمكن استخدام الأقواس (()) للتجميع. فمثلا:
>>> 2 + 2
4
>>> (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
. سنرى المزيد عن الأنواع العددية أو الرقمية لاحقًا في البرنامج التعليمي.
كما تعرض القسمة (/
) دائمًا قيمة عائمة أو 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
باستخدام Python، من الممكن استخدام عامل التشغيل ** لحساب القوى أو (الأسس):
>>>
5 ** 2 # 5 squared
25>>>
2 ** 7 # 2 to the power of 7
128
ملاحظة: نظرًا لأن ** لها أسبقية أعلى من -، فسيتم تفسير -3 ** 2 على أنها – (3 ** 2) وبالتالي ينتج عنها -9. لتجنب ذلك والحصول على 9، يمكنك استخدام (-3) ** 2.
تُستخدم علامة التساوي أو (=) لتعيين قيمة إلى متغير. بعد ذلك، لا يتم عرض أي نتيجة قبل الموجه التفاعلي التالي:
>>> width = 20
>>> height = 5 * 9
>>> width * height
900
إذا لم يتم “تعريف” المتغير (تعيين قيمة له)، فإن محاولة استخدامه ستعطيك خطأ:
>>>
n
# try to access an undefined variable
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'n' is not defined
النقطة العائمة
هناك دعم كامل للنقطة العائمة أو (العلامة العشرية)؛ العوامل ذات المعاملات المختلطة تُحوّل المعامل الصحيح إلى النقطة العائمة:
>>> 4 * p. 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 أيضًا دعمًا مدمجًا للأعداد المركبة complex numbers
، وتستخدم اللاحقة j
أو J
للإشارة إلى الجزء التخيلي (على سبيل المثال: 3+5j).
أمثلة السلاسل في بايثون Python
بالإضافة إلى الأعداد، يمكن لبايثون أيضًا معالجة السلاسل، والتي يمكن التعبير عنها بعدة طرق. يمكن تضمينها بين علامتي اقتباس مفردتين (’…’) أو علامتي اقتباس مزدوجتين (“…”) بنفس النتيجة. كما أن \
يمكن استخدامها للتخلص من علامات الاقتباس:
>>> 'spam eggs' # single quotes
'spam eggs'
>>> 'doesn \' t '# use \' to escape the single quote ...
"doesn't"
>>> "doesn't" # ... or use double quotes instead
"doesnt"
>>> '"Yes," they said.'
'"Yes," they said.
>>> "\" Yes, \ "they said."
'"Yes," they said.
>>> 'Isn \' t, "they said. '
'Isn \' t, "they said. '
على عكس اللغات الأخرى، فإن الأحرف الخاصة مثل n\ لها نفس المعنى مع علامات الاقتباس الفردية (‘…’) والمزدوجة (“…”). والفرق الوحيد بين الاثنين هو أنه في علامات الاقتباس الفردية لا تحتاج إلى الهروب “(ولكن عليك الهروب \”) والعكس صحيح.
في المترجم التفاعلي، يتم وضع مخرجات السلسة بين علامتي اقتباس ويتم تخطي الأحرف الخاصة بشُرط مائلة للخلف. في حين أن هذا قد يبدو أحيانًا مختلفًا عن الإدخال (يمكن أن تتغير علامات الاقتباس المرفقة)، فإن السلسلتين متكافئتان. يتم تضمين السلسلة بين علامتي اقتباس مزدوجتين إذا كانت السلسلة تحتوي على علامة اقتباس فردية ولا توجد علامات اقتباس مزدوجة، وإلا يتم تضمينها بين علامتي اقتباس مفردة. تُنتج وظيفة ()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
>>> s # 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.
استخدام السلاسل الأولية
إذا كنت لا تريد تفسير الأحرف التي يسبقها \
على أنها أحرف خاصة، فيمكنك استخدام السلاسل الأولية أو raw string بإضافة حرف 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
يمكن ربط السلاسل أو (لصقها معًا) Concatinate باستخدام عامل التشغيل +
. كما يمكن تكرارها باستخدام عامل التشغيل *
:
>>> # 3 times 'un', folowed 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. لا يوجد نوع بيانات “حرف” قائم بذاته؛ الحرف هو مجرد سلسلة من الحجم 1 أو (سلسلة تحتوي على حرف واحد):
>>> 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.
بالإضافة إلى الفهرسة، يتم أيضًا دعم التقطيع أو slicing. أثناء استخدام الفهرسة للحصول على أحرف فردية، يتيح لك التقطيع الحصول على سلسلة فرعية أو (شريحة):
>>> 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:]
' '
لا يمكن تغيير سلاسل بايثون – فهي غير قابلة للتغيير. لذلك، يؤدي التعيين إلى موضع مفهرس في السلسلة إلى حدوث خطأ:
>>> 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
ملاحظات على أمثلة بايثون
- نوع تسلسل النص – str: السلاسل هي أمثلة لأنواع التسلسل، وتدعم العمليات الشائعة التي تدعمها هذه الأنواع.
- طرق السلسلة: تدعم الجمل عددًا كبيرًا من الأساليب للتحويلات الأساسية والبحث.
- سلسلة حرفية منسقة: سلسلة حرفية تحتوي على تعبيرات مضمنة.
- تنسيق بناء الجملة: معلومات حول تنسيق السلسلة باستخدام
()str.format
. - تنسيق سلسلة نمط printf: يتم هنا وصف عمليات التنسيق القديمة التي يتم استدعاؤها عندما تكون السلاسل هي المعامل الأيسر لعامل التشغيل٪.
أمثلة بايثون Python في استخدام القوائم
تعرف Python عددًا من أنواع البيانات المركبة، وتُستخدم لتجميع القيم الأخرى معًا. الأكثر تنوعًا هي القائمة list، والتي يمكن كتابتها كقائمة من القيم المفصولة بفواصل (العناصر) بين قوسين مربعين. قد تحتوي القوائم على عناصر من أنواع مختلفة، ولكن عادةً ما يكون لجميع العناصر نفس النوع، فيما يلي بعض أمثلة بايثون Python في استخدام القوائم:
>>> squares = [1, 4, 9, 16, 25]
>>> squares
[1, 4, 9, 16, 25]
مثل السلاسل (وجميع أنواع التسلسلات أو sequence المضمنة الأخرى)، يمكن فهرسة القوائم وتقطيعها إلى شرائح:
>>> 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]
تغيير محتوى القوائم
تدعم القوائم أيضًا عمليات مثل الربط (أو التسلسل) Concatination:
>>> 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'
الخطوات الأولى نحو البرمجة
بالطبع، يمكننا استخدام أمثلة بايثون لمهام أكثر تعقيدًا من جمع عددين معًا. على سبيل المثال، يمكننا كتابة تسلسل فرعي sub-sequence أولي لسلسلة فيبوناتشي Fibonacci series على النحو التالي:
>>> # Fibonacci series:
... # the sum of two elements defines the next
... a, b = 0, 1
>>> while a <10:
... print (a)
... a, b = b, a + b
...
0
1
1
2
3
5
8
يحتوي السطر الأول على مهمة متعددة: يحصل المتغيران a و b في نفس الوقت على القيمتين الجديدتين 0 و 1. في السطر الأخير يتم استخدام هذا مرة أخرى، مما يدل على أن التعبيرات الموجودة على الجانب الأيمن يتم حسابها أولاً قبل تنفيذ أي من التعيينات. يتم تقييم تعبيرات الجانب الأيمن من اليسار إلى اليمين.
يتم تنفيذ حلقة while طالما بقي الشرط (هنا: a <10) صحيحًا. في Python، كما هو الحال في C، تكون أي قيمة عدد صحيح غير صفري هي قيمة صحيحة؛ والصفر هي قيمة خطأ. قد يكون الشرط أيضًا سلسلة أو قيمة قائمة، وفي الواقع أي تسلسل؛ أي شيء بطول غير صفري يكون صحيحًا، والتسلسلات الفارغة خاطئة، والاختبار المستخدم في المثال هو مقارنة بسيطة. كما تتم كتابة عوامل المقارنة القياسية كما في C: <(أقل من)، > (أكبر من)، == (يساوي)، <= (أقل من أو يساوي)، > = (أكبر من أو يساوي) و! = (لا يساوي).
تم وضع مسافة بادئة لجسم الحلقة: المسافة البادئة هي طريقة Python لتركيب أو تجميع العبارات. في الموجه التفاعلي prompt، يجب عليك كتابة علامة تبويب أو مسافة (مسافات) لكل سطر به مسافة بادئة. من الناحية العملية، سوف تقوم بإعداد مدخلات أكثر تعقيدًا لبيثون باستخدام محرر نصوص؛ تحتوي جميع برامج تحرير النصوص الملائمة على ميزة المسافة البادئة التلقائية. عندما يتم إدخال عبارة مركبة بشكل تفاعلي، يجب أن يتبعها سطر فارغ للإشارة إلى الاكتمال (نظرًا لأن المحلل اللغوي لا يمكنه التخمين عندما قمت بكتابة السطر الأخير). لاحظ أنه يجب وضع مسافات بادئة لكل سطر داخل الكتلة الأساسية بنفس المقدار.
دالة ()print
تكتب الدالة ()print
قيمة الوسيطة (الوسيطات) المعطاة. إنه يختلف عن مجرد كتابة التعبير الذي تريد كتابته (كما فعلنا سابقًا في أمثلة الآلة الحاسبة) في الطريقة التي يتعامل بها مع الوسيطات المتعددة وكمية الكسور العشرية والسلاسل. تتم طباعة السلاسل بدون علامات اقتباس، ويتم إدخال مسافة بين العناصر، بحيث يمكنك تنسيق الأشياء بشكل جيد ، مثل هذا:
>>> i = 256 * 256
>>> print ('The value of i is', i)
The value of i is 65536
يمكن استخدام نهاية وسيطة الكلمة الأساسية لتجنب السطر الجديد بعد المخرجات، أو إنهاء المخرجات بسلسلة مختلفة:
>> a, b = 0, 1
>>> while a <1000:
... print (a, end = ',')
... a, b = b, a + b
... 0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,
- الموضوع الأساسي: دروس بايثون
- لقراءة بحث عن لغة بايثون، راجع موضوع: لغة برمجة بايثون ومميزاتها وفلسفتها.
المصدر
- دورة تدريب دروس لغة برمجة بايثون Python، ترجمة وإعداد: د. مصطفى عبيد، مركز البحوث والدراسات متعدد التخصصات.
- الموقع الرسمي لمؤسسة برمجيات بايثون Python Software Foundation.