تعلم لغة Python الفصل 4 : العمل مع القوائم (WORKING WITH LISTS ) الجزء 2 والأخير

sparrow
0

 



الفصل : 4

الجزء : 2

العنوان : العمل مع القوائم (WORKING WITH LISTS)





العمل مع جزء من قائمة (Working with Part of a List )


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


تقسيم قائمة (Slicing a List)


لعمل slice، تحدد الفهرس (index) لأول وآخر عنصرين تريد العمل معهما. كما هو الحال مع دالة range()، يتوقف Python عنصرًا واحدًا قبل الفهرس الثاني الذي تحدده. لإخراج العناصر الثلاثة الأولى في قائمة، ستطلب الفهارس من 0 إلى 3، مما سيعيد العناصر 0، 1، و2.


هذا الكود يطبع slice من القائمة. الناتج يحتفظ ببنية القائمة، ويشمل أول ثلاثة لاعبين في القائمة:


يمكنك توليد أي مجموعة فرعية من القائمة. على سبيل المثال، إذا كنت تريد العناصر الثانية والثالثة والرابعة في قائمة، ستبدأ slice عند الفهرس 1 وتنتهي عند الفهرس 4:


هذه المرة، يبدأ slice بـ 'martina' وينتهي بـ 'florence':



إذا قمت بإغفال الفهرس الأول في slice، فإن Python يبدأ slice تلقائيًا من بداية القائمة:


بدون فهرس البداية، يبدأ Python من بداية القائمة:



يمكن استخدام صيغة مشابهة إذا كنت تريد slice يشمل نهاية القائمة. على سبيل المثال، إذا كنت تريد جميع العناصر من العنصر الثالث حتى آخر عنصر، يمكنك البدء من الفهرس 2 وإغفال الفهرس الثاني:


يعيد Python جميع العناصر من العنصر الثالث حتى نهاية القائمة:


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


هذا يطبع أسماء آخر ثلاثة لاعبين وسيستمر في العمل مع تغيّر حجم قائمة اللاعبين.


ملحوظة

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

 


التكرار عبر Slice


يمكنك استخدام slice في for loop إذا كنت تريد التكرار عبر مجموعة فرعية من العناصر في قائمة. في المثال التالي، نكرر عبر أول ثلاثة لاعبين ونطبع أسمائهم كجزء من قائمة بسيطة:


بدلاً من التكرار عبر القائمة الكاملة للاعبين، يكرر Python فقط عبر الأسماء الثلاثة الأولى:


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


نسخ قائمة (Copying a List)


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


لنسخ قائمة، يمكنك عمل slice يشمل القائمة الأصلية بأكملها عن طريق إغفال الفهرس الأول والثاني ([:]). هذا يخبر Python بعمل slice يبدأ من العنصر الأول وينتهي بالعنصر الأخير، منتجًا نسخة من القائمة الكاملة.


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


أولاً، نقوم بإنشاء قائمة بالأطعمة التي نحبها تسمى my_foods. ثم نقوم بإنشاء قائمة جديدة تسمى friend_foods. نقوم بعمل نسخة من my_foods عن طريق طلب slice من my_foods دون تحديد أي فهارس، ونعين النسخة إلى friend_foods. عندما نطبع كل قائمة، نرى أنهما تحتويان على نفس الأطعمة:


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


my_foods = ['pizza', 'falafel', 'carrot cake']

friend_foods = my_foods[:]

my_foods.append('cannoli')

friend_foods.append('ice cream')

print("My favorite foods are:")

print(my_foods)

print("\nMy friend's favorite foods are:")

print(friend_foods)


ننسخ العناصر الأصلية في my_foods إلى القائمة الجديدة friend_foods، كما فعلنا في المثال السابق. بعد ذلك، نضيف طعامًا جديدًا إلى كل قائمة: نضيف 'cannoli' إلى my_foods، ونضيف 'ice cream' إلى friend_foods. ثم نطبع القائمتين لنرى ما إذا كان كل من هذه الأطعمة في القائمة المناسبة:



يظهر الإخراج أن 'cannoli' يظهر الآن في قائمة أطعمتنا المفضلة لكن 'ice cream' لا يظهر. نرى أن 'ice cream' يظهر الآن في قائمة صديقنا لكن 'cannoli' لا يظهر. إذا قمنا ببساطة بتعيين friend_foods تساوي my_foods، فلن ننتج قائمتين منفصلتين. على سبيل المثال، إليك ما يحدث عندما تحاول نسخ قائمة بدون استخدام slice:


بدلاً من تعيين نسخة من my_foods إلى friend_foods، قمنا بتعيين friend_foods تساوي my_foods. هذه الصيغة تخبر Python فعليًا بربط المتغير الجديد friend_foods بالقائمة المرتبطة بالفعل بـ my_foods، لذا الآن كلا المتغيرين يشيران إلى نفس القائمة. كنتيجة، عندما نضيف 'cannoli' إلى my_foods، سيظهر أيضًا في friend_foods. وبالمثل، سيظهر 'ice cream' في كلتا القائمتين، حتى وإن بدا أنه أُضيف فقط إلى friend_foods.


يظهر الإخراج أن كلتا القائمتين متطابقتان الآن، وهو ليس ما كنا نريده:


ملحوظة

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

 


جربها بنفسك


تمرين 4-10. Slices:

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

اطبع الرسالة "The first three items in the list are:". ثم استخدم slice لطباعة العناصر الثلاثة الأولى من قائمة البرنامج.

اطبع الرسالة "Three items from the middle of the list are:". ثم استخدم slice لطباعة ثلاثة عناصر من وسط القائمة.

اطبع الرسالة "The last three items in the list are:". ثم استخدم slice لطباعة العناصر الثلاثة الأخيرة من القائمة.


تمرين 4-11. My Pizzas, Your Pizzas:

ابدأ ببرنامجك من التمرين 4-1 (من ال part 1 ) .

قم بعمل نسخة من قائمة البيتزا، وسمها friend_pizzas. ثم، قم بالتالي:

أضف بيتزا جديدة إلى القائمة الأصلية.

أضف بيتزا مختلفة إلى القائمة friend_pizzas.

أثبت أنك تملك قائمتين منفصلتين. اطبع الرسالة "My favorite pizzas are:"، ثم استخدم for loop لطباعة القائمة الأولى. اطبع الرسالة "My friend’s favorite pizzas are:"، ثم استخدم for loop لطباعة القائمة الثانية. تأكد من أن كل بيتزا جديدة مخزنة في القائمة المناسبة.


تمرين 4-12. More Loops:

كل نسخ foods.py في هذا القسم تجنبت استخدام for loops عند الطباعة، لتوفير المساحة. اختر نسخة من foods.py، واكتب for loops لطباعة كل قائمة من الأطعمة.

 


ال Tuples


القوائم تعمل بشكل جيد لتخزين مجموعات من العناصر التي يمكن تغييرها خلال حياة البرنامج. القدرة على تعديل القوائم مهمة بشكل خاص عندما تعمل مع قائمة مستخدمين على موقع ويب أو قائمة شخصيات في لعبة. ومع ذلك، أحيانًا سترغب في إنشاء قائمة من العناصر التي لا يمكن تغييرها. Tuples تسمح لك بفعل ذلك. Python تشير إلى القيم التي لا يمكن تغييرها بأنها immutable، والقائمة التي لا يمكن تغييرها تسمى tuple.


تعريف Tuple


الـ tuple يشبه القائمة، باستثناء أنك تستخدم الأقواس بدلاً من الأقواس المربعة. بمجرد تعريف tuple، يمكنك الوصول إلى العناصر الفردية باستخدام فهرس كل عنصر، تمامًا كما تفعل مع قائمة.


على سبيل المثال، إذا كان لدينا مستطيل يجب أن يكون دائمًا بحجم معين، يمكننا التأكد من أن حجمه لا يتغير بوضع الأبعاد في tuple:


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


لنرى ماذا يحدث إذا حاولنا تغيير أحد العناصر في الـ tuple dimensions:


هذا الكود يحاول تغيير قيمة البعد الأول، لكن Python يعيد خطأ نوعي. لأننا نحاول تعديل tuple، وهذا لا يمكن القيام به لهذا النوع من الكائنات، Python يخبرنا بأنه لا يمكننا تعيين قيمة جديدة لعنصر في tuple:


هذا مفيد لأننا نريد أن يعيد Python خطأً عندما تحاول سطر كود تغيير أبعاد المستطيل.


ملحوظة

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


my_t = (3,)

 


ليس من المنطقي غالبًا بناء tuple بعنصر واحد، لكن هذا يمكن أن يحدث عندما يتم توليد tuples تلقائيًا.


التكرار عبر جميع القيم في Tuple


يمكنك التكرار عبر جميع القيم في tuple باستخدام for loop، تمامًا كما فعلت مع قائمة:


يعيد Python كل العناصر في الـ tuple، تمامًا كما يفعل مع قائمة:



الكتابة فوق Tuple


بالرغم من أنك لا تستطيع تعديل tuple، يمكنك تعيين قيمة جديدة لمتغير يمثل tuple. على سبيل المثال، إذا أردنا تغيير أبعاد هذا المستطيل، يمكننا إعادة تعريف الـ tuple بالكامل:




dimensions = (200, 50)

print("Original dimensions:")

for dimension in dimensions:

print(dimension)


dimensions = (400, 100)

print("\nModified dimensions:")

for dimension in dimensions:

print(dimension)


الأربع الأسطر الأولى تعرف الـ tuple الأصلي وتطبع الأبعاد الأصلية. ثم نربط tuple جديد مع المتغير dimensions، ونطبع القيم الجديدة. Python لا يعيد أي أخطاء هذه المرة، لأن إعادة تعيين متغير صالحة:


عند المقارنة مع القوائم، تكون tuples هياكل بيانات بسيطة. استخدمها عندما تريد تخزين مجموعة من القيم التي لا يجب تغييرها طوال حياة البرنامج.



جربها بنفسك


تمرين 4-13. Buffet:

مطعم بأسلوب buffet يقدم خمسة أطعمة أساسية فقط. فكر في خمسة أطعمة بسيطة، وخزنها في tuple.

استخدم for loop لطباعة كل طعام يقدمه المطعم.

حاول تعديل أحد العناصر، وتأكد من أن Python يرفض التغيير.

يقوم المطعم بتغيير قائمة الطعام، ويستبدل اثنين من العناصر بأطعمة مختلفة. أضف سطرًا يعيد كتابة الـ tuple، ثم استخدم for loop لطباعة كل عنصر في قائمة الطعام المعدلة.

 


تنسيق الكود الخاص بك


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


دليل الأسلوب


عندما يريد شخص ما إجراء تغيير في لغة Python، فإنه يكتب Python Enhancement Proposal (PEP). واحدة من أقدم PEPs هي PEP 8، التي توجه مبرمجي Python حول كيفية تنسيق الكود الخاص بهم. PEP 8 طويلة إلى حد ما، ولكن الكثير منها يتعلق بهياكل الترميز الأكثر تعقيدًا مما رأيته حتى الآن.


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


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



التنسيق (Indentation)


يوصي PEP 8 بأن تستخدم أربعة مسافات لكل مستوى من التضمين. استخدام أربعة مسافات يحسن القراءة مع ترك مساحة لمستويات متعددة من التضمين في كل سطر.

في مستند معالجة النصوص، غالبًا ما يستخدم الناس tabs بدلاً من المسافات للتضمين. هذا يعمل جيدًا في مستندات معالجة النصوص، لكن مفسر Python يتشوش عندما يتم خلط tabs مع المسافات. كل محرر نصوص يوفر إعدادًا يتيح لك استخدام مفتاح TAB ولكنه يحول كل tab إلى عدد محدد من المسافات. يجب عليك بالتأكيد استخدام مفتاح TAB، ولكن تأكد أيضًا من إعداد المحرر الخاص بك لإدراج مسافات بدلاً من tabs في المستند الخاص بك.


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


طول السطر


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


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


إرشادات PEP 8 لطول السطر ليست صارمة، وبعض الفرق تفضل حد 99 حرفًا. لا تقلق كثيرًا بشأن طول السطر في الكود الخاص بك أثناء التعلم، ولكن كن على علم بأن الأشخاص الذين يعملون بشكل تعاوني يتبعون تقريبًا دائمًا إرشادات PEP 8. معظم المحررات تتيح لك إعداد مؤشر بصري، عادةً خط عمودي على شاشتك، يوضح لك أين تقع هذه الحدود.


الأسطر الفارغة


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


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


إرشادات نمطية أخرى


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


جربها بنفسك


تمرين 4-14. PEP 8:

تصفح دليل PEP 8 الأصلي على [هذا الرابط](https://python.org/dev/peps/pep-0008). لن تستخدم الكثير منه الآن، ولكن قد يكون من المثير للاهتمام أن تتصفحه.


تمرين 4-15. مراجعة الكود:

اختر ثلاثة من البرامج التي كتبتها في هذا الفصل وعدل كل منها لتتوافق مع PEP 8.

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

استخدم أقل من 80 حرفًا في كل سطر، وقم بإعداد المحرر الخاص بك لعرض مؤشر عمودي عند موضع الحرف 80.

لا تستخدم الأسطر الفارغة بشكل مفرط في ملفات برنامجك.


 


الملخص


في هذا الفصل، تعلمت كيفية العمل بكفاءة مع العناصر في قائمة. تعلمت كيفية العمل من خلال قائمة باستخدام for loop، وكيف يستخدم Python التضمين لبنية البرنامج، وكيفية تجنب بعض أخطاء التضمين الشائعة. تعلمت كيفية عمل قوائم عددية بسيطة، وكذلك بعض العمليات التي يمكن إجراؤها على القوائم العددية. تعلمت كيفية استخدام slice للعمل مع مجموعة فرعية من العناصر وكيفية نسخ القوائم بشكل صحيح باستخدام slice. كما تعلمت عن tuples، التي توفر درجة من الحماية لمجموعة من القيم التي لا يجب أن تتغير، وكيفية تنسيق الكود الخاص بك الذي يزداد تعقيدًا لجعله سهل القراءة.


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


النهاية


نكون هنا انتهينا من الفصل 4 من منهج تعلم Python من كتاب python crash course بالعربية 


واذا واجهتك اي مشكلة في الفهم او ما شابه , يمكنك على الفور الذهاب الى المجتمع الخاص بنا في Telegram للمناقشة والتواصل معنا من هنا  


او اذا واجهتك مشكلة في الموقع او تريد اجابة سريعة يمكنك الذهاب الى اخر صفحة في الموقع ستجد صفحة اتصل بنا موجودة يمكنك ارسالة لنا مشكلتك , وسيتم الرد عليها بسرعة جدا ان شاء الله 


ويمكنك الأنضمام الى المجتمع Hidden Lock بالكامل مع جميع قنواته للأستفادة في اخر الأخبار في عالم التقنية وايضا الكتب بالمجان والكورسات والمقالات من خلال الرابط التالي لمجموعة القنوات من     هنا 


يمكنك ايضا متابعتنا في منصات X او Twitter سابقا , لمشاهدة الاخبار والمقالات السريعة والمهمة من  

هنا


وفقط كان معكم sparrow مقدم هذه الشهادة من فريق Hidden Lock 

Tags

إرسال تعليق

0تعليقات

إرسال تعليق (0)

#buttons=(موافق!) #days=(20)

يستخدم موقعنا ملفات تعريف الارتباط لتحسين تجربتك. تاكد الان
Ok, Go it!