طيب يا جماعة السلام عليكم إن شاء الله اليوم هنكمل
بعض الأسئلة المتعلقة بالـ list يعني إحنا ترتيبنا
دايما في المحاضرات إن في الأول إحنا بنعرف إيش
أهمية الموضوع اللي إحنا بندرسه في الأول عرفناه إيش
الـ list و إيش فيديوها وبعدين بنشرح أساسيات
الموضوع يعني كيف أنا بتعامل مع الـ list بطرق مختلفة
الطرُق إضافة حذف تعديل loop iteration وبعدين بنشوف
أمثلة عملية من خلالها بدنا نستفيد من طرق التعامل
المختلفة مع الـ list بحيث أنّنا نستفيد منها بتطبيقات
عملية طيب حاليًا بدنا نحل بعض الأسئلة المحاضرة
الماضية زي مثلًا شفنا السؤال بتاع الـ puzzle إن أنا
أختار مثلًا رقمًا عشوائيًا من مجموعة أرقام أشوف أكبر
عنصر أصغر عنصر وهكذا كيف ندخل مثلًا أسماء نرتبها
أبجديًا نشوف أعلى مثلًا خمس علامات جابوها الطلبة و
استخدمنا خلالها methods مختلفة اللي هي علاقة في الـ
list نشوف الآن بعض الأسئلة الثانية
الآن مثلًا آخر حاجة طلبنا سؤال أو حكينا عن سؤال
قلنا نحل المرة الجاية اللي هو write a program that
takes a list of marks and returns a list of marks
greater than 60 يعني بدنا يكون عندنا list من العلامات
تاوى مثلًا خمسين ستة وستين سبعين ثمانين واحد و
تسعين خمسة وثمانين واحد وستين خمسة وأربعين، خمسة
وخمسين، أربعين، تمام؟ وبدنا نجيب العلامات اللي
أكثر من ستين في السؤال هذا إحنا إنّ list فيها
مجموعة علامات، تمام؟ ومطلوب مني أطبع فقط العلامات
اللي أكثر من ستين، تمام؟ طيب عشان أجيب العلامات
اللي أكثر من ستين كل اللي لازم أعمله أنّ ألف أنا
على علامات كلهم علامة علامة وأشوف العلامة اللي
أكثر من ستين وأطبعها، تمام؟ بس، هي الفكرة طيب هنا
دخلت على for loop for I in marks if
I أكبر من أو يساوي 60 print I طيب
تعالَ نشوف الحل اللي هالجيت اللي
قال هي الجواب طلع عندي تحت كل العلامات الموجودة
هنا إيش أكثر من أو يساوي 60
طيب نشوف السؤال اللي بعده تطلعوا
معايا يا جماعة هنا فرضًا أنا كان عندي list اسمها
countries إيش عن الـ countries؟ آه الدول تمام؟ وهنا
عندي في أسماء الدول مثلًا عندي USA تمام؟ كندا Egypt
تمام؟
وعندي هنا إيش مثلًا؟
Israel تمام Germany UK
Jordan
وبرضه بدنا نحط إيش إسرائيل برضه طيب انتبهوا معايا
شوي اللي أنا .. أنا بدي أعمل code بحيث أنّ أنا ألف
على الـ countries هذه وأشوف كل كلمة إسرائيل
أستبدلها وأحط بدلها إيش Palestine تمام؟ بنفع الـ
countries كل ما يلاقي كلمة إسرائيل بنستبدلها ونحط
Palestine طيب هذا طبعًا عملية الاستبدال مستخدم كثير
في الحياة، عندي ملف word، فيه كلمات بدي أعمل
استبدال لكلمة ما بكلمة في النهاية هو بيتعامل مع
الكلمات كلها أو النص كله كمجموعة كالـ list list of
إيش of words مجموعة من الكلمات بدي أشوف أنا كل
كلمة مديش إياها يستبدلها بكلمة جديدة فالآن أنا
عندي list في أسماء دول تمام؟ بدي ألف على الـ list و
أستبدل دولة معينة إسرائيل مثلًا بـ Palestine طب إيش
أسوي؟ مين يحاول يقولي إيش أعمل؟ بدي أعمل loop إنتوا
معايا ولا لأ يا جماعة؟ آه بدي أعمل loop طيب يجيب
بدي أعمل for I
in countries طيب
I هنا إيش بتعمل يا جماعة؟ الـ I هذه مش الـ index الـ
I هذه for I in countries بيجيب لي القيمة صح ولا لأ
القيم الموجودة في الـ countries طب ماشي بدي أقول له
if I تساوي إسرائيل صح؟ طبعًا؟ المفروض هالـ gate في
الحالة هذه مبدل I تساوي طيب
بنعمل لوب على الـ countries for I in countries مفهوم
هنا أنّ الـ I بتخزن فيها إيش؟ كل قيمة موجودة في الـ
list يعني بمرّ بالقيمة الأولى بخزنها في الـ I إذا الـ
I تساوت إسرائيل، حط في الـ I إيش؟ Palestine، لكن هل
هذا الكلام صح ولا لأ؟ بدنا نتأكد منه، كيف بدنا
نتأكد منه؟ إنّه في الآخر بعد ما نخلص الـ loop نطبع الـ
countries نقول print countries
وتعالَ نعمل run تمام هي الناتج اللي موجود عندي هل
استبدالها هنا في الناتج لأ لأ إيش اللي صار هنا يا
جماعة في الـ code اللي موجود مكتوب قدامنا فعليًا أنا
كل قيمة موجودة في الـ countries حطيتها وين في الـ I
قرأت القيمة أخذت مثلًا USA وحطيتها في متغير اسمه I
وبعدين أنا استبدلت القيمة اللي موجودة وين في الـ I
لكن هل الـ list نفسها اتغيرت واضحة إيش المشكلة؟ إنّه
أنا قرأت القيمة الموجودة في الـ list حطيتها في I و
بعدين بدلت القيمة الموجودة في I لكن هل غيرت القيمة
الموجودة في الـ list؟ لأ يبقى هذا الحل في إيش؟ فيه
مشكلة
بالضبط إحنا عشان نستبدل أي قيمة أخذنا إحنا قبل هيك
لازم نكون عارفين الـ index يعني مثلًا أنا بدي أستبدل
القيمة الثالثة في الـ list بروح بحكيله countries
ثلاثة
يساوي كذا كذا مثلًا Palestine صح؟ هيك أنا بأستبدل مش
هذه طريقة الاستبدال بروح له وبروح له على العنصر اللي
الـ index تبعه ثلاثة حط فيه إيش؟ بحط فيه Palestine
يبقى أنا الآن توصلت لنتيجة أنّ الـ for loop هذه
بتظبطش معايا ليش؟ لأنّ الـ for loop هذه بتجيب لي إيش؟ الـ
index بتجيب لي إيش؟ بتجيب لي القيمة، تمام؟ حتى
لو why؟ why الـ إيش؟ مثلًا why countries يساوي
إسرائيل ولازم نغيّر الـ index؟ ماشي هو الـ while
برضه مش موجود عندي index هنا الـ index هو الرقم
اللي بدي يتغيّر باستمرار طب انتبه معايا خليني أنا
أحله
إيش اللي عملته أنا هنا؟ for I in range لن الـ
countries إيش هالكلام هذا؟
الـ I بتتغيّر من صفر إلى مين الـ countries مثلًا مثلًا
هذه جداش حجمها واحد اثنين ثلاثة أربعة خمسة ستة
سبعة ثمانية تمام هيحط قلة هنا كأنّه حطّ range من
صفر إلى ثمانية ثمانية أكيد بياخدوش آخر index هو
سبعة ليش على أساس أخلي الـ I تتغيّر إيش من صفر إلى
سبعة تمام؟ الآن بحكيله if countries I
if
countries I يساوي Israel countries
I يساوي
هذا الحل صح إيش فرق الحل هذا عن الحل السابق إنّ
الحل السابق أنا كنت بعمل loop على الـ values تمام
الحل هذا أنا بعمل loop على الـ index تمام الفرق إنّ
أنا محتاج الـ index عشان الـ list تبدأ لو أنا بس بدي
أطبع القيم الموجودة في الـ list بحتاجش الـ index
بحتاج أجيب الـ values لكن أنا مدام بدي أستبدل قيم
بحتاج الـ index فحكيت له اعمل له بحيث أنّ الـ I تتغيّر
من صفر إلى طول الـ list على أساس أنّ الـ I تكون
قيمتها صفر واحد اثنين ثلاثة أربعة خمسة ستة سبعة
طبعًا عند .. طيب إيش هينفذ أول حاجة الـ I أول قيمة
لها إيش صفر هيروح if countries بينقصين صفر أنا
قرأت القيمة الموجودة في الموقع صفر إذا كانت
إسرائيل أستبدلها بإيش؟ تروح على countries I تمام؟
وحط فيها إيش؟ Palestine هيك أنا بأبدّل القيمة
الموجودة في الـ list مباشرة تمام؟ بعدين هيحط الـ I
بواحد if countries I يساوي إسرائيل حط فيها إيش؟
Palestine وهكذا الآن
عشان أتأكد من الحل بدي أطبع print طيب
شوف الحل الآن هنا هي الآن استبدل كل ظهور لإسرائيل
بإيش؟ بكلمة Palestine
انعيده على السريع مرة ثانية في الأول أنا جماعة كنت
أعمل for i أو أول ما فكرت بدأت أفكر زي هيك قلت
ماشي أنا بعمل loop على ال countries و بضحك في
فلسطين طبعا بقول for i in countries
هيك
في الحالة دي لما أقول for i in list بيجيبلي القيم
اللي موجودة في ال list طبعا ما بنفعش أقوله if i يساوي
إسرائيل حط اللي I فيها Palestine هذا الحل مش صح
لأنه فعليًا أنا بأستبدل القيمة الموجودة في ال
variable مش في ال list بأستبدل القيمة الموجودة في
ال I يعني احنا تفاجأنا إنه هنا في الحالة هذه في ال
for loop هذه بيقرأ أول قيمة من ال countries
بيحطها وين؟ في ال I وأنا هنا بأستبدل القيمة الموجودة
في ال I مش في ال list يعني عشان أنا أستبدل في ال
list مباشرة بدي أصبح أقرأ من ال list على طول بدي
أصبح أعرف ال index اللي موجود في ال list فغيرتله
بقولتله والله بدل ما أنت تقرأ القيم تمام مر على
ال indices بتاعة ال list كيف؟ بقولتله for i in
تمام in range لن ال countries كأن حطته من range 0
إلى 7 أو 8 هكذا أنا قلت له مرري لي على كل ال
indices بتاعة ال list صفر واحد اثنين ثلاثة لأن
ما دام ال I تشير إلى index مش قيمة أنا لما أقارن
بده يقارن إيش؟ قيمة لما أقارن يعني أنا لما .. بده
أشوف القيمة إذا تساوي إسرائيل استبدل ليها فهنا
مفهومش أقوله I تساوي إسرائيل ليش؟ لأن ال I عبارة عن
إيش؟ ركزوا معايا يا جماعة ال I هنا عبارة عن رقم،
صح؟ لما أقوله I in range كذا، اه هنا ال I رقم، مش
قيمة، تمام؟ فلازم أقوله for countries I if
countries I يساوي Israel countries
I، حط فيها Palestine
طبعًا واضحة يا جماعة طيب نشوف سؤال ثاني خليني
الآن نأخذ بعض التمرين الموجودة في الكتاب طبعًا نشوف
بعض التمارين الموجودة في الكتاب طيب
هنا أنا رحت على الكتاب هذه الأسئلة موجودة في
chapter 10 طبعًا اللي هو في صفحة 349 طبعًا
صفحة 349 فيه طبعًا هأحل بعض الأسئلة اليوم وهأعطيكم
homework من الأسئلة هذه هنبدأ بحل سؤال .. سؤال رقم
اثني عشر اثنين السؤال إيش بيحكي؟ خلينا نقراه write
a program that reads a list of integers and
displays them in a reverse order in which they
were read يعني اقرأ لي أنت list of integers خلي
المستخدم يدخل list of integers ويعكس ليهم طبعًا في
عندي method جاهز اسمها reverse كيف يقرأ integers
احنا شفنا كيف نعمل while loop نخلي المستخدم يدخل
بيانات كلهم بتخزنه في ال list وبعدين بنعمل
reverse هذا السؤال مش هأحله هأحطه ك homework لكم
صفحة 349 chapter عشرة طيب هنتقل لأقل سؤال عشرة
ثلاثة طيب
هذا سؤال عشرة ثلاثة فكرة كويسة وممكن أحتاجها كثير
في تطبيقات write a program that reads some integers
between واحد لمئة and counts the occurrences of
each here is a sample run of the program يعني
بنعمل برنامج شكله كالتالي هو الآن فارجاني كيف
البرنامج بيشتغل enter integers between واحد لمئة
دخلي أرقام من واحد لمئة البرنامج إيش هياخد مني؟
هياخد مني مجموعة أرقام بفصل بينها إيش؟ space يعني
أنا بدخلي الرقم الأول space الرقم الثاني space
الرقم الثالث وهكذا بعد ما أخلص كل الأرقام بضغط إيش؟
إنتر إيش بده يطلع لي الآن؟ بده يحكي لي كل رقم كم مرة
تكرر يعني مثلا في الأرقام هذه اللي أنا دخلتها
اثنين تكررت كم مرة؟ مرتين الثلاثة تكررت كم مرة؟
مرة الأربعة تكررت مرة الخمسة مرتين الستة مرة
ثلاثة وعشرين مرة ثلاثة وأربعين مرة تمام يعني هو
بده يعد لي كم قيمة أنا دخلت كل قيمة كم مرة تكررت
طيب في سؤال زي هيك يا جماعة لما نجي نحل احنا حاول
تجزئة السؤال لأجزاء طبعًا يعني ليش؟ إن الواحد لو فكر
وقلّك أنا مش عارف أحل خلاص هأسيب السؤال فاضي لأ حاول
نقسمه لأجزاء أول جزئية اللي هي إدخال البيانات هذه
أعمل ال code تعالي إدخال واجهز البيانات في list
هذه مرحلة طبعًا وبعدين إيش أسوي أنا في ال list عشان
أنفذ الحاجة اللي بدهيا هذه مرحلة ثانية فخلينا في
الأول مرحلة نشوف مرحلة ال input يعني أنا أنا بده
أدخل أرقام بينها spaces وفي الآخر بده الأرقام هذه
تتخزن مثلا في list مش هيك احنا بنعمل مثلا في
البداية أيوة
طبعًا أكيد في الأول احنا بنكون عنده list فاضية ولا
تكون إيش؟ X وبعدين طبعًا لما تيجي عند الأرقام
بتضيفها وين؟ في ال list طيب بس هنا في اختلاف صغير
عن الأسئلة اللي كنا نأخذها السابقة إن في الأول كنا
ندخل الأرقام رقم رقم ونضغط Enter صح؟ وكل عملية
input تطلق لي رقم واحد آخذه أعمله و append صح؟
مش هيك كنا نعمل؟ هذه احنا شفنا كيف تنعمل بس هنا
مختلفة شوية لأن هنا بدخل الأرقام كلهم مرة واحدة
تمام؟ وبضغط enter يعني زمان كنا إيش احنا نعمل؟
نقول while true لما كنا ندخل رقم رقم نعرف list
فاضية ونقول while true تمام وبعدين نروح نعمل
input int مثلا input enter a number تمام
والرقم اللي بيجي بقول list.append
fn يساوي ناقص واحد اعملي break هذا ال code ممتاز و
شغال بس في حالة إيش؟ إن أنا لو بده أدخل أرقام واحد
واحد و enter لكن هنا هو مختلف الوضع شوية لأنه
بيقول دخلي كل الأرقام مرة واحدة وبعدين اضغط enter
وبعدين بنفذ ال code اللي هو بده إياه طيب يبقى اللي
بدنا نسويه الآن إن هو المستخدم هيدخل الأرقام
وبينها space بعدين بدنا نأخذ كل ال input هذا
ونجزقه لأجزاء ونحطه في list واضح إيش بدنا نسوي؟
كيف نسوي؟ لسه هنشوف كيف نسوي ما أخذناش احنا لسه كيف
نسوي هنشرح هذا الجزء من خلال مثال بس اللي لازم
نسويه إن الأرقام كلها بده جزق بينها بناء على إيش؟
هجزق بينها؟ بناء على مسافة صح؟ أنا عندي أرقام خمسة
.. ستة .. ثلاثين .. أربعة .. عشرين .. تسعة .. تمام؟
دخلتها كلهم مرة واحدة .. بدي أجزّيهم بناء على ال
spaces .. وأخذهم كل واحدة فيهم وأحطها في مكان في
list .. صاروا في list .. تمام؟ بس كيف هذا ينفذ؟
انتبهوا معايا ..
طيب أول حاجة بدنا input صح؟ فبدأ أقول x يساوي input
نشوف
السؤال إيش بيقول هنا؟ enter integers
between واحد and مئة
طيب كل حاجة الآن صارت .. طبعًا هو ال user هيدخل رقم
space رقم space رقم space كل حاجة هتكون موجودة
وين؟ وين هتكون مخزنة؟ في ال X أول ما ال user يضغط
enter الآن بده يروح .. انتبه معايا شوف ال method
هذه لو كان أنا عندي نص تمام؟ نص ممكن أجعل نص و
أعمل dot وانفذ method اسمها split
ماذا يعني كلمة split؟ Split يعني
جزء اقسم كلمة split بالانجليزي معناها اقسم جزء من
اسمها هذه method function موجودة x.split بين
القصين بنحط الحاجة اللي على أساسها بالانجليزي ممكن
تكون كلمة مثلا مش شرط تكون .. أنا هنا حاطط إيش؟
space .. هذا ال split هو بيقول لحالها لحالها
بترجّع لي ال list يعني
كل اللي موجود على اللوح هذا .. هذا كله لحاله مين
بتنفذه؟ split .. تمام؟ أنا لو عندي أي نص .. تمام؟
مثلا helloworld تمام أي نص بحطه في متغير x مثلا
بعدين بجيب بقوله x.split وبحط مثلا مسافة ايش
الناتج عن تنفيذ ال split هذه برجع ل list فيها كلمة
hello و فيها ايش world ليش لأنه مين الفاصل اللي أنا
حددته هنا ال space فرح قاله ال split جهزتلي list
فيها أجزاء النص اللي إجا عندي بناء على إيش؟ على
القاسم اللي أنا محدده هنا يعني فعليا عن طريق أنا
split يا جماعة جهزت لي من العناصر كلها في list واحدة
نتأكد من اللي أنا عملته لو روحنا طبقنا print list
احنا لسه لحد الآن بدنا نشوف ال input دخل الأرقام 6
,7,13,12,4,9 وضغط enter شايفين هاي list فيها
الأرقام 6,7,13,12,4,9 كيف؟ ليش؟ لأنه لسه بتعامل
معاهم أنهم نصوص لسه بتعامل معاه من النصوص يعني هو
كل اللي عمله أنه أنا دخلت له نص وجزأ النص مالوش دعوة
هو ده رقم وغيره هو اتعامل معاه أنه ايش؟ أنه نص طبعا
مش هتصحح أنت لازم أحولهم واحد واحد بس نشوف يمكن
السؤال مش محتاج أن أنا ايش؟ أن أنا أحول طيب يبقى
احنا أول جزئية اللي هي ادخال البيانات خلصناها بدنا
نفكر الآن في الجزئية الثانية ايش الجزئية الثانية
مطلوب فيها؟ مطلوب أنه كل عنصر موجود في ال list
نطبع كم مرة موجود كل عنصر موجود في ال list نعرف كم
مرة موجود ايش رأيكم كيف احنا نعرف العنصر كم مرة
موجود؟ أخذنا method قبل هيك حكيناكوا عنها اسمها
count صح ولا؟ يعني أنا مثلا لما أطبع list.count علي
هيعد لي كم مرة علي موجود بتكرر في ال list احنا مش
عارفين ال input مش عارفين ال input بس هو أنا ايش
طلبت في السؤال أنه لكل عنصر موجود في ال list بدنا
نشوف كم مرة اتكرر بالظبط هنعمله على عناصر ونقوله
لكل عنصر شوف لي كم مرة اتكرر بيعمل واحد لما يجزئ
السؤال لأجزاء و يفكر فيه بمنطقية باعرف أحله أنا
انطلب مني في السؤال أنه كل عنصر احكي لي كم مرة تكرر
مادام في كلمة كل عنصر معناه بلزمني ايش على طول لوب
تمام فبدي أقول for i in list ايش أعمل لكل i في ال
list تمام print list.count
صح ولا لا يا جماعة؟ مش هيك السؤال بده؟ بده كل
answer موجود في ال list أطبع له كم مرة اتكرر بس
خليني أرتب الحل شوية عشان نعمله زي ما هو بده وا ايش
بده؟ بده أطبع له الرقم اتكرر كذا times فبنقوله هنا
في ال print بيقولوا str(i) occurs
ايش اللي أنا عملته يا جماعة هنا؟ اللي مش فاهم
المصيبة كل
اللي عملته أنه أنا بالضبط رسالة كاملة عملت str(i)
حولت ال i لإيش؟ عشان أقول الرقم i أو العنصر i
اتكرر occurs تمام؟ وهنا ايش هذا ال count؟ حولته
لايش برضه؟ ل string وفي الآخر times يعني عدد من
المرات عشان تطلع الرسالة تماما زي مين؟ زي ما هو
الطالب يعني
الجواب أصغر من نص السؤال صح ولا؟ الجواب أصغر من نص
السؤال أول ما تقرأ السؤال بتحس ايش؟ عقدة ولا حاجة
مش فاهم الحاجة لكن لما يحلل الأجزاء بيلاقي ايش
بسيط فعليا هو طلب إنه لكل عنصر موجود في ال list
قولي كم مرة تكرر مادام أنا بحكي كل عنصر موجود في ال
list يبقى بالدعم اللوب لكل عنصر موجود في ال list
تقطع لي list.count(i) هذا الأساس اللي حولته ده ليش بس
عشان أجهز الجملة طب لسه ما كتبتوش يمكن نغير الحل مش
كامل ده لسه خليني أشوف الجواب بيطلع صح ولا لأ
تعالوا نعمل run
طبعا ما هو أنا مش لازم نحولهم integers count
بتعدوا كم مرة تكرروا خلاص سواء كان نص أو رقم اللي
هندخل الأرقام هي ستة سبعة عشر ستة ستة ثلاثة اثنين
ثلاثة أربعة أربعة سبعة عشر ثمانية طبعا وبعدين بضغط
ايش enter طبعا تعالوا نشوف الناتج وهل الناتج بيحقق
اللي أنا بدي إياه ولا لأ اه حكالي طبعا في space نقصت
ستة occurs كم مرة؟ ثلاث مرات، سبعة عشر occurs مرتين،
ستة occurs ثلاث مرات، ستة ثانية .. أيوة مين يفسّر لي
ليش طلع الناتج هيك؟ أيوة ليش؟ اه بالظبط يعني أنا
عندي ال list نفسها فيها خمس ستات تمام؟ اجيت على
الستة الأولى عديت لها كم مرة موجودة وطبع لي رأي
الستة اللي بعدها برضه عديتها ثاني وطبع لي تمام؟ يعني
لكل مرة هيتكرر فيها ال answer هيكرر عملية العد ال
count أيوة
حتى
لو شيلته ما فيه بعد واحد تمام؟ نفس الحاجة مش هتفرق
طبعا احنا بدنا الهدف في هال gate عشان نحل المشكلة
أنه كل عنصر مرينا عليه ما نمرش عليه ثاني صح ولا؟
ماشي بس أنا إذا شيلته هو بوب ما ضال لسه فيه بعده
يعني مش هيكون فيه قيمة أنا لو شيلته العنصر نفسه و
مادام فيه بعده مكرر اه ماشي اعمل شرط ايش يسوي فيه
لأ لأ شوفوا معايا هلقيت أنا بدي الخلاصة أنه كل رقم
مريت عليه ما أرورش عليه ثاني؟ أنه يبدأ
من حد ما .. ايش .. ايش ال issue زي بعض؟ أن ال
answer اللي في ال log مال على نفسه يعني كان نفس ال
issue ماها ده كيف بده أعرفها؟ أنه أنا زي مريت على
answer نفسي طبعا؟ أستاذ بستانسي مثلا مثلا أخذ مثل
رقم 17 ببطل من ال index 17
برضه مش هتفرق لأنه هلاقي بعده برضه عناصر لأ طالع
معايا فكرة ال trick سهلة جدا هلقيت
أنا كل الفكرة أنا لو مر علي الحالة ده في الحياة ايش
بسوي بروح مثلا باخد ورق خارجي هيك وبسجل بقول هذا
العنصر أنا مريت عليه على أساس أن أنا ما رحت عليه
ثاني برجع لمين؟ للورقة اللي عندي بشوف هل أنا موجود
عندي في الورقة ولا لا، إذا موجود عندي مسجل معناه
خلاص ما تعدوش ثاني، يعني مش هيك أنا ممكن أحل
المشكلة في الواقع، أنا الحاجة اللي عملتها بسجل إن
أنا خلصتها، تمام؟
المشكلة هي أن المتغير بيتغير قيمته بسبب تغيير
المستخدم المستخدم المستخدم المستخدم المستخدم المستخدم تمام؟
والله إذا السجل هذا العنصر مش موجود فيه معناه لسه
ايش أنا ما عدتهوش بعد ما أعده وأخلص بحطه وين؟ في
ال list هذه الجديدة تمام؟ ترجعت ثاني مرات على
العنصر ثاني قبل ما أعده بروح بشوفه هل أنا عديتة
قبل هيك ولا لأ؟ بشوف في ال list ولا لأ واضحة
الفكرة بشكل عام كيف أطبقها لجينا نطبقها تمام؟ فبدأ
أروح أعمل list ثاني اسمه مين؟ اسمه temp list
فاضي الآن كل عنصر مريت عليه for i in list if i not
in list not in temp أخذنا احنا if i in temp
في المحاضرة عشان نبحث عن عنصر موجود في ال list ولا لأ
هلقيت أنا كتبت if i not in temp ايش هي not in
temp؟ إذا ال i الرقم اللي مرت عليه مش موجود في ال
list، فده مش موجود في ال temp، ايش يعني الكلام ده
مش موجود في ال temp؟ يعني لسه جديد، أول مرة قمر
عليه، روح أعده،
وايش أعمل؟ أضيفه على ال temp
معناه أن هذا ال code هيتنفذ امتى؟ فقط إذا كان
العنصر غير موجود في ال temp مرة
ثانية ملخص الحل من البداية تمام هاي عندي أنا طلبة
input ال user هيدخل ال parameters كلهم فاصل بينهم
space عشان أحولهم ل list عملت ايش split بناءً على
الـ space لحاله ورجع ال list الآن بدي أمر على
العناصر اللي في ال list تمام؟ وبدي أعد كل عنصر و
أطبع كم مرة اتكرر لكن بدي أكون حريص أن العنصر اللي
مريت عليه ما أرورش عليه ثاني صح؟ فروحت عملت سجل خارجي
اسمه مين؟ اسمه temp هذا عمل زي variable أنا بخزن
فيه إن هذا مرّيت عليه بس ما قدرتش أعمله variable
لأنه أنا عندي عناصر كتير ممكن أحتاج أسجل فيها ال
list هذه إيش أكثر من حاجة مدام أكثر من حاجة بدي
أسجلها بينفعش أحط variable بحط إيش بحط list فإيديت
الـ list هذه بس عشان تقول لي إيش اللي أنا عدّيته وإيش
اللي لسه معدّيتهوش طبعًا فالآن كل عنصر مرّيت عليه أروح
أفحصه هل العنصر أنا عدّيته ولا لأ كيف يعني طبعًا أنا
هنا أقول if I not in temp يعني لسه أنا ما مرّيتش عليه
بالمرة أول مرة مش موجود في الـ temp طبعًا أكيد الـ
temp في البداية تشغيل البرنامج إيش بتكون؟ فاضية طيب
إذا العنصر مش موجود في الـ temp عدّيه واطبع لي كام
مرة ظهر وروح ضيفه وين؟ على الـ temp ورجع ثاني كام
من وين؟ في الـ for loop مرّ على العنصر اللي بعده والله
إذا العنصر not in temp مش موجود في الـ temp بعده
ثاني إذا موجود هذا الـ code ما له مش هيتنفذ مش هذا الـ
code معتمد على الشرط هذا مش هيتنفذ إلا لو العنصر
مش موجود لكن لو موجود آه مش هيتنفذ هيروح على العنصر
على طول إيش اللي بعده؟ هو هكذا الآن أنا لو عملت run
ستة
سبعة ثمانية ثمانية تسعة ستة ستة خمسة تمام تعالَ
نشوف الناتج اللي طالع عندي
انتر انتجر بين واحد لمية هيطلع لستة تكررت كم مرة؟
ثلاثة سبعة تكررت مرة ثمانية مرتين ما فيش عندها تكرار
واحد هنا هيقول طيب يعني هيك البرمجة صعبة صارت يعني
كيف احنا بنوصل للجواب من أول مرة زي هيك؟ تمام هذه
المهارة اللي واحد بياكتسبها مع إيش مع الممارسة، كل
ما برمج أكثر كل ما يشهر أكثر، هل لغة البرمجة والـ
python سيدرسوها في إيش؟ في المراحل الابتدائية في
دول أوروبا، لإيش؟ لأنه بيلاقوا أن البرمجة بتمشّط
التفكير الذهني والتفكير المنطقي عند الطلاب، تمام؟
فلما الطالب يصير يجرب ويكتب code زي هيك ويعرف كيف
يفكر ويحلل، بيصير عنده قدرة كبيرة في حل المشاكل،
مش بس بمشاكل برمجية، حتى في المشاكل في الحياة،
بيصير يفكر تفكير منطقي، طب أنا إيش أعمل؟ آه أبدأ
أجزّئ المشكلة لأجزاء، هاي المشكلة هادي حلها هيك هيك
هيك، المشكلة الثانية زي هيك، تمام؟ هذه بتيجي مع
الممارسة كل ما الواحد فكر يحل مسائل أكثر كل ما
الواحد صار أفضل في البرمجة البرمجة مادة مراجعتها
مش أنه أنا بمسك الكتاب وبقعد بحفظ زي المواد
التانية لأ حلها مراجعتها بس حل أسئلة وممكن الواحد
يدخل الامتحانات بدون ما إيش؟ آه ما يراجع البرمجة ممكن
الواحد يدخل الامتحانات بدون ما يراجع برمجة بالمرة
كيف؟ خلاص أنا مدرب على حل ومتقن مش محتاج إن أنا
أراجع بالمرة الآن
خلّيني أحل كمان سؤال سريع اللي هو سؤال مثلًا طيب
هذا سؤال بسيط write a program that reads an
unspecified number of scores اكتب لبرنامج بيقرأ
unspecified number of scores يعني بيقرأ درجات
unspecified إيش يعني؟ غير محدد يعني خلينا نقول
بيعملها بالـ while صح ولا زي اللي كنا نعملها في
المحاضرات السابقة طيب بعدين بعد ما يقرأ الأرقام
and determines how many scores are above or equal
to the average يعني بعد ما دخل العلامات مين فيه
علامات how many scores يعني طلب مني عدد صح؟ how
many إيش يعني؟ بده عدد العلامات اللي أكثر من الـ
average تمام؟
يعني مثلًا أنا دخلت علامات تسعة وتسعين، ثمانين،
سبعة وسبعين، ستين، خمسة وخمسين حسب الـ average كل
عجدها إيش مثلًا سبعين هيقول لي أن هناك 3 علامات أكثر
من 70 واضح الفكرة كيف؟ تمام؟ and how many scores
are below the average؟ يحتاج أيضًا كم علامة أقل من
مين؟ من الـ average؟ طيب،
دعنا نحل السؤال هذا، أول شيء ندخل مين؟ ندخل
الدرجات، دعنا نعملها while loop تمام؟
زي اللي أخذناها في المحاضرة الماضية while true
تمام بدي أقول له هنا score scores
انتبهوا معايا يا جماعة score = int(input("enter a score")) تمام دخل درجة حولتها لـ int وبعدين بدي
آخذ الـ score هذه لسه بدو أضيفهم على مين؟ خلينا في
الأول نخزن كل حاجة في الـ list وبعدين إيش بنفكر
كيف نحل السؤال أنا يا جماعة لسه ما عملتش حاجة كل
اللي بعمله إيش؟ إني بقرا الـ score وبعدين عشان يطلع
من الـ loop if score يساوي ناقص واحد بدنا
نعمل break لحتى الآن هذا الـ code مش جديد تمام؟ هذا
كل اللي بيسوي إنه بيقرأ العناصر وبخزنها وين؟ في الـ
list آه معلش أنا عشان بكتب Java فبتعود على هذا طيب
لأن صارت عندي العلامات كلها موجودة في list إيش طلب
مني؟ كان علامة أكثر من average وكان علامة أصغر من
إيش؟ من الـ average مفهوم منطقي إنه لازم في الأول
أحسب الـ average بدي أحسب الـ average في ضربة
واحدة بدي أقول له average يساوي sum(scores) على
الـ N
الـ scores صحيحة الله يا جماعة، هاي جبت مين؟ جبت
الـ average، الآن إيش طلب مني؟ كان علامة أكثر من الـ
average، إيش رايكم كيف نعملها هذي؟ كيف نجيب؟ كان
علامة أكثر من الـ average؟
آه بعمل for بمرّ على العلامات طبعًا كل علامة أكثر
من الـ average أخزن مش .. أنا ما بدي العلامات أنا بدي
عددهم مدام عددهم بعمل counter طبعًا لحظة إن هو طلب
مني عدد العلامات الأكثر من الـ average والأقل يبقى
كم counter يكون عندي؟ اثنين طبعًا فبدي أقول له
count1 تمام؟ وcount2 يساوي صفر هنا أنا
عرفتهم متغيّرين صح؟ قيمتهم إيش؟ قيمتهم صفر الآن
بعمل for loop for i in إيش؟ الـ scores مرّري لي على
كل درجة موجودة في الـ scores if الـ i إيش؟ أكبر من
الـ average تمام؟ ضيف الـ count += 1 count
واحد صح؟ إذا أكبر من أو يساوي average زي الـ
counter else ما فيش ده أحط له f ثاني else تمام الـ
counter الثاني زائد يساوي واحد counter2 يعني
يا جماعة هاي الحل يعني كل المراحل هذه اللي فوق هذه
إيش فايدتها؟ أدخل صح؟ هذه سهلة المفروض وهذا السطر
لحساب مين؟ الـ average وهنا عرفت two counters إنه إيش
قيل في السؤال how many تمام؟ وبعدين مرّيت عن مين؟
عن scores واحد واحد تمام؟ كل score أكثر من أو
يساوي average روح زيد الـ count الأولاني غير هيك
إيش يعني؟ إذا أصغر من الـ average زيد الـ count
الثاني وفي الآخر بقول له print بدي أقول له marks
scores greater than or equal to average يساوي count1 هذه
scores عشان أطبع إيش العلامات scores less than
Average أطبع لي الـ count الثاني نقل مرة نجرب ندخل
درجة تسعين ثمانين سبعين ستين أربعين بكفي هي ناقص
واحد تمام آه is not int
طيب
أنت لأ score حولناها لـ int فالـ score يساوي نقطة
append scores
انت
object is not iterable
طيب خليني بس نتأكد جزء جزء
طب الـ loop شغالة الـ count لحظة
شوية شوف طيب
لحد ما تلقاه ما فيش خطأ
ماشي هلّأ يمكن يشتغل ثمانية وثمانين سبعين ستين
مش عارف بس فصلت هدول الـ count خلت كل واحد لحاله
اشتغلت الصح المهم فكرة السؤال واضحة يا جماعة آخر
حاجة في homework يا جماعة
فيهم work ضروري تحله الأسئلة هذه هفتحله إن شاء الله
الـ assignment على الـ model تمام اللي هو سؤال من
الكتاب سؤال واحد واثنين وأربعة وستة وثمانية و
ثلاثة عشر تمام سؤال واحد واثنين وأربعة وستة وثمانية و
ثلاثة عشر كل سؤال بتحله في ملف لحاله و في الآخر بتجمع
الملفات بتحطوها في مجلد برقمكم بتضغطوه وبتبعتوه
كملف