بعد أن تعرّفنا في الدّرس السّابق على طريقة التّعامل مع البيانات مثل المُتغيّرات وأنواعها كالأرقام وإسناد القيم، سنكمل في هذا الدّرس الثّالث مشوار تعلّم هذه اللغة بتعلّم كيفيّة التّعامل مع كل من القوائم والسّلاسل النّصيّة.
تذكير: الشيفرات التّي تكون مسبوقة بعلامة "<<<" يجب أن تُنفّذ على مُفسّر بايثون.
القوائم
تعتبر القوائم طريقة رائعة للتّعامل مع البيانات في لغة بايثون، وتتعلّق القائمة بمتغيّر معيّن بحيث يحمل أكثر من قيمة، ويمكن الوصول إلى هذه القيم باستعمال رقم كل قيمة.
لتفهم أكثر، اعتبر أنّ لك 5 أبناء، بحيث تكون قائمة الأبناء:
- 0، عمر
- 1، خالد
- 2، حسن
- 3، زيد
- 4، يوسف
في بايثون، ننشئ القائمة بالطّريقة التاليّة:
>>> children = ['Omar','Khaled','Hassan','Zaid','Youssef']
لنسمّي القائمة أعلاه باسم children، وتحتوي على خمس عناصر، ولكل عنصر رقم خاص به، بحيث يبدأ العدّ من الصّفر، فمثلا إذا أردنا مناداة الابن "عمر" فسيتوجّب علينا مناداته برقمه (أي الرقم 0)، وطريقة مناداة باقي الأبناء تكون بالشّكل التّالي:
>>> print 'Come here ' + children[0] Come here Omar >>> print 'Come here ' + children[1] Come here Khaled >>> print 'Come here ' + children[2] Come here Hassan >>> print 'Come here ' + children[3] Come here Zaid >>> print 'Come here ' + children[4] Come here Youssef
الآن، لننتقل إلى تطبيق مبادئ القوائم على بايثون، يُمكننا إسناد قائمة إلى متغيّر كالتّالي:
>>> x = [1, 2, 3]
ويُمكنك إنشاء قائمة سلاسل نصيّة عوضا عن الأرقام:
>>> x = ["hello", "world"]
يُمكن أن تجمع بين أنواع القيّم المُختلفة، هذا المثال يجمع بين الأرقام والسّلاسل النّصيّة:
>>> x = [1, 2, "hello, "world"]
ويُمكن أن تحتوي القائمة على قائمة أخرى:
>>> x = [1, 2, "hello, "world", ["another", "list"]]
أو بالطّريقة التّاليّة:
>>> a = [1, 2] >>> b = [1.5, 2, a] >>> b [1.5, 2, [1, 2]]
يُمكن أن نستخدم الدّالة len المعرّفة مُسبقا لنقيس طول قائمة ما (عدد مكونات القائمة):
>>> x = [1, 2, 3] >>> len(x) 3
نصل إلى عناصر قائمة ما بكتابة اسم المُتغيّر الذي يحمل القائمة، ثمّ رقم العنصر بين رمزي []:
>>> x = [1, 2, 3] >>> x[1] 2 >>> x[1] = 4 >>> x[1] 4
مع ملاحظة أنّ التّرقيم يبدأ بالصّفر، بحيث يكون العنصر الأوّل من القائمة يحمل الرّقم 0 والعنصر الثّاني يحمل رقم 1 وهكذا دواليك.
يُمكن إنشاء قائمة تحتوي على أعداد صحيحة من مجال معيّن بالدّالة Range، في المثال التّالي قُمنا بإنشاء قائمة تحتوي على أربعة عناصر من 0 إلى 3، ثمّ قائمة تحتوي على ثلاثة عناصر بين العددين 3 و 6، ثمّ في السّطر الأخير قُمنا بإنشاء قائمة مُتكوّنة من 3 عناصر بين العددين 2 و 10 مع زيادة بقيمة 3 :
>>> range(4) [0, 1, 2, 3] >>> range(3, 6) [3, 4, 5] >>> range(2, 10, 3) [2, 5, 8]
يُمكن كذلك استخدام الدّالة len لحساب عدد عناصر قائمة ما:
>>> a = [1, 2, 3, 4] >>> len(a) 4
كما يُمكنك التّعامل مع القوائم بالرموز الرّياضيّة * و + لتكرار أو الجمع بين عناصر قائمة ما:
>>> a = [1, 2, 3] >>> b = [4, 5] >>> a + b [1, 2, 3, 4, 5] >>> b * 3 [4, 5, 4, 5, 4, 5]
للوصول إلى عناصر قائمة مُعيّنة نستعين برقم العنصر، مع ملاحظة بأنّ التّرقيم يبدأ من الصّفر إلى ( عدد العناصر-1 ).
>>> x = [1, 2] >>> x[0] 1 >>> x[1] 2
إذا استخدمت فهرسا (ترقيما) خاطئا، فسيُرجِع مفسّر بايثون خطأ:
>>> x = [1, 2, 3, 4] >>> x[6] Traceback (most recent call last): File "<stdin>", line 1, in ? IndexError: list index out of range
يُمكنك كذلك استخدام التّرقيم السّلبي للوصول إلى عناصر القائمة من الآخر إلى الأول ( آخر عنصر يحمل القيمة -1 والعنصر الأول يحمل الرقم السّلبي لعدد العناصر):
>>> x = [1, 2, 3, 4] >>> x[-1] 4 >>> x[-2] 3 >>> x[-4] 1
يُمكننا تشريح قائمة (تقسيمها إلى أجزاء)، بالطّريقة التّاليّة:
>>> x = [1, 2, 3, 4] >>> x[0:2] [1, 2] >>> x[1:4] [2, 3, 4]
ويمكن استخدام الأرقام السلبيّة في التّقسيم كذلك:
>>> x[0:-1] [1, 2, 3]
إذا تركت مكان الرقم الأول فارغا، فالقيمة الافتراضيّة هي الصّفر، و القيمة الافتراضيّة للشّطر الثاني تكون عدد عناصر القائمة:
>>> x = [1, 2, 3, 4] >>> a[:2] [1, 2] >>> a[2:] [3, 4] >>> a[:] [1, 2, 3, 4]
يُمكن استخدام رقم ثالث لتحديد الخطوة (يعني المقدار الذي نضيفه في العنصر الحالي مقارنة بالعنصر السّابق)، والذي يكون الرّقم واحد افتراضيّا:
>>> x = range(10) >>> x [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> x[0:6:2] [0, 2, 4]
يُمكننا عكس عناصر القائمة بتحديد -1 كقيمة للزيّادة بالشّكل التّالي:
>>> x = range(10) >>> x [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> x[::-1] [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
يُمكن كذلك تغيير قيم عناصر القائمة بتعيين قيمة أخرى:
>>> x = [1, 2, 3, 4] >>> x[1] = 5 >>> x [1, 5, 3, 4]
يُمكن استعمال العامل in للتحقق من تواجد عنصر في القائمة، فإن أرجع القيمة True فهذا يعني أن القيمة موجودة، أما إن أرجع False فهذا يعني بأنّ القيمة غير موجودة في القائمة:
>>> x = [1, 2, 3, 4] >>> 2 in x True >>> 10 in x False
يُمكن إضافة قيم أخرى إلى قائمة بدالّة الإلحاق append، في المثال التّالي نلحق (نضيف) القيمة 3 إلى القائمة a:
>>> a = [1, 2] >>> a.append(3) >>> a [1, 2, 3]
السلاسل النصية
السّلاسل النّصيّة أو Strings هي التّقنيّة المُستخدمة لكتابة النّصوص في بايثون، وهي سلاسل من الحروف (والتّي بدورها تُشكل جملا فنصوصا)، فمثلا الكلمة "مرحبا" عبارة عن سلسلة نصيّة تحتوي على 5 عناصر، ويمكن الوصول إلى كلّ عنصر كالآتي:
- العنصر رقم 0 => م
- العنصر رقم 1 => ر
- العنصر رقم 2 => ح
- العنصر رقم 3 => ب
- العنصر رقم 4 => ا
مع ملاحظة أنّ المسافات تُحسَبُ كذلك في السّلاسل النّصيّة فمثلا السّلسلة "مرحبا " تحتوي على 6 عناصر (لاحظ المسافة بعد الألف).
وتكون السلاسل النّصية ضمن علامتي تنصيص مزدوجتين "" أو علامتي تنصيص مُفردتين ''.
>>> x = "hello" >>> y = 'world' >>> print x, y hello world
مع ملاحظة أنّ هناك فرقا بين علامات التّنصيص المزدوجة والمنفردة، ويُمكن استعمالهما بشكل تبادلي.
أمّا السّلاسل النّصيّة التي تحتوي على أكثر من سطر، فيُمكن تعيينها لمُتغيّر باستعمال ثلاثة رموز إمّا ''' أو """، انظر المثال التّالي (لكي يعمل بشكل جيّد، من المُفضّل وضعه في ملفّ باسم example1.py وتنفيذه بالأمر python example1.py):
x = """This is a multi-line string written in three lines.""" print x y = '''multi-line strings can be written using three single quote characters as well. The string can contain 'single quotes' or "double quotes" ''' print y
في المثال أعلاه قمنا بتعيين سلسلة من ثلاثة أسطر للمُتغيّر x بحيثُ يكون المُخرج عند طباعة المُتغيّر x:
This is a multi-line string written in three lines.
يُمكن كذلك إنشاء سلسلة نصيّة متعدّدة الأسطر بإضافة \n إلى نهاية كلّ سطر، انظر المثال:
>>> x = 'This is a multi-line string\nwritten in\nthree lines.' >>> print x
مُخرجات المثال أعلاه:
This is a multi-line string written in three lines.
يُمكن الاستعانة بدّالة المُعرّفة مُسبقا في بايثون لقيّاس عدد أحرف سلسلة نصّية، وهذه الدّالة تُدعى len ويُمكن استخدامها على النّحو التّالي:
>>> len("Abdelhadi") 9
السّلاسل النّصيّة في بايثون تتصرّف تماما كالقوائم، بحيث تكون السّلسلة بمثابة قائمة تحتوي على عدّة أحرف، ويمكن فهرسة (الوصول إلى عناصر السّلسلة) وتقطيع السّلاسل النّصيّة بتتبع نفس مبدأ القوائم، انظر المثال:
>>> a = "helloworld" >>> a[1] 'e' >>> a[-2] 'l' >>> a[1:5] "ello" >>> a[:5] "hello" >>> a[5:] "world" >>> a[-2:] 'ld' >>> a[:-2] 'hellowor' >>> a[::-1] 'dlrowolleh'
يُمكن استعمال العامل in للتحقق فيما إذا كانت السّلسلة النّصيّة جزءا من سلسلة أخرى، في المثال التّالي نقوم بالتحقق من أنّ كلّا من hell و full و el ضمن hello:
>>> 'hell' in 'hello' True >>> 'full' in 'hello' False >>> 'el' in 'hello' True
عندما يكون المخرج True (صحيح) فهذا يعني بأنّ السّلسلة الصغيرة جزء من السّلسلة النّصيّة الكبيرة.
هناك العديد من العمليّات التّي يُمكن تطبيقها على السّلاسل النّصيّة، وسنتعرّف على بعض منها فيما يلي من الأسطر:
- split: فصل سلسلة نصّية إلى أجزاء يفصل بينها أي رمز (شرط أن يكون في السّلسلة) نقوم بتمريره إلى هذه الدّالة، إذا لم تُحدّد أي فاصل فاستعمل split على فصل السّلسلة النّصيّة اعتمادا على مسافة بيضاء (أي تقسيم الجملة إلى كلمات)، لتفهم أكثر ما الذي أقصده تمعّن في المثال التّالي فبه سيتّضح المقال:
>>> "hello world".split() ['hello', 'world'] >>> "a,b,c".split(',') ['a', 'b', 'c']
- join: هذه الدّالة تعكس مفعول split حيث تجمع بين عناصر القائمة وترجعها سلسلة نصّية:
>>> " ".join(['hello', 'world']) 'hello world' >>> ','.join(['a', 'b', 'c']) 'a,b,c'
- strip: تقوم بإرجاع سلسلة نصية مع حذف المسافات الزائدة.
>>> ' hello world\n'.strip() 'hello world'
في المثال أعلاه، يدّل الرّمز \n على "سطر جديد" بحيث يطبع السّطر التّالي سطرين الأول hello والثّاني world:
>>> print 'hello\nworld' hello world
يُمكن كذلك تمرير قيمة نصيّة لـstrip بحيث تُرجع الدّالة سلسلة نصيّة بدون القيمة المُمَرّرَةِ، لاحظ بأنّها تحذف فقط العناصر الموجودة في بداية وآخر السّلسلة، انظر المثال (لاحظ بأنّ d لم تُحذف، وذلك لأنّها وسط السّلسلة):
>>> 'abcdefgh'.strip('abdh') 'cdefg'
- replace: تقوم باستبدال جزء من السّلسلة أو كامل السّلسلة بقيمة أخرى:
>>> 'Hsoub Academy'.replace('Academy', 'I/O') 'Hsoub I/O'
تمارين
تمرين 1
ما مُخرجات البرنامج التّالي (اُكتبه في ملفّ باسم exercise1.py ثمّ قم بتنفيذه بالأمر python exercise1.py):
x = [0, 1, [2]] x[2][0] = 3 print x x[2].append(4) print x x[2] = 2 print x
تمرين 2
كم عدد عناصر القائمة x في المثال التّالي (لا تقم بالأمر يدويّا، بل استعن بما تعلّمته):
x = [1, 2, "hello, "world", ”Hi”, 4, 8, 3, 0, “Abdelhadi”, “Hsoub Academy”]
تمرين 3
أزل القيمة "bad" من السّلسلة التاليّة:
>>> 'python is awesome bad'
ترجمة -وبتصرف- للكتاب Python Practice Book لصاحبه Anand Chitipothu.
أفضل التعليقات
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.