برمجة بايثون 2026 — جامعة هلسنكي › الجزء 4: الدوال والقوائم 4 / 15 السابق التالي

محرر Visual Studio Code ومفسر Python وأداة التنقيح المدمجة

أهداف التعلم

بعد هذا القسم

  • ستكون مجهزًا لاستخدام محرر Visual Studio Code في إتمام تمارين هذه الدورة
  • ستكون على معرفة بمفسر Python التفاعلي، وستكون قادرًا على استخدامه لتشغيل الشيفرة

حتى الآن كانت كل تمارين هذه الدورة تُنجَز مباشرة في صفحات الدورة داخل نوافذ محرر مدمجة. البرمجة في المتصفح مناسبة جدًا للخطوات الأولى في البرمجة، لكن حان الوقت الآن للبدء باستخدام محرر مستقل مخصص للبرمجة.

هناك العشرات من المحررات المختلفة الملائمة للبرمجة. في هذه الدورة سنستخدم محرر Visual Studio Code، الذي ذاع استخدامه في السنوات الأخيرة.

يُرجى تثبيت محرر Visual Studio Code على حاسوبك الآن. قد تحتاج أيضًا إلى تثبيت Python وإضافة Visual Studio Code الخاصة بـ Python. وستحتاج أيضًا إلى إضافة TMC، التي تتولى تشغيل الاختبارات المصاحبة للتمارين. في إضافة TMC، اختر MOOC بصفة المنظمة وPython Programming 2026 بصفة الدورة.

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

تمرين برمجي: مرحبًا Visual Studio Code

اكتب برنامجًا يسأل المستخدم عن المحرر الذي يستخدمه. ينبغي أن يواصل البرنامج السؤال حتى يكتب المستخدم Visual Studio Code.

ألقِ نظرة على مثال السلوك المتوقع أدناه:

Editor: **Emacs**
not good
Editor: **Vim**
not good
Editor: **Word**
awful
Editor: **Atom**
not good
Editor: **Visual Studio Code**
an excellent choice!

إذا كتب المستخدِم Word أو Notepad، يردّ البرنامج بـ awful. أما خيارات المحررات غير المقبولة الأخرى فيتلقى الردّ not good.

يجب أن تكون ردود فعل البرنامج غير حساسة لحالة الأحرف. أي أن الإدخال نفسه من المستخدم بأحرف صغيرة أو بأحرف كبيرة أو بحالة مختلطة ينبغي أن يؤدي إلى الردّ نفسه:

Editor: **NOTEPAD**
awful
Editor: **viSUal STudiO cODe**
an excellent choice!

تلميح: أبسط طريقة لتحقيق ذلك هي تحويل كل الأحرف إلى الحالة نفسها. تابع lower في سلاسل Python يحوّل السلسلة النصية بالكامل إلى أحرف صغيرة. مثال على استخدامه:

mystring = "Visual Studio CODE"
if "visual studio code" == mystring.lower():
    print("this was the string I was looking for!")

ملاحظة: هذا التمرين لا يطلب منك كتابة أي دوال، لذا يجب أن لا تضع أي شيفرة داخل كتلة if __name__ == "__main__". الأمر نفسه ينطبق على أي تمارين قادمة لا تطلب الدوال صراحةً.

تشغيل الشيفرة

في Visual Studio Code، أسهل طريقة لتشغيل شيفرتك هي النقر على المثلث في الزاوية العلوية اليمنى. يحدث أحيانًا أن يبقى برنامج ما يعمل في الخلفية، ربما لأنه ينتظر إدخالًا من المستخدم أو أنه عالق في حلقة لا نهائية، دون أن تُدرك ذلك. قد لا تلاحظ ذلك إلا عندما تحاول تشغيل البرنامج التالي، الذي لن يعمل ببساطة لأن التنفيذ السابق ما زال يحتجز الموارد. الحل السريع هو الضغط في الوقت نفسه على المفتاحين Control+C، ما يوقف تنفيذ أي عملية جارية. يجب أن يعمل البرنامج التالي الآن جيدًا.

مفسر Python التفاعلي

من أهم الأدوات لأي مبرمج Python هو مفسر Python التفاعلي.

قد تختلف طريقة بدء تشغيل المفسر حسب منصتك. في نظام Linux أو Mac، يمكنك كتابة python3 في الطرفية. أما في Windows فقد يكون الأمر في سطر الأوامر هو python. يبدو تشغيل المفسر على Mac كما يلي:

4_1_1.png

من الممكن أيضًا تشغيل المفسر داخل Visual Studio Code. أولًا يجب أن تنفّذ برنامجًا بالنقر على المثلث. سيُفتح بذلك قسم Terminal على شاشتك، حيث يمكنك الآن كتابة python3 (أو python):

4_1_2.png

يمكنك أيضًا تجربة مفسر Python يعمل في المتصفح، مثل https://www.python.org/shell/.

المفسر هو طريقة لتنفيذ شيفرة Python سطرًا بسطر بمجرد أن تكتبها. عندما تكتب سطرًا من الشيفرة وتضغط Enter، ينفّذ المفسر الشيفرة فورًا ويعرض عليك النتائج:

4_1_3.png

أي شيفرة Python يمكن كتابتها في ملف يمكن كتابتها أيضًا في المفسر. بل يمكنك حتى إسناد قيم إلى المتغيّرات وتعريف التوابع:

>>> t = [1,2,3,4,5]
>>> for number in t:
...   print(number)
...
1
2
3
4
5
>>> def absolute_value(number):
...   if number<0:
...      number = -number
...   return number
...
>>> x = 10
>>> y = -7
>>> absolute_value(number)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'number' is not defined
>>> absolute_value(x)
10
>>> absolute_value(y)
7
>>>

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

>>> "TextYteXt".toupper()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'toupper'
>>> "TextYteXt".upper()
'TEXTYTEXT'
>>>

إذا وُجد تابع تحتاجه، وتستطيع أن تتذكّره تقريبًا، فمن الأسرع أحيانًا أن تتجاوز Google وتستخدم دالة dir في المفسر. إنها تخبرك بالتوابع المتاحة للاستخدام على كائن معين:

>>> dir("this is a string")
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__',
'__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__',
'__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__',
'__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__',
'__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__',
'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find',
'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit',
'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join',
'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust','rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase',
'title', 'translate', 'upper', 'zfill']

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

قوائم Python لا تحتوي على هذا العدد الكبير من التوابع:

>>> dir([])
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__',
'__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__',
'__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__',
'__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__',
'__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__',
'__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop',
'remove', 'reverse', 'sort']
>>>

لنجرّب بعضها، يبدو reverse وclear واعدين:

>>> numbers = [1,2,3,4,5]
>>> numbers.reverse()
>>> numbers
[5, 4, 3, 2, 1]
>>> numbers.clear()
>>> numbers
[]

كما ترى، هذه التوابع تؤدي تقريبًا ما تتوقعه من أسمائها.

لاحظ كيف أن المفسر لا يطبع أي شيء عند تنفيذ الأمر numbers.reverse(). والسبب هو أن المفسر لا يطبع شيئًا إلا إذا كان سطر الشيفرة يحتوي على قيمة. أما التابع reverse() هنا فلا يُرجع أي قيمة.

في المثال أعلاه طبَعنا قيمة القائمة numbers بكتابة اسم المتغيّر فقط. في الواقع، نادرًا ما يكون ضروريًا كتابة أوامر print صراحةً في المفسر. لكن يمكنك تضمينها إن أردت.

تذكّر أن تُغلق المفسر عند انتهائك. إن الأمران quit() وexit() يُغلقانه، وكذلك الضغط على المفتاحين Control+D (Linux/Mac) أو Control+Z (Windows). هذا مهم خاصةً في Visual Studio Code، إذ إن محاولة تنفيذ برنامج Python آخر بينما المفسر ما زال يعمل تؤدي إلى رسالة خطأ غامضة إلى حد ما:

4_1_4.png

أداة التنقيح المدمجة

لقد أمضينا وقتًا وجهدًا لا بأس بهما في تطوير مهارات التنقيح، بشكل أساسي بواسطة التنقيح باستخدام عبارات الطباعة. لكن محرر Visual Studio Code يضع بين يديك أداة أخرى: وهي منقّح مرئي مدمج.

للبدء في التنقيح، عليك أولًا أن تعرّف نقطة توقف في شيفرتك. نقطة التوقف هي موضع في برنامجك يتوقف فيه المنقّح عن التنفيذ. يمكنك تعيين نقطة توقف بالنقر على الحافة اليسرى لأي سطر في برنامجك.

المثال التالي هو محاولة فيها بعض العيوب في حل التمرين مجموع الأعداد المتتالية في الجزء السابق. هناك نقطة توقف في السطر 5:

4_1_5.png

بعد تعيين نقطة التوقف، اختر Start debugging من قائمة Run. سيُفتح ذلك قائمة من الخيارات، حيث يجب أن تختار Python File:

4_1_6.png

هذا يشغّل المنقّح، الذي ينفّذ شيفرتك كالمعتاد حتى يصل التنفيذ إلى نقطة توقف ويتوقف. إذا طلبت شيفرتك إدخالًا، فتذكّر أن تكتبه في الطرفية:

4_1_7.png

توجد على اليسار الآن طريقة عرض Variables، التي تحتوي على القيم الحالية لكل المتغيّرات النشطة في الشيفرة. يمكنك متابعة التنفيذ سطرًا بسطر بالنقر على السهم المتجه إلى الأسفل، الذي يحمل الاسم Step into.

في الصورة أدناه، تكون الحلقة في الشيفرة قد تكررت عدة مرات بالفعل:

4_1_8.png

يحتوي المنقّح على تبويب Debug console، الذي يتيح لك تقييم التعابير بالقيم الحالية المخزّنة في المتغيّرات. مثلًا، يمكنك التحقق من قيمة التعبير المنطقي في شرط الحلقة:

4_1_9.png

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

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