القواميس - المهارات الرقمية - ثالث متوسط
الفصل الدراسي الأول
الوحدة الأولى: الأمن السيبراني
الوحدة الثانية: قواعد البيانات
الوحدة الثالثة: البرمجة المتقدمة في بايثون
الفصل الدراسي الثاني
الوحدة الأولى: التجارة الإلكترونية
الوحدة الثانية: مهارات متقدمة في برامج الأوفيس
الوحدة الثالثة: هياكل البيانات الخطية
الفصل الدراسي الثالث
الوحدة الأولى: المتاجر الإلكترونية
الوحدة الثانية: صيانة الحاسب والتخزين السحابي
الوحدة الثالثة: مستشعرات الروبوت
254 الوحدة الثالثة: هياكل البيانات الخطية ستكتسب في هذه الوحدة المزيد من المعرفة عن هياكل البيانات الخطية. ستتعلم عن القواميس والقوائم المتداخلة. وكيفية العمل مع الملفات في بايثون. أهداف التعلم ستتعلم في هذه الوحدة: > ماهية هيكل بيانات القاموس > استخدام القاموس في برامج بايثون. > إنشاء دوال مدمجة مع القواميس. > إنشاء مقاطع برمجية خاصة بالعمليات على القواميس. > ماهية القائمة المتداخلة. > استخدام القوائم المتداخلة في البرامج. > تحديد ماهية الملف النصي. تخزين البيانات في ملف نصي. > إنشاء برامج تعمل على ملفات نصية. الأدوات > إصدار بيئة التواصل باي تشارم (PyCharm Community Edition) وزارة التعليم Ministry of Education 2024-1446
أهداف تعلم الوحدة الثالثة: هياكل البيانات الخطية
الدرس الأول القواميس تعلمت سابقًا عن هياكل البيانات البسيطة وبعض أنواع هياكل البيانات الخطية مثل الصفوف والقائمة. هياكل البيانات هياكل بيانات بسيطة Primitive Data Structures Data Structures هياكل بيانات غير بسيطة Non-primitive Data Structures منطقية نصية حقيقية صحيحة هياكل بيانات خطية رابط الدرس الرقمي www.ien.edu.sa هياكل بيانات غير خطية Non-Linear Data Structures Linear Data Structures Integer Real Character Boolean القائمة الصف القاموس الملف المصفوفة المجموعة المخطط الشجرة Tree Graph Set Array File Dictionary Tuple List هياكل البيانات التي تعلمتها في السنوات السابقة. القائمة تعد القوائم أحد أكثر هياكل البيانات استخدامًا في بايثون تتكون القائمة (List) من سلسلة مُرتبة من كائنات مستخدمة لتخزين البيانات بأنواعها، حيث لا يُشترط أن تكون عناصر القائمة من نفس النوع . يتم فصل عناصر القائمة بإضافة الفواصل بينها، وذلك داخل أقواس مربعة، ويمكن للمستخدم إعداد عناصر القائمة أو إدخالها. nums=[1,132,358,14.5,7.13] print("numbers list:",nums) fruits=["apple", "orange", "banana" ] print("fruits list: ",fruits) numbers list: [1, 132, 358, 14.5, 7.13] fruits list: ['apple', 'orange', 'banana'] وزارة التعر25 Ministry of Education 2024-1446
256 صف البيانات الصف (Tuple) هو أحد هياكل البيانات الأخرى في بايثون. ويضم عددًا مرتبًا من البيانات، ويمكن أن يُخزّن داخلها أي نوع من القيم. يُكتب الصف على شكل قائمة من القيم بينها فواصل وداخل أقواس دائرية. لا يمكن تغيير القيم في الصف، ولذلك يوصف بأنه هيكل بيانات غير قابل للتعديل. يتم استخدام الصفوف في الحالات التي تحتاج الوصول إلى البيانات التي تم إجراؤها في القوائم ، ولكن دون الحاجة لتغييرها، مثل رقم الهوية أو البريد الإلكتروني لشخص. هذا يجعل صفوف البيانات أكثر أمانًا. PersonalInfo =("Khaled", "khaled@edu.sa", 1234) print("Pesonal information:",PersonalInfo) Pesonal information: ('Khaled', 'khaled@edu.sa', 1234) بعد أن اكتسبت الكثير من الخبرة في لغة برمجة بايثون (Python)، حان الوقت لكي تتعرف على نوع آخر من أنواع هياكل البيانات الخطية، وهو القاموس ،(Dictionary)، وكذلك على دواله المدمجة بلغة بايثون. القاموس يعد القاموس Dictionary هيكل بيانات قابل للتغيير يتضمن مجموعة من العناصر ، ويتكون كل عنصر في القاموس من زوج من القيم على صورة المفتاح : القيمة (key value). يختلف القاموس عن هياكل البيانات الأخرى بإمكانية الوصول إلى عناصره من خلال مفتاح القاموس وليس بواسطة رقم الفهرس كما هو الحال مع القوائم والصفوف. يمكن أن تتنوع قيم المفاتيح في هيكل بيانات القاموس لتحتوي على أي نوع من أنواع البيانات. الصيغة العامة لتعريف القاموس dictionary_name={key,: value,, key,: value,, ..., key: value} قيم القاموس. متغير يمثل اسم القاموس وزارة التعليم Ministry of Education 2024-1446
تُستخدم الأقواس المتعرجة { } عند تعريف القاموس، وتُستخدم النقطتان الرأسيتان للفصل بين المفتاح والقيمة. لا يمكن أن يتواجد عنصران في القاموس بنفس المفتاح ، فكل مفتاح يسمح بالوصول إلى إحدى القيم الموجودة في القاموس إنشاء القاموس هناك طريقتان لإنشاء القاموس، ففي الطريقة الأولى يمكن وضع سلسلة من العناصر داخل أقواس متعرجة { } يفصل بينها بفاصلة كما في المثال الآتي: ArabGulf={"Saudi Arabia":"Riyadh","Oman": "Muscat", "Bahrain":"Manama"} print(ArabGulf) {'Saudi Arabia': 'Riyadh', 'Oman': 'Muscat', 'Bahrain': 'Manama'} يمكنك في بايثون استخدام علامات تنصيص مفردة أو مزدوجة. الطريقة الثانية لإنشاء القاموس تكون باستخدام أمر الإنشاء ( ) dict. ArabGulf=dict(SaudiArabia="Riyadh", Oman= "Muscat", Bahrain="Manama " ) print(ArabGulf) {'SaudiArabia': 'Riyadh', 'Oman': 'Muscat' 'Bahrain': 'Manama'} 'Bahrain': يتمثل الاختلاف الرئيس بين القوائم والقواميس في طريقة الوصول إلى العناصر. يتم الوصول لعناصر القائمة بواسطة رقم الفهرس بينما يتم الوصول إلى عناصر القاموس من خلال مفاتيحه. وزارة التعل25 Ministry of Education 2024-1446
myDict = dict() يمكنك إنشاء قاموس بحيث يُدخل المستخدم بياناته. إنشاء قاموس فارغ. for i in range(3): key = input("Enter the key: ") value = input("Enter the value: ") myDict[key] print(myDict) = value Enter the key: Saudi Arabia Enter the value: Riyadh Enter the key: Oman Enter the value: Muscat Enter the key: UAE Enter the value: Dubai {'Saudi Arabia': 'Riyadh', 'Oman': 'Muscat', 'Bahrain': 'Manama'} وزارة التعليم Ministry of Education 2024-1446 جرب بنفسك أنشئ قاموسًا يحتوي على أسماء ثلاثة طلبة، والفاكهة المفضلة لكل واحد منهم. 258
الوصول إلى عناصر القاموس لا يحتوي عنصر القاموس على رقم فهرس، ولكن توجد طريقتان للوصول إلى العناصر بداخله: باستخدام مفتاح العنصر المكتوب داخل أقواس مربعة [ ]. باستخدام دالة ( ) get يمكنك هنا مشاهدة المثال الآتي: تساعد كتابة جُمل تعريف القاموس في عدة أسطر في تحسين إمكانية قراءته. Riyadh Muscat يمكن استخدام الأوامر الآتية لتغيير قيمة عنصر داخل القاموس ArabGulf= { "SaudiArabia" : "Riyadh", "Oman" : "Muscat", "Bahrain" : "Manama" } capital1=ArabGulf["SaudiArabia" ] print(capital1) استخدم دالة get# capital2=ArabGulf.get("Oman") print(capital2) Employees= { "Khalid" : "Project Manager", "Saad" : "Data Analyst", "Hamad" : "Software Engineer" } Employees["Saad"]= "Data Scientist" print (Employees) {'Khalid': 'Project Manager', 'Saad': 'Data Scientist', I Hamad': 'Software Engineer'} وزارة التعو25 Ministry of Education 2024-1446
جَرِّب المقطع البرمجي الآتي واكتب النتيجة التي تظهر على الشاشة. Students= { "Khalid" : "Science", "Sara" : "Maths", "Ali" : "English Language" } Students["Ali"]= "Social Studies" print (Students) جرب بنفسك الدوال المستخدمة مع القاموس يوفّر بايثون مجموعة من الدوال المدمجة التي يمكن استخدامها مع القواميس الدالة dictName.get(x) dictName.update(x) يجب استبدال كلمة "dictName" باسم القاموس الذي أنشأته. الاستخدام ترجع القيمة المرتبطة بالمفتاح x ، وفي حال لم يتم العثور على المفتاح في القاموس تُرجع قيمة خالية (None). تضيف زوج أو أزواج من عناصر جديدة إلى القاموس إذا لم يوجد فيه أي من المفاتيح المضافة. أو تحدّث محتوى القيمة المرتبطة بالمفاتيح المضافة إذا كانت موجودة. تُرجع جميع القيم الموجودة في القاموس. dictName.values() dictName.keys() dictName.clear() 260 تُرجع جميع المفاتيح الموجودة في القاموس. تحذف جميع العناصر الموجودة في القاموس وزارة التعليم Ministry of Education 2024-1446
id_numbers= { "Khalid": 154327, "Saad": 154876, "Hamad": 164523 } print(id_numbers) new_id={"Ahmed":174527} id_numbers.update(new_id) print(id_numbers) حدّث قيمة المفتاح الموجود# update_id={"Saad":154651} id_numbers.update(update_id) print(id_numbers) {'Khalid': 154327, 'Saad': 154876, 'Hamad': 164523} {'Khalid': 154327, 'Saad': 154876, 'Hamad': 164523, 'Ahmed': 174527} {'Khalid': 154327, 'Saad': 154651, 'Hamad': 164523, 'Ahmed': 174527} dictName.values( ) 9 dictName.keys() تستخدم هذه الوظائف للحصول على مفاتيح وقيم القاموس في المثال الآتي ستستخدمها لطباعة أسماء البلدان (مفاتيح القاموس ومدنها (القيم). ArabGulf= { "SaudiArabia" : "Riyadh", "Oman" : "Muscat", "Bahrain" : "Manama" } k=ArabGulf.keys() print(k) v=ArabGulf.values() print(v) وزارة التعر26 Ministry of Education 2024-1446 dict_keys(['SaudiArabia', 'Oman', 'Bahrain']) dict_values(['Riyadh', 'Muscat', 'Manama'])
ArabGulf= { "SaudiArabia" : "Riyadh", "Oman" : "Muscat" "Bahrain" : "Manama" } ArabGulf.clear() print (ArabGulf) {} dictName.clear() يمكن استخدام دالة ) ( clear لإزالة جميع عناصر القاموس حذف عنصر من القاموس إذا رغبت بحذف عنصر من القاموس، يمكنك استخدام كلمة del متبوعةً باسم القاموس والمفتاح الموجود بين قوسين مربعين، ويمكنك حذف القاموس بأكمله أيضًا باستخدام كلمة del متبوعة باسم القاموس. ArabGulf= { "SaudiArabia" : "Riyadh", Oman" : "Muscat", "Bahrain" : "Manama" } del ArabGulf["Oman"] print(ArabGulf) وزارة التعليم Ministry of Education 2024-1446 {'SaudiArabia': 'Riyadh', 'UAE': 'Dubai'} 262
تلقيت رسالة خطأ لأنك حاولت طباعة قاموس قمت بحذفه سابقًا. ArabGulf= { "SaudiArabia" : "Riyadh", "Oman" : "Muscat", "Bahrain" : "Manama" } del ArabGulf print(ArabGulf) NameError: name 'ArabGulf' is not defined استخدامات هياكل البيانات يُستخدم كل هيكل من هياكل البيانات لأغراض مختلفة، يمكن توضيحها في الجدول الآتي: هيكل البيانات الاستخدام print(ArabGulf) القائمة (List) الصف (Tuple) القاموس (Dictionary) عند الحاجة إلى تغيير عناصر القائمة بشكل متكرر. عند الحاجة إلى تخزين بيانات دون الحاجة إلى تغييرها. 1- عند الحاجة إلى إيجاد ربط منطقي بين المفتاح القيمة. 2- عند الحاجة للبحث عن بيانات بناءً على مفتاح محدد. مشروع البنك ستنشئ الآن مشروعًا لمحاكاة إنشاء برنامج لأحد البنوك خطوة بخطوة. يحتوي سجل عميل البنك على بيانات مسجلة تتعلق به، وتتضمن: رقم الحساب. اسم العميل. رصيد الحساب. ستستخدم هيكل بيانات القاموس لحفظ بيانات العميل، بحيث سيكون رقم الحساب كقيمة فريدة بمثابة المفتاح. ستواجه مشكلة في تحديد القيم المرتبطة، حيث إنَّ سجل العميل يحتوي على اسمه ورصيده أيضًا، وبالتالي يمكنك استخدام قائمة كقيمة مرتبطة بالمفتاح. وزارة التع263 Ministry of Education 2024-1446
bankInfo={ 123: ["Ali", 15000], 444: ["Fahd", 13000], 888: ["Khalid", 11000] } print(bankInfo) {123: ['Ali', 15000], 444: ['Fahd', 13000], 888: ['Khalid', 11000]} من خلال المقطع البرمجي الآتي ستُبرمج عملية الإيداع في الحساب وهي عملية إضافة المبلغ المدخل إلى رصيد الحساب. bankInfo={ 123: ["Ali", 15000], 444:["Fahd",13000], 888: ["Khalid", 11000] } print("Bank info state:", bankInfo) عملية الإيداع# account No=int(input("Enter an account number: ")) account=bankInfo.get(account No) balance account [1] amount = float(input("Enter amount to be deposited: ")) newBalance=balance+amount account [1]=newBalance "I print("Bank info state: bankInfo) باستخدام دالة ( )get يمكنك تخزين قيم قاموس bankinfo مع مفتاح accountNo في المتغير .account تُخزن القيمة الثانية للحساب في متغير balance ، وهي ليست اسم الحساب، ولكنها رصيد الحساب. Bank info state: {123: ['Ali', 15000], 444: ['Fahd', 13000], 888: ['Khalid', 11000]} Enter an account number: 123 Enter amount to be deposited: 2000 Bank info state: {123: ['Ali', 17000.0], 444: ['Fahd', 13000], 888: ['Khalid', 11000]} وزارة التعليم Ministry of Education 2024-1446 264
لنطبق معًا تدريب 1 وضح الاختلاف بين القاموس والقائمة من حيث طريقة الوصول إلى عناصر كل منها. تدريب 2 أنشئ قاموسًا خاصًا باسمك واسم العائلة، ثم اطبعه. تدريب 3 • أنشئ قاموسًا يتم تعبئته من قبل المستخدم، بحيث يُدخل رقم هاتفه واسمه ثم يطبعهما. وزارة التعر26 Ministry of Education 2024-1446
أنشئ قاموسا خاصا باسمك واسم العائلة، ثم اطبعه.
أنشئ قاموسا يتم تعبئته من قبل المستخدم، بحيث يُدخل رقم هاتفه واسمه ثم يطبعهما.
266 تدريب 4 أنشئ قاموسا > يحتوي على الاسم الأول والاسم الأخير لثلاثة من أصدقائك. > أضف صديقًا جديدًا. احذف جميع عناصر القاموس ملاحظة : اطبع عناصر القاموس بعد كل خطوة ولاحظ النتائج. تدريب 5 استخدم عمليات القواميس في بايثون للقيام بما يأتي: > إنشاء قاموس يحتوي على اسم الطالب والمعدل لخمسة > طباعة قائمة المفاتيح. > طباعة قائمة القيم. > إضافة بيانات طالب جديد > طباعة القائمة الجديدة للقيم. > حذف جميع عناصر القاموس من زملائه. وزارة التعليم Ministry of Education 2024-1446