تعلم لغة Python الفصل 6 : القواميس (DICTIONARIES ) الجزء 3 والأخير

sparrow
0

 



الفصل : 6

الجزء : 3

العنوان : القواميس (DICTIONARIES)






ال Nesting


تأتي باسم التعشيش بالعربية -_- , في بعض الأحيان، ستحتاج إلى تخزين عدة قواميس داخل قائمة، أو قائمة من العناصر كقيمة في قاموس. يُسمى هذا بالnesting. يمكنك nest القواميس داخل قائمة، أو قائمة من العناصر داخل قاموس، أو حتى قاموس داخل قاموس آخر. الnesting هو ميزة قوية، كما ستوضح الأمثلة التالية.


قائمة من القواميس


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


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


مثال أكثر واقعية سيتضمن أكثر من ثلاثة كائنات فضائية مع كود ينشئ كل كائن فضائي تلقائيًا. في المثال التالي، نستخدم `range()` لإنشاء أسطول من 30 كائنًا فضائيًا:


يبدأ هذا المثال بقائمة فارغة لحفظ جميع الكائنات الفضائية التي سيتم إنشاؤها. دالة `range()` تُرجع سلسلة من الأرقام، والتي تخبر بايثون بعدد المرات التي نريد تكرار الحلقة فيها. في كل مرة تدور فيها الحلقة، نقوم بإنشاء كائن فضائي جديد ثم نضيف كل كائن فضائي جديد إلى قائمة `aliens`. نستخدم شريحة لعرض أول خمسة كائنات فضائية، وأخيرًا، نطبع طول القائمة لإثبات أننا أنشأنا بالفعل أسطولًا كاملًا من 30 كائنًا فضائيًا:


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



نظرًا لأننا نريد تعديل أول ثلاثة كائنات فضائية، فإننا نمر عبر شريحة تشمل فقط أول ثلاثة كائنات فضائية. جميع الكائنات الفضائية خضراء الآن، لكن ذلك لن يكون دائمًا كذلك، لذا نكتب شرط `if` للتأكد من أننا نقوم بتعديل الكائنات الخضراء فقط. إذا كان الكائن الفضائي أخضر، نغير اللون إلى 'yellow'، السرعة إلى 'medium'، وقيمة النقاط إلى 10، كما هو موضح في الخرج التالي:



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


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


قائمة في قاموس


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

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


نبدأ بقاموس يحتوي على معلومات حول بيتزا تم طلبها. أحد المفاتيح في القاموس هو 'crust'، والقيمة المرتبطة هي السلسلة 'thick'. المفتاح التالي، 'toppings'، يحتوي على قائمة كقيمته التي تخزن جميع الطبقات المطلوبة. نلخص الطلب قبل بناء البيتزا. عندما تحتاج إلى كسر سطر طويل في استدعاء `print()`، اختر نقطة مناسبة لكسر السطر المطبوع، وأنه السطر بعلامة اقتباس. قم بتوسيع السطر التالي، أضف علامة اقتباس افتتاحية، واستمر في السلسلة. سيقوم بايثون تلقائيًا بدمج جميع السلاسل التي يجدها داخل الأقواس. لطباعة الطبقات، نكتب حلقة `for`. للوصول إلى قائمة الطبقات، نستخدم المفتاح 'toppings'، ويمسك بايثون قائمة الطبقات من القاموس.


الخرج التالي يلخص البيتزا التي نخطط لبنائها:


يمكنك nest قائمة داخل قاموس في أي وقت تريد فيه أكثر من قيمة واحدة لتكون مرتبطة بمفتاح واحد في القاموس. في المثال السابق للغات البرمجة المفضلة، إذا كنا نخزن إجابات كل شخص في قائمة، يمكن للأشخاص اختيار أكثر من لغة مفضلة. عندما نحلّق (loop) عبر القاموس، ستكون القيمة المرتبطة بكل شخص قائمة باللغات بدلاً من لغة واحدة. داخل حلقة `for` الخاصة بالقاموس، نستخدم حلقة `for` أخرى للتنقل خلال قائمة اللغات المرتبطة بكل شخص:


القيمة المرتبطة بكل اسم في `favorite_languages` هي الآن قائمة. لاحظ أن بعض الأشخاص لديهم لغة مفضلة واحدة والبعض الآخر لديهم عدة لغات مفضلة. عندما نحلّق عبر القاموس، نستخدم المتغير `languages` للاحتفاظ بكل قيمة من القاموس، لأننا نعلم أن كل قيمة ستكون قائمة. داخل الحلقة الرئيسية للقاموس، نستخدم حلقة `for` أخرى للتنقل خلال قائمة اللغات المفضلة لكل شخص. الآن يمكن لكل شخص سرد العديد من اللغات المفضلة كما يريد:



لتنقيح هذا البرنامج بشكل أكبر، يمكنك تضمين شرط `if` في بداية حلقة `for` الخاصة بالقاموس للتحقق مما إذا كان لكل شخص أكثر من لغة مفضلة عن طريق فحص قيمة `len(languages)`. إذا كان لدى الشخص أكثر من لغة مفضلة، فإن الخرج سيظل كما هو. إذا كان للشخص لغة مفضلة واحدة فقط، يمكنك تغيير الصياغة لتعكس ذلك. على سبيل المثال، يمكنك قول "لغة سارة المفضلة هي C".


قاموس داخل قاموس


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



نبدأ بتعريف قاموس يسمى `users` يحتوي على مفتاحين: واحد لكل من أسماء المستخدمين 'aeinstein' و 'mcurie'. القيمة المرتبطة بكل مفتاح هي قاموس يتضمن الاسم الأول، الاسم الأخير، والموقع لكل مستخدم. ثم نحلّق عبر قاموس `users`. يعين بايثون كل مفتاح للمتغير `username`، ويعين القاموس المرتبط بكل اسم مستخدم للمتغير `user_info`. بمجرد الدخول في الحلقة الرئيسية للقاموس، نطبع اسم المستخدم.


ثم نبدأ بالوصول إلى القاموس الداخلي. يحتوي المتغير `user_info`، الذي يحتوي على قاموس معلومات المستخدم، على ثلاثة مفاتيح: 'first'، 'last'، و 'location'. نستخدم كل مفتاح لإنشاء اسم كامل ومنظم وموقع لكل شخص، ثم نطبع ملخصًا لما نعرفه عن كل مستخدم:


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


جرب بنفسك


تمرين 6-7. الأشخاص:

ابدأ بالبرنامج الذي كتبته للتمرين 6-1. أنشئ قاموسين جديدين يمثلان أشخاصًا مختلفين، واحفظ جميع القواميس الثلاثة في قائمة تُسمى `people`. حلق (اعمل loop يعني ) عبر قائمة الأشخاص. أثناء التحليق عبر القائمة، اطبع كل ما تعرفه عن كل شخص.


تمرين 6-8. الحيوانات الأليفة:

أنشئ عدة قواميس، حيث يمثل كل قاموس حيوانًا أليفًا مختلفًا. في كل قاموس، اشمل نوع الحيوان واسم المالك. احفظ هذه القواميس في قائمة تُسمى `pets`. بعد ذلك، حلق عبر قائمتك وأثناء القيام بذلك، اطبع كل ما تعرفه عن كل حيوان أليف.


تمرين 6-9. الأماكن المفضلة:

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


تمرين 6-10. الأرقام المفضلة:

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


تمرين 6-11. المدن:

أنشئ قاموسًا يسمى `cities`. استخدم أسماء ثلاث مدن كمفاتيح في القاموس. أنشئ قاموسًا للمعلومات عن كل مدينة واشمل البلد الذي تقع فيه المدينة، عدد السكان التقريبي، وحقيقة واحدة عن تلك المدينة. يجب أن تكون المفاتيح لكل قاموس مدينة شيئًا مثل `country`، `population`، و `fact`. اطبع اسم كل مدينة وكل المعلومات التي حفظتها عنها.


تمرين 6-12. التوسعات:

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

 


ملخص


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


في الفصل التالي، ستتعلم عن حلقات `while` وكيفية قبول المدخلات من الأشخاص الذين يستخدمون برامجك. سيكون هذا فصلًا مثيرًا، لأنك ستتعلم كيفية جعل جميع برامجك تفاعلية: ستتمكن من الاستجابة لمدخلات المستخدم.


النهاية


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


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


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


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


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

هنا


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

Tags

إرسال تعليق

0تعليقات

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

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

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