البرمجة بلغة بايثون (الفصل الثاني)
- أبريل 8, 2023
- تم النشر بواسطة: كود خانة
- الفئة: البرمجة بلغة بايثون
القائمة []:
في المحاضرة السابقة تعلمنا العديد من انواع المتغيرات وهي:
- الاعداد الصحيحة (Integer)
- الاعداد الكسرية (Float)
- النصوص (String)
- المنطقية (Boolean)
المشكلة الاساسية في هذه المتغيرات انها تحتوي على قيمة واحدة فقط ولايمكن خزن اكثر من قيمة فيها وفي عالم البرمجة غالباً ما سنتعامل مع عدد كبير من القيم ونحتاج الى حل العديد من المشاكل والكثير من هذه المشاكل تحتاج الى متغيرات تحتوي على العديد من القيم فتخيل انك لو اردت ادخال اسماء ثلاثة من اصدقائك على شكل متغيرات بأستخدام متغير ذو قيمة واحدة فستحتاج الى كتابة ثلاث متغيرات وعند الاستدعاء ايضا ستحتاج الى استدعائهم ثلاث مرات
1 2 3 4 5 6 |
friend1 = "Ahmed" friend2 = "Ali" friend3 = "Sara" print(friend1) print(friend2) print(friend3) |
لكن ماذا لو اردت اضافة 100 صديق؟ او اضافة اسماء 300 طالب مع درجاتهم؟ او اضافة 1000 قيمة منتج في شركتك؟ من غير المعقول استخدام المتغيرات ذات القيمة الواحدة في هكذا نوع من الادخالات لأنك ستحتاج الى إنشاء عدد كبير جداً من المتغيرات وستحتاج الى استدعاء جميع هذه المتغيرات بأسمائها وهذا الشيء غير منطقي وصعب جداً وهنا تبرز الفائدة الكبيرة للقوائم والتي ستساعدنا في حل هكذا نوع من المشاكل
الــقــائــمــة [ ]
في لغة بايثون هناك نوع من البيانات يسمى بـ القائمة list وهذا النوع من البينات من الممكن ان يأخذ اكثر من متغير واحد ومن اي نوع كان سواء من الانواع الاساسية التي تعلمناها سابقاً او من الانواع التي سنتعلمها لاحقا وبأمكان القوائم ايضاً ان تحتوي على اكثر من نوع واحد في نفس الوقت مثلا ارقام ونصوص وكسور وغيرها
فمثلاً نستطيع إنشاء متغير اسمه friends ونستطيع وضع جميع اسماء الاصدقاء في داخل هذا المتغير على شكل قائمة وايضاً نستطيع اضافة اعمار هؤلاء الاصدقاء في داخل نفس القائمة
ومن اجل إنشاء قائمة الـ friends نحتاج الى استخدام الاقواس المربعة ( هذه الاقواس تخبر الحاسوب ان كل شيء داخل القوسين المربعين هو عناصر لقائمة الـ friends )
فمثلاً سنقوم بأضافة اول عنصر لهذه القائمة وهو اسم الصديق الاول احمد ثم سنقوم بأضافة ثاني عنصر لقائمة الاصدقاء وهو عمر احمد 30 ثم سنقوم بأضافة ثاني عنصر للقائمة هو اسم الصديق الثاني علي ثم عمر علي 29 ثم الصديق الثالث سارة ثم عمر سارة 25 )
1 |
friends = ["Ahmed", 30, "Ali", 29, "Sara", 25] |
ولاحظ اننا في داخل قائمة الاصدقاء استخدمنا نوعين من البيانات في نفس الوقت وهو النصوص واستخدمناها لكتابة الاسماء والارقام الصحيحة واستخدمناها لكتابة الاعمار والان لو قمنا بطباعة المتغير friends سيتم طباعة جميع عناصر هذا المتغير
1 |
print(friends) |
1 |
['Ahmed', 30, 'Ali', 29, 'Sara’, 25] |
ولو قمنا بطباعة نوع المتغير friends سنجد انه list اي بمعنى قائمة
1 |
print(type(friends)) |
1 |
<class 'list'> |
كما بأمكان القوائم ان تحتوي على قوائم ايضا يعني قوائم عديدة داخل قائمة واحدة على سبيل المثال نستطيع انشاء قائمة مثلاً بأسم all_friends ونستطيع كتابة اسم وعمر كل صديق داخل قائمة مفردة اي بمعنى ان القائمة all_friends ستكون عناصرها عبارة عن قوائم
1 2 3 |
all_friends = [ ["Ahmed", 30], ["Ali", 29], ["Sara", 25], ["Khaled",32], ["Nor", 27] ] print(all_friends) |
1 |
[['Ahmed', 30], ['Ali', 29], ['Sara', 25], ['Khaled', 32], ['Nor', 27]] |
ومن الممكن ايضاً ان تكون عناصر القائمة عبارة عن قوائم وقيم منفردة في نفس الوقت فعلى سبيل المثال لنفترض اننا نريد انشاء قائمة نضع فيها معلومات موظف معين مثل اسمه وعمره وراتبه الشهري واختصاصه وللقيام بذلك سنقوم بانشاء قائمة جديدة بأسم new_list وسنجعل اول عنصر في هذه القائمة عبارة عن قائمة [اسم وعمر الموظف] وثاني عنصر عبارة عن قيمة رقمية (راتب موظف) وثالث عنصر عبارة عن قيمة نصية (اختصاص الموظف)
1 2 |
new_list = [ ["Ahmed", 30], 2000, "Engineer" ] print(new_list) |
1 |
[['Ahmed', 30], 2000, 'Engineer'] |
مساحة تجريبية:
مثال مساحة اجزاء المنزل:
في هذا المثال لدينا عدد من المتغيرات تمثل مساحات اجزاء المنزل بالمتر المربع:
- الصالة hall مساحتها 14.35 متر
- والمطبخ kitchen مساحته 15.0 متر
- وغرفة المعيشة living room مساحتها 19.0 متر
- وغرفة النوم bed room مساحتها 12.50 متر
- والحمام bathroom مساحته 8.75 متر
لنفترض اننا نريد تجميع هذه المتغيرات في متغير واحد (قائمة واحدة اسمها المساحات areas) وبعذ ذلك سنقوم بطباعة متغير المساحات (القائمة areas) بأستخدام امر الطباعة ومن اجل مشاهدة الناتج قم بتنفيذ الكود من خلال الضغط على زر تنفيذ الكود
# Area variables
hall = 14.35
kit = 15.0
liv = 19.0
bed = 12.5
bath = 8.75
# Create the areas list
areas = [hall, kit, liv, bed, bath]
# Print out areas list
print(areas)
مساحة اجزاء المنزل مع الاسماء:
في الكود السابق تبدو القيم التي قمنا بطباعتها بدون معنى فنحن لانعرف كل رقم الى اي جزء من اجزاء المنزل يشير ولو قام شخص اخر بالاطلع على ناتج الكود لن يستطيع معرفة ماهذه الارقام وماذا تمثل؟
وبما انه بأمكان القوائم ان تحتوي على اي نوع من انواع المتغيرات لنقم بأنشاء قائمة تحتوي على اسم جزء المنزل ومساحته يعني نصوص وارقام
# Area variables
hall = 14.35
kit = 15.0
liv = 19.0
bed = 12.5
bath = 8.75
# Create the areas list with names
areas = ["hallway", hall,"kitchen", kit, "living room", liv,"bedroom", bed, "bathroom", bath]
# Print out areas list
print(areas)
قائمة تحتوي قوائم اجزاء المنزل:
في مجال البرمجة وعلم البيانات والذكاء الاصطناعي والمجالات المشابهة سوف نتعامل مع عدد كبير جدا من البيانات وسيكون من المنطقي جدا ترتيب هذه البيانات وتنظيمها من اجل جعلها مفهومة وواضحة ومنطقية
في الكود السابق انشأنا قائمة تحتوي على اسماء اجزاء المنزل وبجانبها المساحة اما الان فسوف نقوم بأنشاء متغير اسمه المنزل house وايضاً من نوع (قائمة) يحتوي على مجموعة قوائم كل قائمة من هذه القوائم تحتوي على اسم جزء من اجزاء المنزل وبجانبه مساحته من اجل جعل قائمتنا اكثر منطقية واكثر وضوحا ، ثم لنقم بطباعة هذا المتغير ولنستكشف ماهو نوعه من اجل اثبات ان بأمكان القائمة ان تحتوي على عدة قوائم
# Area variables
hall = 14.35
kit = 15.0
liv = 19.0
bed = 12.5
bath = 8.75
# Create house variable as list of lists
house = [ ["hallway", hall],
["kitchen", kit],
["living room", liv],
['bedroom', bed],
['bathroom', bath] ]
# Print out house variable
print(house)
# Print out the type of house
print(type(house))
تجزئة القوائم (Subsetting lists):
بعد ان تعلمنا كيف نقوم بإنشاء متغير على شكل قائمة الان سنتعلم كيف نقوم بالوصول الى اجزاء القائمة مثلا كيف نقوم بطباعة جزء معين من القائمة او طباعة عدة اجزاء من القائمة
من اجل القيام بعملية الوصول الى عناصر محددة في القائمة نحتاج اولاً الى تعلم شيء مهم جداً في لغة بايثون وهو الـ index ويعني المؤشر وهو ببساطة تسلسل العناصر في القائمة ومن اهم الامور التي تحتاج معرفتها عن الـ index هي ان المؤشر يبدء بالرقم صفر أي بمعنى ان تسلسل او index اول عنصر في القائمة هو 0 و index ثاني عنصر في القائمة هو 1 و index ثالث عنصر في القائمة هو 2 والخ..
فمثلاً في قائمة الاصدقاء index احمد هو 0 و index عمر احمد هو 1 و index علي هو 2 و index عمر علي هو 3 والخ..
ومن اجل طباعة عنصر محدد في القائمة على سبيل المثال طباعة عمر سارة نحتاج الى استخدام اندكس هذا العنصر وهو الاندكس 5
وحتى نقوم بعملية اختيار هذا العنصر بشكل صحيح نحتاج الى كتابة اسم القائمة وهي friends ثم نفتح قوسين مربعة [ ] ونكتب رقم الاندكس للعنصر الذي نريده وهو الاندكس رقم 5 وعندما سنقوم بطباعة الناتج بأستخدام الامر print او بشكل مباشر سنجد انه تم طباعة عمر سارة فقط
1 2 |
friends = [ "Ahmed", 30, "Ali", 29, "Sara", 25, "Khaled", 32 ] friends[5] |
1 |
25 |
وكذلك الحال لبقية العناصر فمثلاً من اجل طباعة اسم خالد فقط نحتاج الى استخدام اسم القائمة (friends) مع الاندكس لاسم خالد وهو رقم 6
1 2 |
friends = [ "Ahmed", 30, "Ali", 29, "Sara", 25, "Khaled", 32 ] friends[6] |
1 |
Khaled |
تذكير:
في لغة بايثون نستطيع الطباعة بأستخدام الامر print او بشكل مباشر
1 2 3 |
print( friends[6] ) # OR friends[6] |
الاندكس العكسي
ايضا لغة بايثون توفر لنا الاندكس العكسي والذي يبدأ من اخر عنصر في القائمة ويبدأ بالرقم 1– وهو مفيد في كثير من الاحيان خاصة في حال لو كان لدينا قائمة كبيرة جدا واردنا طباعة القيمة الاخيرة او القيم قبل الاخيرة في القائمة
فمثلاً من اجل طباعة العنصر الاخير في قائمة الاصدقاء وهو عمر خالد نحتاج الى استخدام اسم القائمة وهو (friends) مع الاندكس العكسي 1– او الاندكس المباشر 7 لعمر خالد فكلاهما صحيح وبأمكاننا استخدامه
1 2 |
friends = [ "Ahmed", 30, "Ali", 29, "Sara", 25, "Khaled", 32 ] friends[-1] |
1 |
32 |
الحساب في القوائم:
ايضاً من الامور المفيدة جداً في القوائم هو استخدام العمليات الرياضية مع القوائم حيث بأمكاننا استخدام اجزاء القائمة في العمليات الحسابية وهذا الشيء شائع جدا في المشاريع الحقيقية
مثلا نريد حساب متوسط عمر الاصدقاء في قائمة friends وخزن الناتج في متغير اسمه متوسط الاعمار average_ages ومن المعروف في عالم الرياضيات انه من اجل حساب المتوسط الحسابي او المعدل نقوم بجمع العناصر ثم تقسيمها على عددها
ولذلك سنقوم بتحديد الاعمار في قائمة الاصدقاء وهي الاندكس 1 و 3 و 5 و 7 ثم سنقوم بجمع هذه الاعمار ومن ثم تقسيمها على عددها 4 لأن لدينا اربع عناصر وسنحصل في الناتج على متوسط اعمار الاصدقاء وهو 29 سنة
1 2 3 |
friends = [ "Ahmed", 30, "Ali", 29, "Sara", 25, "Khaled", 32 ] average_ages = (friends[1]+friends[3]+friends[5]+friends[7]) / 4 print(average_ages) |
1 |
29.0 |
تمرين برمجي (1):
في مثال مساحة اجزاء المنزل لدينا القائمة التالية:
1 2 |
areas = ["hallway", 14.35, "kitchen", 15.0, "living room", 19.0, "bedroom", 12.5, "bathroom", 8.75] |
والمطلوب منك هو القيام بالخطوات التالية:
1- قم بطباعة العنصر الثاني في قائمة المساحات areas ( بأستخدام الاندكس العادي )
2- قم بطباعة العنصر القبل الاخير في قائمة المساحات areas ( بأستخدام الاندكس العكسي )
3- قم طباعة مساحة المطبخ ( بأستخدام الاندكس المباشر )
# Areas list
areas = [ "hallway", 14.35,
"kitchen", 15.0,
"living room", 19.0,
"bedroom", 12.5,
"bathroom", 8.75 ]
#1 Print out second element
print(_________)
#2 Print out bathroom (using a negative index)
print(_________)
#3 Print out the kitchen area
print(_________)
# Areas list
areas = [ "hallway", 14.35,
"kitchen", 15.0,
"living room", 19.0,
"bedroom", 12.5,
"bathroom", 8.75 ]
#1 Print out second element
print(areas[1])
#2 Print out bathroom (using a negative index)
print(areas[-2])
#3 Print out the kitchen area
print(areas[3])
Ex().has_equal_ast(exact=False)
success_msg("اجابة صحيحة، احسنت")
– الاندكس العادي يبدء من اول عنصر في القائمة ويبدء بالرقم 0
– الاندكس العكسي يبدء من اخر عنصر في القائمة ويبدء بالرقم -1
تمرين برمجي (2):
لنفس مثال مساحات المنزل قم بحساب مجموع مساحات المنزل واخزن الناتج في متغير اسمه المساحة الكلية total_area ثم نفذ الكود من اجل طباعة المساحة الاجمالية للمنزل
# Areas list
areas = [ "hallway", 14.35,
"kitchen", 15.0,
"living room", 19.0,
"bedroom", 12.5,
"bathroom", 8.75 ]
# The total area of the house
total_area = _________________________________
# Print out the total area
print(total_area)
# Areas list
areas = [ "hallway", 14.35,
"kitchen", 15.0,
"living room", 19.0,
"bedroom", 12.5,
"bathroom", 8.75 ]
# The total area of the house
total_area = areas[1] + areas[3] + areas[5] + areas[7] + areas[9]
# Print out the total area
print(total_area)
Ex().has_equal_ast(exact=False)
success_msg("اجابة صحيحة، احسنت")
تقطيع القوائم (List slicing):
ماذا لو كان لدينا قائمة كبيرة تحتوي على عدد كبير من العناصر واردنا اختيار مجموعة معينة من عناصر هذه القائمة مثلا نصف العناصر او اخر 50 عنصر او اول 300 عنصر او ثاني مئة عنصر والخ..
هل من المنطقي ان نقوم بكتابة الاندكس لكل هذه العناصر التي نريد اختيارها؟ الجواب بالتأكيد لا
لذلك اوجدت لنا بايثون طريقة سهلة ومختصرة تعرف بأسم عملية التجزئة slice والتي تعني تقطيع القائمة الى اجزاء حيث يتم استخدام عملية الـ slicing في تحديد جزء من عناصر قائمة معينة ويرمز للـ slice بنقطتين :
وحتى نفهم عملية التقطيع بشكل واضح وسهل لنرجع الى قائمة الاصدقاء ولنفترض اننا نريد طباعة اول صديقين في قائمة الـ friends مع اعمارهم يعني العناصر الاربعة الاولى في القائمة
في هذه الحالة نقوم بكتابة اسم القائمة وهو friends ثم نفتح قوسين مربعين ونكتب بداخلها الاندكس بصيغة [من:الى] فمثلاً نحن نريد اختيار اول اربعة عناصر في قائمة friends ولذلك سنكتب من الاندكس 0 نقطتين الى الاندكس 4
1 2 |
friends = [ "Ahmed", 30, "Ali", 29, "Sara", 25, "Khaled", 32 ] friends[0:4] |
1 |
['Ahmed', 30, 'Ali', 29] |
مع ملاحظة ان اول رقم مشمول لكن اخر رقم مستبعد يعني العنصر الذي اندكسه رقم اربعة مستبعد ولذلك لم نكتب من 0 الى 3 لاننا نريد طباعة العنصر الرابع والذي اندكسه 3 كما انه بأمكاننا استخدام الاندكس العكسي في عملية الـ slicing مثلا طباعة الصديقين علي وسارة مع عمرهما
ولذلك سنحدد عملية الـ slicing من العنصر 6– الى العنصر 2– ولاحظ في الناتج ان العنصر الذي اندكسه 6- داخل في حين ان العنصر الذي اندكسه 2- غير داخل
1 2 |
friends = [ "Ahmed", 30, "Ali", 29, "Sara", 25, "Khaled", 32 ] friends[-6:-2] |
1 |
['Ali', 29, 'Sara', 25] |
ملاحظة:
في عملية تقطيع القوائم الـ slicing في حال عدم كتابة الرقم الاول داخل الاقواس المربعة هذا يعني اننا نقصد من البداية اي بمعنى من الاندكس 0 ، وفي حال عدم كتابة الرقم الثاني هذا يعني الى النهاية
تمرين برمجي (3):
لنفس مثال مساحة اجزاء المنزل لنفترض ان المنزل مكون من طابقين حيث الطابق السفلي يحتوي على صالة ومطبخ وغرفة معيشة والطابق العلوي يحتوي على غرفة نوم وحمام
والمطلوب منك في هذا التمرين هو أنشاء متغير اسمه الطابق السفلي downstairs واخزن فيه اجزاء الطابق السفلي المحددة بالمستطيل الازرق ( بأستخدام الاندكس المباشر ) ثم قم بأنشاء متغير اخر اسمه الطابق العلوي upstairs واخزن فيه اجزاء الطابق العلوي المحددة بالمستطيل الاحمر ( بأستخدام الاندكس العكسي )
# Areas list
areas = [ "hallway", 14.35,
"kitchen", 15.0,
"living room", 19.0,
"bedroom", 12.5,
"bathroom", 8.75 ]
# Use slicing to create downstairs
downstairs = __________
# Use slicing to create upstairs
upstairs = __________
# Print out downstairs and upstairs
print(downstairs)
print(upstairs)
# Areas list
areas = [ "hallway", 14.35,
"kitchen", 15.0,
"living room", 19.0,
"bedroom", 12.5,
"bathroom", 8.75 ]
# Use slicing to create downstairs
downstairs = areas[:6]
# Use slicing to create upstairs
upstairs = areas[-4:]
# Print out downstairs and upstairs
print(downstairs)
print(upstairs)
Ex().has_equal_ast(exact=False)
success_msg("اجابة صحيحة، احسنت")
– لتحديد اجزاء الطابق السفلي استخدم عملية التقطيع من البداية او من الاندكس 0 الى 6
– لتحديد اجزاء الطابق العلوي استخدم عملية التقطيع من الاندكس 4- الى النهاية
التلاعب بالقوائم (List Manipulation):
بأمكاننا التلاعب بعناصر القائمة والقيام بعمليات مختلفة ابرزها :
- تغير عناصر القوائم
- اضافة عناصر الى القوائم
- حذف عناصر من القوائم
تغيير عناصر القوائم
تعتبر القوائم من نوع mutable وتعني ( قابلة للتغير ) وعملية تغيير عنصر او مجموعة عناصر في القائمة سهلة جدا ، فقط نقوم بتحديد العنصر او مجموعة العناصر التي نريد تغييرها ثم نكتب اشارة يساوي ثم القيمة الجديدة التي نريدها مثلا لنقل اننا نريد تغيير اسم احمد الى طلال في قائمة الاصدقاء friends
من اجل القيام بذلك نقوم بتحديد اندكس العنصر الذي نريد تغييره ( وهو الاندكس الاول 0 ) ثم نقوم بكتابة القيمة الجديدة التي نريد وضعها في هذا الاندكس ( وهي الاسم Talal )
1 2 3 |
friends = ["Ahmed", 30, "Ali", 29, "Sara", 25, "Khaled", 32] friends[0] = "Talal" friends |
1 |
['Talal', 30, 'Ali', 29, 'Sara', 25, 'Khaled', 32] |
لاحظ انه في ناتج الكود السابق تم تغيير اول عنصر في قائمة الاصدقاء من احمد الى طلال
وايضا بأمكاننا تغيير اكثر من عنصر معا بأستخدام السلايس ولنقل اننا نريد تغيير اسم سارة الى نور وعمرها الى 27 وبما اننا نريد تغيير اكثر من قيمة في وقت واحد فيجب وضع القيم الجديدة في قائمة
1 2 3 |
friends = ["Ahmed", 30, "Ali", 29, "Sara", 25, "Khaled", 32] friends[4:6] = ["Nor", 27] friends |
1 |
['Ahmed', 30, 'Ali', 29, 'Nor', 27, 'Khaled', 32] |
تمرين برمجي (4):
لنفس مثال مساحة اجزاء المنزل قم تغيير مساحة المطبخ kitchen الى 13.50 وقم بتغيير غرفة الجلوس living room الى غرفة الدراسة study room
# Areas list
areas = [ "hallway", 14.35,
"kitchen", 15.0,
"living room", 19.0,
"bedroom", 12.5,
"bathroom", 8.75 ]
# Change kitchen area to 13.5
_____________________
# Change "living room" to "study room"
_____________________
# Print out areas list
print(areas)
# Areas list
areas = [ "hallway", 14.35,
"kitchen", 15.0,
"living room", 19.0,
"bedroom", 12.5,
"bathroom", 8.75 ]
# Change kitchen area to 13.5
areas[3] = 13.5
# Change "living room" to "study room"
areas[4]= "study room"
# Print out areas list
print(areas)
Ex().has_equal_ast(exact=False)
success_msg("اجابة صحيحة، احسنت")
– اندكس مساحة المطبخ هو 3
– اندكس غرفة المعيشة هو 4
التشابه والاختلاف بين النصوص والقوائم:
كما ذكرنا سابقا ان النصوص والقوائم كلاهما عبارة عن نوع من انواع البيانات في لغة بايثون وفي الحقيقة هناك تشابه بين هذين النوعين من البيانات والتشابه هو ان النصوص يمكن ان نتعامل معها بنفس طريقة القوائم من خلال الاندكس واختيار عنصر واحد معين ( حرف او رقم او اشارة ) او اختيار عدة عناصر بأستخدام عملية التقطيع
وكمثال توضيحي على ذلك، لو كان لدينا متغير نصي قيمته ايميل معين ( بريد الكتروني ) نستطيع طباعة حرف واحد من هذا المتغير النصي بأستخدام الاندكس ( على سبيل المثال اخر حرف ) ونستطيع ايضاً طباعة مجموعة حروف بأستخدام عملية التقطيع ( على سبيل المثال اول ستة حروف ) والكود التالي يوضح ذلك
1 2 3 |
1 2 |
m myname |
اما الاختلاف بين النصوص والقوائم فهو ان النصوص immutable وتعني ثابتة غير قابلة للتغيير الجزئي فلا يمكننا تغيير جزء معين من البيانات من نوع str ولكن بأمكاننا تغيير قيمة المتغير بأكمله مثال على ذلك لانستطيع تنفيذ الكود التالي لأننا سنحصل على Error
1 2 3 |
1 2 3 4 |
File "<ipython-input-1-b8c52ca20395>", line 2 print(my_email[-1] = "f") ^ SyntaxError: keyword can't be an expression |
توسيع القوائم:
بأمكاننا توسيع القوائم في لغة بايثون من خلال اضافة عناصر جديدة الى القائمة او من خلال دمج قائمة مع قائمة اخرى بأستخدام اشارة الجمع +
فمثلاً لنقل اننا نريد اضافة صديق جديد الى قائمة الاصدقاء واسمه وسام وعمره 24 سنة ومن اجل القيام بذلك نحتاج الى أنشاء قائمة جديدة بأسم وعمر وسام ثم ندمجها مع قائمة الاصدقاء والكود التالي يوضح ذلك
1 2 |
friends = ["Ahmed", 30, "Ali", 29, "Sara", 25, "Khaled", 32] + ['Wesam', 24] friends |
1 |
['Ahmed', 30, 'Ali', 29, 'Sara', 25, 'Khaled', 32, 'Wesam', 24] |
أو
1 2 3 4 |
friends = ["Ahmed", 30, "Ali", 29, "Sara", 25, "Khaled", 32] new_friend = ['Wesam', 24] friends = friends + new_friend friends |
1 |
['Ahmed', 30, 'Ali', 29, 'Sara', 25, 'Khaled', 32, 'Wesam', 24] |
قم بإنشاء متغير جديد اسمه all_areas واجعل قيمة هذا المتغير تساوي قائمة مساحات المنزل areas زائد قائمة جديدة تحتوي على اربعة عناصر وهي المرآب garage ومساحته 20.0 والحديقة garden ومساحتها 17.0
# Areas list
areas = [ "hallway", 14.35,
"kitchen", 15.0,
"living room", 19.0,
"bedroom", 12.5,
"bathroom", 8.75 ]
# Add garage and garden data
all_areas = ________________________________
# Print out all_areas
print(all_areas)
# Areas list
areas = [ "hallway", 14.35,
"kitchen", 15.0,
"living room", 19.0,
"bedroom", 12.5,
"bathroom", 8.75 ]
# Add garage and garden data
all_areas = areas + ["garage", 20.0,"garden", 17.0]
# Print out all_areas
print(all_areas)
Ex().has_equal_ast(exact=False)
success_msg("اجابة صحيحة، احسنت")
حذف العناصر من القائمة:
بأمكاننا بسهولة حذف اي عنصر او مجموعة عناصر من القائمة بأستخدام الوظيفة ()del ولنقل مثلا اننا نريد حذف وسام وعمره من قائمة الاصدقاء ومن اجل القيام بذلك نحتاج الى تحديد الاندكس للعناصر التي نريد حذفها وفي هذا المثال نحن نريد حذف اسم وعمر وسام ( اخر عنصرين )
1 2 3 |
friends = ["Ahmed", 30, "Ali", 29, "Sara", 25, "Khaled", 32, "Wesam", 24] del(friends[-2:]) friends |
1 |
['Ahmed', 30, 'Ali', 29, 'Sara', 25, 'Khaled', 32] |
تمرين برمجي (6):
قم بحذف المرآب garage ومساحته من قائمة all_areas
# All areas list
all_areas = [ "hallway", 14.35,
"kitchen", 15.0,
"living room", 19.0,
"bedroom", 12.5,
"bathroom", 8.75,
"garage", 20.0,
"garden", 17.0 ]
# Delete garage data
_____________________
# Print out all_areas
print(all_areas)
# All areas list
all_areas = [ "hallway", 14.35,
"kitchen", 15.0,
"living room", 19.0,
"bedroom", 12.5,
"bathroom", 8.75,
"garage", 20.0,
"garden", 17.0 ]
# Delete garage data
del(all_areas[-4:-2])
# Print out all_areas
print(all_areas)
Ex().has_equal_ast(exact=False)
success_msg("اجابة صحيحة، احسنت")
التعامل الداخلي مع القوائم:
في لغة بايثون عندما نقوم بانشاء متغير جديد اسمه مثلاً x ومن نوع قائمة وقيمته مثلاً تساوي a, b, c فأننا نقوم بحجز مكان في الذاكرة وهذا المكان تخزن فيه قيم المتغير x
ولو قمنا بإنشاء متغير اخر اسمه y ومن نوع قائمة وقيمته تساوي 3 ,2, 1 في هذه الحالة سيتم حجز مكان جديد في الذاكرة للمتغير y وسيتم خزن قيم المتغير y فيه
لكن لو قمنا بإنشاء متغير جديد مثلاً اسمه z وجعلنا قيمته تساوي قيمة المتغير x نفسه فأن z سوف تشير الى نفس المكان في الذاكرة الذي يشير اليه x
وان اي تغيير نقوم به على z سيغير x ايضاً فمثلاً لو قمنا بتغيير ثاني عنصر في القائمة z من حرف b الى حرف u في هذه الحالة سيتغير ثاني عنصر في القائمة x اوتوماتيكياً وذلك لأن x, y كلاهما يشير الى نفس المكان في الذاكرة
1 2 3 4 5 6 |
x = ["a", "b", "c"] z = x z[1] = "u" print(x) print(z) |
1 2 |
['a', 'u', 'c'] ['a', 'u', 'c'] |
اخذ نسخة من متغير:
من اجل حل مشكلة الاشارة الى نفس المكان في الذاكرة لمتغيرين نحتاج الى أخذ نسخة من هذا المتغير ويصبح لدينا متغيرين مختلفين بحيث كل متغير يشير الى مكان خاص في الذاكرة والفائدة من ذلك هي ان هذين المتغيرين لن يؤثران على بعضهما على بعض
ومن اجل اخذ نسخة من متغير ( نوعه قائمة ) دون الاشارة الى نفس المكان في الذاكرة نحتاج الى استخدام الوظيفة ()list ونكتب داخل القوسين اسم القائمة التي نريد اخذ نسخه منها
الان لو قمنا بأي تغيير على القائمة z لن يؤثر ذلك بأي شكل من الاشكال على القائمة x وذلك لأن كل قائمة تشير الى موقع مختلف من الذاكرة
1 2 3 4 5 6 |
x = ["a", "b", "c"] z = list(x) z[1] = "u" print(x) print(z) |
1 2 |
['a', 'b', 'c'] ['a', 'u', 'c'] |
لاحظ انه في ناتج الكود السابق على الرغم من اننا قمنا بتغيير ثاني عنصر في القائمة z لكن ذلك لم يؤثر على القائمة x
ملاحظة:
هناك طريقة اخرى نستطيع فيها اخذ نسخة من قائمة معينة وهي نسخ جميع عناصر القائمة المراد نسخها ( من اول اندكس الى اخر اندكس ) والكود التالي يوضح ذلك
1 2 3 4 5 6 |
x = ["a", "b", "c"] z = x[:] z[1] = "u" print(x) print(z) |
1 2 |
['a', 'b', 'c'] ['a', 'u', 'c'] |
تمرين برمجي (7):
قم بأنشاء متغير اسمه areas_copy هذا المتغير يأخذ نسخة من المتغير areas ثم قم بتغيير مساحة الحمام bathroom الى 10.0 في المتغير الجديد areas_copy ثم اطبع المتغير الجديد بعد التعديل للتأكد من اجراء التعديل عليه واطبع المتغير الاصلي areas للتأكد من عدم تأثره بالتغيير
# Areas list
areas = [ "hallway", 14.35,
"kitchen", 15.0,
"living room", 19.0,
"bedroom", 12.5,
"bathroom", 8.75 ]
# Create areas_copy
_________________________________
# Change 8.75 to 10.0 in areas_copy
_________________________________
# Print out areas_copy
______________________
# Print out areas
______________________
# Areas list
areas = [ "hallway", 14.35,
"kitchen", 15.0,
"living room", 19.0,
"bedroom", 12.5,
"bathroom", 8.75 ]
# Create areas_copy
areas_copy = list(areas)
# Change 8.75 to 10.0 in areas_copy
areas_copy[-1] = 10.0
# Print out areas_copy
print(areas_copy)
# Print out areas
print(areas)
Ex().has_equal_ast(exact=False)
success_msg("اجابة صحيحة، احسنت")
– العنصر المطلوب اجراء التعديل عليه هو اخر عنصر في القائمة areas_copy