الدرس الرابع القوائم Lists

استعرض الموضوع السابق استعرض الموضوع التالي اذهب الى الأسفل

الدرس الرابع القوائم Lists

مُساهمة من طرف Admin في الخميس فبراير 18, 2016 11:41 am

الدرس الرابع القوائم Lists
سوف تحتاج إلى فهم موضوع آخر قبل أن تتمكن من البدء في كتابة البرامج بشكل جدي ، هذا الموضوع هو البيانات من نوع القائمة lists وابن عمه ، الصفوف (tuple) . القوائم والصفوف يمكن أن تحتوي على قيم متعددة ، مما يجعل من الاسهل كتابة البرامج التي تتعامل مع كميات كبيرة من البيانات. وحيث أن القوائم نفسها يمكن أن تحتوي على قوائم أخرى، يمكنك استخدامها لترتيب البيانات في الهياكل الهرمية .
في هذا الدرس ، سوف نناقش أساسيات القوائم. وسوف نتعرف أيضا عن الأساليب methods ، التي هي دوال مرتبطة إلى قيم من نوع بيانات معين .
وسوف نقوم بتغطية ، وبشكل موجز ، أنواع بيانات الصفوف (tuple) التى تشبه القائمة و السلسلة . وكيفية مقارنتها بقيم القوائم . في الدرس القادم سوف نتعرض لنوع بيانات "القاموس" dictionary .

البيانات نوع "القائمة" List
"القائمة" list هي القيمة التي تحتوي على قيم متعددة في ترتيب متسلسل . مصطلح "قيمة القائمة" list value يشير القائمة نفسها (وهي القيمة التي يمكن تخزينها في متغير أو تمريرها إلى دالة مثل أي قيمة أخرى)، وليست القيم داخل قيمة القائمة . قيمة القائمة تكون بالشكل التالى : 'cat', 'bat', 'rat', 'elephant'] ].
تماما كما يتم كتابة قيم السلسلة مع أحرف الاقتباس كعلامة إلى أين تبدأ وأين تنتهى السلسلة ، تبدأ القائمة بقوس الافتتاح مربع وتنتهي بقوس إغلاق مربع ، [] . تسمى القيم داخل القائمة أيضا "العناصر" items . يتم فصل العناصر بفواصل (أي أنها محدودة بفواصل).
مثال : أدخل ما يلي في وعاء البيئة التفاعلية:



المتغير spam (1) لا تزال يخصص له قيمة واحدة فقط هى : قيمة القائمة list value . ولكن قيمة القائمة نفسها تحتوي على قيم أخرى. القيمة [] هي قائمة فارغة والتي لا تحتوي على قيم ، على غرار السلسلة الفارغة ''.

الحصول على القيم الفردية في قائمة بالرقم المسلسل(الفهرس) Indexes :

Admin
Admin

عدد المساهمات : 935
تاريخ التسجيل : 28/01/2014

معاينة صفحة البيانات الشخصي للعضو http://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: الدرس الرابع القوائم Lists

مُساهمة من طرف Admin في الخميس فبراير 18, 2016 11:48 am

الحصول على القيم الفردية في قائمة بالرقم المسلسل(الفهرس) Indexes :
لنفرض أن لديك القائمة ['cat', 'bat', 'rat', 'elephant'] مخزنة في متغير اسمه spam . عندئذ يكون تقييم كود البايثون spam[0] بالقيمة 'cat' ، وتقييم spam[1] بالقيمة bat' ، وهلم جرا.
يطلق على العدد الصحيح داخل الأقواس المربعة الذي يلي القائمة "الفهرس" index . القيمة الأولى في القائمة تكون عند الفهرس 0، القيمة الثانية تكون عند الفهرس 1، والقيمة الثالثة تكون عند الفهرس 2، وهلم جرا . ويبين الشكل التالى قيمة القائمة المخصصة للقائمة spam ، جنبا إلى جنب مع بيان كل قيمة و الفهرس المقابل .



مثال : اكتب التعبيرات التالية فى البيئة التفاعلية :



لاحظ أن التعبير 'Hello ' + spam[0] (1) يقيم إلى 'Hello ' + 'cat' because spam[0] ومن ثم يقيم إلى السلسلة 'cat' . وهذا التعبير بدوره يقيم إلى قيمة السلسلة 'Hello cat' (2) .

مفسر البايثون سوف يعطيك رسالة خطأ "فهرس خطأ" IndexError إذا استخدمت فهرس يزيد عن عدد القيم فى قيمة القائمة .



الفهارس indexes يمكن أن تكون فقط قيم أعداد صحيحة . فيما يلى مثال سوف يسبب الخطأ TypeError :




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



الفهرس الأول يشير إلى قيمة القائمة المستخدمة ، والفهرس الثانى يشير إلى القيمة ضمن قيمة القائمة. على سبيل المثال ، spam[0][1] prints 'bat' هى القيمة الثانية 1 في القائمة الأولى 0. إذا لم تستخدم سوى فهرس واحد، فإن البرنامج يطبع قيمةالقائمة الكاملة عند ذلك الفهرس .

الفهارس السالبة Negative Indexes :

Admin
Admin

عدد المساهمات : 935
تاريخ التسجيل : 28/01/2014

معاينة صفحة البيانات الشخصي للعضو http://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: الدرس الرابع القوائم Lists

مُساهمة من طرف Admin في الخميس فبراير 18, 2016 11:53 am

الفهارس السالبة Negative Indexes :
فى حين تبدأ الفهارس من عند الصفر وتصاعديا ، يمكنك أيضا استخدام الأعداد الصحيحة السالبة للفهرس . القيمة (-1) تشير إلى الفهرس الأخير فى القائمة ، والقيمة (-2) تشير إلى الفهرس الثانى من النهاية ، وهلم جرا .
مثال : أدخل ما يلى فى البيئة التفاعلية ولاحظ النتائج :



الحصول على القوائم الفرعية بالشرائح Getting Sublists with Slices :

Admin
Admin

عدد المساهمات : 935
تاريخ التسجيل : 28/01/2014

معاينة صفحة البيانات الشخصي للعضو http://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: الدرس الرابع القوائم Lists

مُساهمة من طرف Admin في الخميس فبراير 18, 2016 11:56 am

الحصول على القوائم الفرعية بالشرائح Getting Sublists with Slices :
وكما أنه بالفهرس يمكن الحصول على قيمة واحدة من قائمة ، يمكن بالشريحة slice الحصول على العديد من القيم من القائمة ، في شكل قائمة جديدة . يتم كتابة الشريحة بين قوسين مربعين ، مثل الفهرس ، لكنها تملك اثنين من الأعداد الصحيحة مفصولة بنقطتين : . لاحظ الفرق بين الفهارس indexes والشرائح slices.
• spam[2] هي قائمة بفهرس (عدد صحيح واحد).
• spam[1:4] هي قائمة بشريحة (عددين صحيحين ).
في الشريحة ، العدد الصحيح الأول هو فهرس حيث تبدأ الشريحة. العدد الصحيح الثاني هو فهرس حيث تنتهي الشريحة. الشريحة تكون تتصاعد حتى ، ولكن لن تشمل ’ القيمة عند الفهرس الثاني . تقيم الشريحة بتقييم إلى قيمة قائمة جديدة.
مثال : أدخل ما يلي في وعاء البيئة التفاعلية ولاحظ نتيجة التشغيل :



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



الحصول على طول قائمة بالدالة len() :

Admin
Admin

عدد المساهمات : 935
تاريخ التسجيل : 28/01/2014

معاينة صفحة البيانات الشخصي للعضو http://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: الدرس الرابع القوائم Lists

مُساهمة من طرف Admin في الخميس فبراير 18, 2016 11:59 am

الحصول على طول قائمة بالدالة len() :
الدالة len() سوف تقوم بإرجاع عدد من القيم التي تكون في قيمة القائمة التى تمرر إليها ، تماما مثل ما إذا كانت تعد عدد الحروف فى قيمة سلسلة .
مثال :أدخل ما يلي في وعاء البيئة التفاعلية ولاحظ النتيجة :


Admin
Admin

عدد المساهمات : 935
تاريخ التسجيل : 28/01/2014

معاينة صفحة البيانات الشخصي للعضو http://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: الدرس الرابع القوائم Lists

مُساهمة من طرف Admin في الخميس فبراير 18, 2016 12:02 pm

تغيير القيم في قائمة بفهارس :
عادة يكون اسم المتغير على الجانب الأيسر من عبارة التعيين ، مثل spam = 42 . لكن ، يمكنك أيضا استخدام فهرس لقائمة لتغيير القيمة في هذا الفهرس . على سبيل المثال ، spam[1] = 'aardvark' تعني " تعيين القيمة في الفهرس 1 في القائمة spam إلى السلسة 'aardvark' " .
مثال : أدخل ما يلي في وعاء البيئة التفاعلية ولاحظ النتائج :




Admin
Admin

عدد المساهمات : 935
تاريخ التسجيل : 28/01/2014

معاينة صفحة البيانات الشخصي للعضو http://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: الدرس الرابع القوائم Lists

مُساهمة من طرف Admin في الخميس فبراير 18, 2016 12:04 pm

تسلسل القائمة والنسخ المتماثل (تكرار) للقائمة :
العامل (+) يمكن أن يجمع بين قائمتين لإنشاء قيمة قائمة جديدة في بنفس الطريقة التي يتم بها التجميع بين سلسلتين إلى قيمة سلسلة جديدة . ويمكن أيضا استخدام العامل (*) مشغل مع قائمة وقيمة عدد صحيح لتكرار القائمة.
مثال :
أدخل ما يلي في وعاء البيئة التفاعلية ولاحظ النتائج :


Admin
Admin

عدد المساهمات : 935
تاريخ التسجيل : 28/01/2014

معاينة صفحة البيانات الشخصي للعضو http://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: الدرس الرابع القوائم Lists

مُساهمة من طرف Admin في الخميس فبراير 18, 2016 12:07 pm

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



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

Admin
Admin

عدد المساهمات : 935
تاريخ التسجيل : 28/01/2014

معاينة صفحة البيانات الشخصي للعضو http://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: الدرس الرابع القوائم Lists

مُساهمة من طرف Admin في الخميس فبراير 18, 2016 10:13 pm

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



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



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



عندما تقوم بتشغيل هذا البرنامج ، فإن الخرج سوف يكون بالشكل التالى :



الاستفادة من استخدام قائمة هي أن البيانات الخاصة بك الآن تكون في هيكل structure ، لذلك فإن يرنامجك يكون أكثر
مرونة في معالجة البيانات عن ماإذا كان به العديد من المتغيرات المتكررة.

استخدام حلقات for مع القوائم

Admin
Admin

عدد المساهمات : 935
تاريخ التسجيل : 28/01/2014

معاينة صفحة البيانات الشخصي للعضو http://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: الدرس الرابع القوائم Lists

مُساهمة من طرف Admin في الخميس فبراير 18, 2016 10:18 pm

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



خرج هذا البرنامج يكون بالشكل التالى :



السبب هو أن العودة من range(4) هى قيمة لشبه قائمة list-like والتى يعتبرها مثل [0, 1, 2, 3] . البرنامج التالى له نفس خرج البرنامج السابق :



ماالذى يقوم بفعله فى الواقع حلقة for السابقة من خلال بيانها مع المتغير i هو تعيينه للقيم المتعاقبة في القائمة
[0, 1, 2, 3] في كل تكرار .
تقنية البايثون الشائعة هي استخدام range(len(someList)) مع حلقة for للتكرار عبر فهارس قائمة . على سبيل المثال ، أدخل ما يلي في وعاء البيئة التفاعلية:



استخدام range(len(supplies)) فى حلقة for المبينة يكون مفيد لأن التعليمات البرمجية في الحلقة يمكن أن تصل الفهرس (مثل المتغير i ) والقيمة في هذا الفهرس (مثل supplies[i] ) . والأفضل أن range(len(supplies)) سوف تتكرر خلال جميع فهارس supplies ، بغض النظر عن عدد العناصر التي تحتوي عليها.

العوامل in و not in :

Admin
Admin

عدد المساهمات : 935
تاريخ التسجيل : 28/01/2014

معاينة صفحة البيانات الشخصي للعضو http://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: الدرس الرابع القوائم Lists

مُساهمة من طرف Admin في الخميس فبراير 18, 2016 10:27 pm

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



على سبيل المثال ، البرنامج التالي يتيح للمستخدم بكتابة اسم حيوان أليف pet ثم يتحقق لمعرفة ما إذا كان الاسم في قائمة الحيوانات الأليفة .
افتح نافذة جديدة محرر الملف ، أدخل التعليمة البرمجية التالية ، واحفظه باسم myPets.py:



الخرج يكون بالشكل التالى :



خدعة(براعة) التعيين المتعدد :
خدعة التعيين المتعدد هي اختصار والذى يمكنك من تعيين متغيرات متعددة مع القيم في قائمة في سطر واحد من التعليمات البرمجية . لذلك بدلا مما يلى :



يمكنك كتابة سطر الكود التالى :



عدد المتغيرات وطول القائمة يجب أن يكونا متساويان ، وإلا قلإن البايثون سوف يعطى الخطأ ValueError :



عوامل التعيين (التخصيص) المركبة :

Admin
Admin

عدد المساهمات : 935
تاريخ التسجيل : 28/01/2014

معاينة صفحة البيانات الشخصي للعضو http://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: الدرس الرابع القوائم Lists

مُساهمة من طرف Admin في الخميس فبراير 18, 2016 10:31 pm

عوامل التعيين (التخصيص) المركبة :
عند تعيين قيمة للمتغير، فكثيرا ما استخدم المتغير بحد ذاته. على سبيل المثال ، فى الكود التالى يتم تعيين 42 إلى المتغير spam ، ثم بعد ذلك يتم زيادة القيمة الموجودة فى المتغير spam بواحد :



كاختصار (اختزال) ، يمكنك أن تستخدم عامل التخصيص المركب (+=) للقيام بنفس العمل كما يلى :



هناك عوامل تخصيص مركبة للعوامل الآنية +, -, *, /, % ، والموصوفة فى الجدول التالى :



العامل += يمكن أن بقوم بعمل تجميع (تسلسل) سلاسل وقوائم ، والعامل *= يمكنه القيام بعمل تكرار (مضاعفة) سلاسل وقوائم . أدخل الكود لتالى فى وعاء البيئة التفاعلية :



الطرق (الأساليب) Methods :

Admin
Admin

عدد المساهمات : 935
تاريخ التسجيل : 28/01/2014

معاينة صفحة البيانات الشخصي للعضو http://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

استعرض الموضوع السابق استعرض الموضوع التالي الرجوع الى أعلى الصفحة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى