تمام السلام عليكم يا جماعة اليوم إن شاء الله هنكمل
في مراجعة اللي أخذناها في مساق Python 1 إن شاء
الله المحاضرة الماضية بدأنا شوية review يعني رجعنا
مثلا موضوع ال if statement شوفنا في أخر سؤال حلناه
مثلا موضوع السؤال اللي بدخل فيه ال mark علامة
الطالب بطلّع لي ال grade تبقى تمام؟ أيضا راجعنا في
نهاية المحاضرة شوية موضوع ال for أو ال loops
بالشكل العام هنكمل اليوم في بعض الأسئلة العملية تمام
اللي من خلالها هراجع اللي أخذناها في Python 1 طيب
الآن
يا جماعة فرضا أنا بدأت أحل سؤال write a program
that reads a number and prints its factorial بدي
أعمل برنامج أو قبل مضروب الرقم خليني أشوف سؤال
أسهل منه شوية مثلا
هذا السؤال حلنا نحله تاني write a program that
prints the even numbers from 50 to 100 إيش مطلوب
السؤال؟ بدنا نطبع كل الأرقام الموجودة من خمسين من
خمسين لـ 100، الزوجية فقط طيب الآن أنا مادام بحكي من
خمسين لـ 100 معناه أنه في عندي تسلسل أرقام معناه أنه
هيك أنا بفكر في تسلسل أرقام معناه أنا بستخدم loop
طبعا في عندنا for و while مين أفضل نستخدم ال for
مادام أنا عارف نقطة البداية و النهاية يبقى بستخدم
ال for أفضل فبجب أقول for I in range خمسين إلى
101 لأن أنا بدأت أطبع الـ 100 طيب الآن هذا
هيمرني على كل الأرقام من خمسين لـ 100 تمام لكن أنا
اشترطت قلت بس بدأت أطبع ال even يعني الآن في عندي
شرط موجود على الرقم اللي أنا بدأت أطبعه لو أنا عملت
print زي أيها هأطبع الرقم كل الأرقام من خمسين لـ 100
يعني هاي لو أنا عملت run
هييطبع لكل الأرقام هي شاشة الناتج من 50 لـ 100 أنا
طلبت بس أطبع الأرقام الزوجية طبعا كيف أطبع الأرقام
الزوجية بدي أحط فحص داخل ال for على أساس كل رقم
بمر عنه أتأكد أنه رقم زوجي طيب ماشي عشان أتأكد أنه
رقم زوجي بدي أقول if ال I باقي قسمته على 2 يساوي 0
احنا بنعرف الرقم الزوجي دائما باقي قسمته على 2 يساوي
0 print I لاحظوا أن ال if statement جوا ال for طيب
هاي طبعة الأرقام الزوجية من 50 لـ 100 هاي 50 52 54
50 طبعا الحل الآخر أنه أنا ممكن أعمل إيش يعني
مباشرة أطبع
أو أحط في ال range أحط 2 علشان الزيادة تكون 2
معروف إذا الزيادة كانت تكون 2 يجيب للأرقام الزوجية
تمام؟ مباشرة بس طبعا هذه بتظبط ليش لأن أنا بدأت من
وين؟ من 50 لإن لو حكيت من 51 هتظبط؟ آه لأ تمام؟
فبدي أكون أعرف أنا إيش الحل اللي بينفع أستخدمه بناء
على ال range الموجود عندي طيب ناخذ السؤال فكرة
ثانية لو أنا طلبت مجموع الأرقام الموجودة من 50 لـ
100 مجموعة الأرقام الموجودة من 50% من 50 لـ 100
طبعا نفكر شوية هنا عشان أجيب مجموعة الأرقام من 50
لـ 100 أول حاجة مادام أنا حكيت range طبعا يبقى أنا
بدي أستخدم loop عشان أمر على الأرقام هذه من 50 لـ
100 طبعا هي ال loop موجودة عندي هي من 50 لـ 101 طب
كيف هنا أنا في ال for loop بمر على كل رقم على حدّه؟
يعني همر على إيش؟ على خمسين و واحد و خمسين و اثنين
و خمسين و ثلاثة و خمسين و هكذا طب أنا ما طلبتش هيك
أنا إيش طلبت؟ مجموع الأرقام لأ كلها من الخمسين
لـ 100 كيف أنا بدي أجيب مجموع الأرقام اللي موجودة من
الخمسين لـ 100؟ الحل هذا إيش هأسوي؟ أنه أنا أعرف
متغير تمام؟ قبل ال loop معنى المتغير هذا هيكون
فاضيا بحيث أن أنا كل رقم أمر عليه أخذ وظيفه عن
المتغير طيب يا جماعة أنا بدي أجيب مجموعة الأرقام
من 50 لـ 100 تمام؟ المشكلة في ال for loop أو أي
loop أن أنا بأمر على كل رقم لحاله طب كيف أنا بدي
أجيب مجموعة كل الأرقام هذه؟ هذه عاملة زي أنا عندي
مجموعة شجر، كل شجرة عليها تفاحة، أنا بدي أجمع
التفاح كله، إيش بعمل؟ بجيب سلة فاضية في الأول
معايا، تمام؟ و بأمر على .. بشيل السلة و بأمر على
الشجرة الأولى و بأجيب اللي فيها و بحط وين؟ في
السلة، و بعدين بروح على الشجرة الثانية، يعني أنا
في نفس اللحظة بقدر أجيب من كل اللي في الشجرة مع
بعض؟ لأ أنا في اللحظة الواحدة بأمر على شجرة واحدة
فبأمر عليها واحدة واحدة وكل واحدة بأمر عليها بأجيب
اللي فيها و بحط وين في السلة اللي موجودة عندي و
أنا كده عشان أجيب أنا مجموعة الأرقام الموجودة من
الخمسين لـ 100 بدي أعمل سلة في الأول اللي هي إيش
ممثلة في البرمجة مش سلة تمام متغير تمام وين بعرف
المتغير إذا بدي أعرفه برة ال loop تمام وليكن مثلا
المتغير اسمه sum قيمته كده صفر ليش zero لازم يكون
فاضيا لأن كل رقم بأمر عليه بأخذه و بأضيفه في ال sum
إيش يعني هذا ال sum plus يساوي I؟ sum plus يساوي I
هذه نفسها تكافئ sum يساوي sum زائد I يعني أنا قاعد
بضيف على من؟ على ال sum طيب و بعدين إيش بعمل؟ تمام؟
هيك أنا قاعد بأمر على أرقام من خمسين لـ 100 و كل واحد
بضيفه على ال sum المجموع النهائي وين هيكون؟ في ال
sum هي print sum
معايا يا جماعة؟ طيب السؤال؟ خلينا نجربها لقيت عملت
run هي بقول مجموع الأعداد من خمسين لـ 100 هو خمسة
ثلاثة آلاف و تمامية و خمسة و عشرين لأن خمسين زائد
واحد و خمسين زائد اثنين و خمسين و هكذا لعند 100
طبعا طلع الرقم هذا طيب لو عملت هيك هذا صح ولا غلط
بالضبط هذا معناه أن كل لفة في ال loop هيطبع الرقم مش
هذا مش هذا اللي بدي أنا طبعا طبعا مثال ثاني أنا
بفرجيكم الأغلاط اللي بيجروا فيها الطلاب مثلا أنا
control X حطيت ال sum زي هيك
هذا صح ولا غلط الحل؟ إيش رأيكم؟ اللي ورا هناك،
إيش رأيكم الحل هذا صح ولا خطأ؟ تمام؟ ليش خطأ؟
عشان جابوا هم خطأ؟ تمام،
هيك أنا أعمل زي إيش؟ زي لما أخلص من الشجرة، بأقب
السلة، و بروح أعبّي مجددا تمام؟ و هذا غلط،
المفروض أنه أنا أظل أضيف على ال sum، تمام؟
هنا لأ هو الأصل لأ بينفعش هو أصلا المفروض لازم
السطر اللي بعد ال for يكون فيه indentation لازم
ال for يكون فيها حاجة صح ولا؟ هيك أنا كأني عملت
for ما فيش فيها أي عمر تمام؟ واضح و أنا الغلط؟
تمام؟ يعني لازم ال sum هذا يكون قبل ال loop و
أثناء ال loop أنا بضيف عليه ال data و بعد ما يخلص
ال loop بطبع محتوى ال sum ماشي يا جماعة؟ طيب الآن
سؤال ثاني شبيه فيه لو أنا طلبت منه نعمل برنامج
يحسب لـ factorial تبع رقم ال factorial لرقم معين
أول حاجة إيش هو ال factorial أو المضروب؟ تمام؟
اللي هو مضروب الرقم تمام؟ إيش هو مضروب الرقم؟
تمام؟ مضروب الرقم
هي حاجات واحد بيقول جلبت رياضيات البرامج لأ هي
حاجات بسيطة مضروب الخمسة هي إيش؟ واحد في اثنين أو
هي مثلا خمسة في أربعة في ثلاثة في اثنين في واحد
مضروب العشرة عشرة في تسعة في ثمانية يعني مضروب ال
N في N ناقص واحد في N ناقص اثنين لحد اثنين في واحد
عشان أعرف أحل السؤال هذا بطلع أول حاجة مثلا في
مضروب الخمسة بألاقي مضروب كل الأرقام من خمسة لعنده
إيش لعند واحد هذا الشكل بإيش يوحي لنا أنا كيف ممكن
أمثله بالبرمجة لما يكون عندي تسلسل أرقام من خمسة
لإيش من خمسة لواحد for loop يعني أنا لاحظ أنه أنا
كيف لازم أعمل و بدي أمر على كل الأرقام من خمسة
لواحد و أضربها في بعض صح ولا يبقى أنا عندي for
loop من وين؟ من خمسة لواحد صح ولا بقدر أعمل for
loop من خمسة لواحد أو مش خمسة لواحد هي المفروض أن
أنا أدخل رقم الـ in و أعمل for loop من الـ in من الـ in إلى
واحد صح ولا يعني تبدأ من عند الـ in و تنتهي وين عند
واحد نقدر نعملها ولا لا نفكر خلينا نعملها مع بعض
تمام أول حاجة بندخل الرقم هاي الـ in int input
enter a number تمام؟
لحظة احنا أخذناه و خزنناه وين؟ في الـ .. الآن بدي
for loop تمر على الأرقام من وين لوين؟ من N على
المثال اللي عندنا من N لحد إيش؟ لحد واحد فبدي
أقوله for loop for I من وين نقطة البداية؟ اللي
هي N نقطة النهاية
لأ إيش نقطة النهاية؟ إيش أكتب؟ مين يقول لي؟
بالظبط صفر طبعًا لحد لازم أعمله هيك ليش لازم أعمله
هيك؟ مين يقول لي؟ أخذناها المرة الماضية مش أخذنا
كيف نعمل loop معكوسة أنا أبدأ and in و عشان end
عند الواحد بحط صفر فهو لأ دائمًا قلنا الخانة
الثانية دي اللي هي المكان اللي بدي أنتي .. لازم أحط
النهاية ناقص واحد بالظبط تمام؟ واضحة ولا لأ؟ النهاية
ناقص واحد أنا إذا بدي أنهي عند الواحد بحط صفر لمقن
الـ follow من صفر لعشرة لو بدي أنهي عند العشرة بحط
11 تمام؟ واضحة يا جماعة يا قادي؟ و بحط ناقص واحد
هذه
مفهومة ولا لأ؟ اه range عفوا هذه نسينا الـ range
تمام؟ واضحة هذه يا جماعة بدأت عند الـ N وحطيت صفر و
بعدين بقلب ناقص واحد
هل جيت لسه؟ احنا في الأول خلّيني خطوة خطوة أول
حاجة اكتشف أنه بدنا لوب بدام أنا عندي سلسلة أرقام
هد ممثلها بإيش أقبلوه برضه أشغل بخي شوية تمام؟ لأن
أنا متطلع اللوب هذه أصلا 5×4×3×2×1 هي نفسها
1×2×3×4×5
ولا لأ التبديل
في الضرب عادي وفي الجمع عادي بجانب من أول ممكن
أستغنى عن الـ for loop المعقوسة و الناقص مخي عشان
أظبطها ممكن أعمل for loop عادية تبدأ من واحد إلى n
زائد واحد صح ولا يا جماعة؟ لو جيت واحد بيقول طب
أنت ليش من أول يعني جلبت مخنا و أدتنا المعكوسة؟ لأ
احنا بالتدريج شوية شوية، تمام؟ عشان نفهم هذا و
بعدين ليش احنا كيف اتدرجنا في التفكير، تمام؟ أثر
الضرب إبدالي، فممكن أنا بدل ما أعمل من N إلى 1،
أعمل من 1 إلى N، صح ولا؟ بس لاحظ أنا بدأت من وين؟
من واحد وانتهيت عند إيش؟ عند N زائد واحد مش N
تمام؟ حط N زائد واحد عشان ينتهي وين؟ عند الـ N صح
أنتوا معايا ولا لأ يا جماعة؟ طيب، هالجامعة إيش
المطلوب؟ ماشي خلصنا الـ for loop، هيك أخذنا نص
العلامة، طبعًا ضايق نص النص الثاني من العلامة، إيش
هو؟ إنه هو طالب المضروب، احنا ماشي عملنا الـ for
loop، طب إيش المطلوب هالجامعة؟ أنا اللي بتوقع هو
المفروض ينعمل إن الأرقام هذه اللي بمر عليها،
المفروض كلها تندرب في بعض، طبعًا، طب كيف نخليها
تندرب في بعض؟ يعني هنا أجينا على نفس المشكلة
الأولى تحت الجامعة، إنه أنا في نفس اللحظة بمر علي
إيش؟ على رقم واحد؟ صح ولا؟ يعني أنا بمور .. بعرفش
كل الأرقام عشان أضوبها، مش موجودين عندي كلهم مع
بعض، صح ولا يا جماعة؟ أنا بمور على رقم واحد، طب
كيف بدي أعمل أو أ .. أ .. أضمن أن الأرقام كلها
هتنضرف في بعض؟ مين عنده فكرة ممكن يقولنا إيش نعمل؟
أو .. لحظة، مين؟ أيوة، تفضلي
قبل الـ four تمام هي منيجي نعمل متغير بديش أعمل
اسمه some بدي أعمل اسمه product جداش
قيمته؟ صفر تمام طيب و بعد الـ four بنكتب صفر يساوي
ضرب الـ a i حسينا نعمل سفرية دماغ طيب ماشي اه
أزميلكوا أزميلتكوا فكرت صح جرت لو حطته صفر تصير
مشكلة طب شوفوا كيف أنا هحل السؤال هذا هقول product
ضرب يساوي I و بعدين print product شوفوا كيف حلت
السؤال أنا يا جماعة خلاص هيك الحل كامل تمام اللي
سويته أنا زي ما اتفجنا أن أنا بدّه أمر على أرقام و
كل رقم بمر عليه بدّه أضربه زي ما أنا كنت في المثال
الأول، كل رقم أمر عليه أضيفه على السلة، هل جيتها
مادة سلة من نوع آخر؟ سميتها إيش؟ Product قيمتها
إيش؟ واحد، هل جيتها؟ أنا عارف ليش واحد، إذا أنا
عملت الـ for loop من 1 ستنتهي عند الـ N أول قيمة للـ I
ماذا ستكون؟ 1 نفترض أن أنا دخلت الـ N خمسة، ماذا
سيفعل؟ سيضرب الـ product، ماذا يعني product ضرب
يساوي I؟ نفس الشيء، product يساوي product ضرب I
هييجي الـ product قيمته جداش واحد هيدربه في الـ I
اللي هي إيش واحد الناتج واحد بيحطه في الـ product
ده أثر الـ product مجدتش قيمتها واحد تمام؟ خلصنا
لسه اللي هو بمالها مخلصتش هيحط الـ I بجداش اثنين صح
ولا؟ يا جماعة هيدرب الـ .. الاثنين في واحد النتيجة
اللي في الـ product هتصبح اثنين صح ولا؟ خلصنا؟ لأ
هيروح يحط الـ I بإيش؟ بثلاثة هيدرب الاثنين اللي
موجودة في الـ product في ثلاثة اللي هي الـ I صار ستة
في الـ product صح ولا؟ لحظة مجدد بضرب في القيمة
الموجودة في الـ product طبعًا؟ صارت الـ I بأربعة هيدرب
الأربعة الـ I في الستة اللي موجودة في الـ product
صارت أربعة وعشرون بعدين صارت خمسة الايه هيضرب
الخمسة في أربعة وعشرين صارت مائة وعشرين يعني فعليًا
أنا بدأت من واحد وبعدين ضربته في اثنين وبعدين
ضربته في ثلاثة والنتيجة كلها ضربتها في أربعة و
النتيجة كلها ضربتها في إيش؟ في خمسة زي ما أنا في
المثال السابق كل رقم كنت أمر عليه كنت أضيفه على
الصم هرجع الاختلاف أن كل رقم كنا أمر عليه بدربه في
إيش؟ عشان أطلع في الآخر حاصل ضرب كل إيش؟ كل الأرقام
واضحة الفكرة يا جماعة؟ يعني تقريبًا تقريبًا نفس
السؤال السابق بس بدأ للجامعة ضرب وهذا هو إيش الـ
factorial واتفجنا أن أنا ممكن بدل ما أضرب من
الكبير للصغير هي نفسها أضرب من الصغير للكبير
عشان توفي إتراشن، ممكن تحطها للاثنين، لأن الضرب في
واحد مش هيغير النتيجة، طبعًا لازم الـ product يكون
قيمته واحد، لازم، لو حطته صفر، مشكلة، لأن الواحد
هو المحايد الضربي
أنت رأى number هاي خمسة هاي طلع الناتج إيش؟ مائة و
عشرين طيب نكمل إيش؟ واضح السؤال يا جماعة؟ هك و
انبسطه؟ هل جيت الضو واضح والشرح واضح؟ ولا لسه فيه
مشكلة؟ طيب نمر على السؤال اللي بعده
طيب
شوف السؤال هذا write a program that reads a number
and prints whether it's prime or not إيش يعني
السؤال هذا؟ بدنا نعمل برنامج، بندخله رقم، و
بيقول لي هل الرقم هذا أولي ولا مش أولي؟ ما هو الرقم
الأولي في الرياضيات؟ هو رقم اللي بيقبل القسمة فقط
على نفسه وعلى واحد انتبهوا معايا، احنا هذه الأسئلة
مش عشان نتعلم رياضيات، عشان نتعلم طريقة التفكير،
تمام؟ صح الأمثلة رياضيات، لكن الهدف كيف الواحد
يفكر، ماشي؟ طيب، إيش هو الرقم الأولي؟ هو الرقم
اللي بيقبل القسمة على نفسه وعلى واحد، يعني قواسمه
جداش عددهم؟ اثنين، قواسمه عددهم اثنين، أيوة
طيب، من عنده فكرة كيف نعرف الرقم أولي أو مش أول؟
طيب عشان نتناقش .. أيوة تفضلي إيش .. كيف نعرف؟
إذا أنا بأخذ رقم من المستخدم وبعدين نفحص الرقم
هذا .. يقبل نفسي ما أقولش على واحد .. يعني ..
بيكون .. وبعدين يفحصوا على واحد .. اثنين .. ثلاثة
.. لا تسمع .. لعند الرقم نفسه جد .. طيب .. أذنكوا
أفكر الصح .. بتقول ماشي .. بدخل رقم .. و بصير
أفحص نتيجة قسمة الرقم على كل الأرقام من واحد .. لحد
إيش؟ لحد الرقم نفسه طبعًا طيب كيف بدي أنفذها كبرمجة
هذه؟ ماشي كلامك سليم طبعا بدي أفكر هل جيت اه يعني
هل جيت أزمنتكوا كتفكير منطق بتقول ماشي أنا إيش
بسوي مثلا دخلت رقم سبعة طبعا بدي أمسك كل الأرقام
من واحد إلى سبعة و أجرب سبعة على واحد جدّيش سبعة على
واحد سبعة بيقبل القسمة عليه بدون باقي؟ اه صحيح يبقى
هذا إيش قاسم يعتبر، إيش هو القاسم اللي هو بيقسم
الرقم بدون باقي؟ سبعة على اثنين
سبعة على ثلاثة في باقي، سبعة على أربعة في باقي،
سبعة على خمسة في باقي، سبعة على ستة في باقي، سبعة
على سبعة فيش في باقي، كم صح طلع عندي؟ بعد الصحّات،
طبعا طلع عندي صحين، طلع عندي صحين، مدام صحين
بالظبط هو عدد إيش؟ عدد أول تسعة كيف أعرف إنه أول
ولا لا؟ بتجرب تسعة على واحد بيقبل قسمة بدون باقي
تسعة على اثنين لأ تسعة على ثلاثة لأ تسعة على أربعة
لأ تسعة على خمسة لأ تسعة على ثلاثة لأ تسعة على
خمسة لأ تسعة على ستة لأ تسعة على سبعة لأ تسعة على
ثمانية لأ تسعة على تسعة لأ كم صح عندي؟ ثلاثة أكثر
من اثنين يبقى مش أول صح ولا لاش هذا الكلام حليناه
بالـ .. بالكلام كيف ننفذ هذا الكلام كبرمجة تمام
ايوه تمام
أول حاجة لازم يكون عندي for لازم for من وين لوين
من واحد إلى الرقم نفسه تمام طيب داخل الـ for بدي
أفحص أفحص إيش الـ واحدة واحدة احنا لكل رقم بمر عليه
في الـ for بده يجي له أشوف باقي قسمته خلينا خطوة
خطوة أول حاجة نطلب ادخال الرقم يساوي input enter
a number
بعدين بدي أعمل for loop for i in range من واحد إلى
n زائد واحد هيك أنا مريت على من؟ على كل الأرقام من
واحد إلى الرقم نفسه for i in range من واحد إلى n
زائد واحد طيب لكل رقم إيش العملية اللي بعملها؟
بشوف باقي قسمته على الـ i مش هيك بتعمل أنا اللي ..
اللي .. اللي شرحته في الكلام بحاول أنا أطبقه، تمام؟
فبدأ أقول له if .. if مين على مين؟ if الـ m الرقم
اللي دخلته باقي قسمته على الـ i يساوي صفر، إيش
يعني؟ بيقبل قسمة بدون باقي، إيش أعمل؟ أحط عليه صحّة،
تمام؟ و أعد الصحّات في الآخر طبعا هذا .. ايوه ..
هلقنا .. صحّات و نعدّهم .. هذا بنعمله احنا بالبلد
هيك و احنا قاعدين .. قاعدين نتعرض .. تمام؟ لكن في
البرمجة .. كيف بنمثلها؟ بنعرف بالظبط عدّة .. تمام؟
و بنزيد العدّ .. تمام؟ كم مرّة طالع الباقي القسمة
صفر .. تمام؟ فبنعمل counter أو إيش نعمل قبل الـ loop
تمام برّا هنا ليش برّا تفرق خالص يعني مكان السطر
بيخرب الشغل كلّه برّا ليش لو حطيته جوا معناه كل لفة
بدون صفر تمام counter قيمته جدّيش صفر فكل ما تلاقي
أن باقي قسمته على i يساوي صفر بيقبل القسمة بدون
باقي روح زيد الـ counter إيش تمام بواحد
وضحّتها يا جماعة هذي؟ طبعا؟ الآن أنا كل اللي بديّه
يدلّي إن الرقم هذا أول أو مش أول هو مين الـ counter
بالظبط فبعد الـ loop بعد ما خلص الـ loop كله بتطلع العينين؟
لاحظ وين بدّك تبقى لجهة السطر؟ برّا الـ loop طبعا؟
ما تغلطش و تحطّه جوا الـ loop بكرا في الامتحان المسافات
مالها و هو بتفرق، بتقول هي لأ هي دي برّا، هي لأ هي دي
جوا، هحسب عليك، تمام؟ جوا بتفرق خالص عن برّا،
تمام؟ فبنقول له يعني if الـ counter تمام يساوي
اثنين، تمام؟ print still
in is prime ليش عملت هيك؟ عشان أطبع إن الرقم عبارة
عن الـ prime و لأن الرقم رقم بدي أحوّله لإيش لازم
أطبعه زي نفسي تمام؟ حدّ فاهم حاجة يا جماعة؟ طيب
واضح كيف تسلسل التفكير كيف أنا فكرت فيه؟ في الأول
بفكر فيه زي هيك بقول اه ماشي و أنا بدي أشوف الرقم
prime بدي أشوف أمرّه على كل الأرقام من واحد إلى
الرقم نفسه و أعدّ كم قاسم للرقم كيف أبدأ؟ بعمل
counter و أمر على الأرقام for loop و كل رقم بمر
عليه بشوف باقي قسمة الرقم على الرقم اللي بمر عليه
إذا باقي القسمة صفر زيد الـ counter بواحد في الآخر
بطلع الـ counter إذا الـ counter اثنين بعرف إن الرقم
ماله أول تعالوا نعمل run دخل الرقم وليكن ما فانت
تسعة ما طلعش حاجة يعني أنا ممكن .. ليش؟ لأن بدي
أقول له هنا else على أساس أقول له هنا اطبع لي not prime
is
not prime يعني إذا كانت اثنين هاي
تسعة تمام هاي تسعة not prime تمام هاي سبعة تمام
هاي إيش السبعة الـ prime طب لحظة بدنا إيش احنا هلق؟
هذا الحل مفهوم .. بدنا نحسّن الحل .. كيف نحسّن الحل؟
بالظبط نقلّل الخطوات .. كيف نقلّل الخطوات؟ الآن يا
جماعة مفهوم بديهيا و منطقيا .. تمام؟ أن أي رقم في
الدنيا بيقسم على نفسه .. و أي رقم في الدنيا بيقسم
على واحد .. تمام؟ فـ ..يعني ممكن احنا نحسّن الحل كيف
إن أنا بدل ما أفحص من واحد لأن طبعا مفروض منه إن
كل رقم بيقسم على واحد يعني هل الـ counter هتكون
قيمته أقل من اثنين ممكن؟ مستحيل تكون أقل من اثنين
طبعا يبقى أنا ما فيش دا أصلا أفحص إذا الرقم بيقسم
على واحد و إذا الرقم بيقسم على نفسه لأن هذه
مفهومين مالها بديهية طبعا فانا ممكن أفحص إذا الرقم
بيقسم
نقص واحد إذا الـ counter صفر تمام بكون ماله الـ
prime صح ولا لأ أنا اختصرت إيش خطّين فهمتوا عليه
ولا لأ يا جماعة يعني أنا بدي أجي هنا و أقول له ابدأ
لمن اثنين إلى إيش إلى n تمام و أقول له إيش هنا إذا
الـ counter صفر أنتم معايا ولا لأ؟ إذا الـ counter
صفر بعتبر الرقم الـ prime هاي تسعة إيش كتب ليه؟ not
prime ليش not prime؟ لأنه لما مر من اثنين ل ثمانية
تمام؟ في رقم بيقسم التسعة اللي هو ثلاثة اختصرت
خطّين، بدنا نختصره أكثر كمان مين يقول لي كيف نختصره
أكثر؟
طيب انتبه معايا هلّق أنا إيش بسوي؟ بمسك كل
الأرقام أول حاجة أنتم في الحتّة اللي هم فاهمين؟ اه
بدي أمسك كل الأرقام من اثنين إلى ما قبل الرقم
تمام؟ إذا في أي رقم بينهم بيقسم الرقم على طول ممكن
أقول إن الرقم ماله not prime صح ولا افترضت أنا
عندي رقم زي مثلا 45 رقم 45 مثلا بدي أشوف هذا prime
ولا not prime إيش بعمل بمسك الأرقام من 2 ل 44 45
على 2 تطلع باقي 45 على 3 تطلع مثلا خمسة عشر صح ولا؟
خلاص المفروض أنه بدأ بيقسم على ثلاثة يبقى not prime
لكن في الـ بيثال اللي عنده هنا يجرب يقسم على أربعة
و يجرب يقسم على خمسة و ستة و سبعة لحد إيش لحد أربع
و أربعين تمام و يعدّ الـ count هيكون قيمته كبيرة أنا
ممكن اختصر الحل أقول خلاص بخلاص قلت خليني أكمل
مفروض إيش أقول أنا خلاص مدام قسم على أي رقم من
اثنين لأربع و أربعين اعتبر إنّه رقم ماله not prime لأ
شوف إيش بدي أعمله أنا أريد أن أعرف هنا is prime
يساوي true و أريد أن أزيل الـ counter عرفت أنا
Boolean إيش اسمه؟ is prime و لم أجد قيمة الـ is
prime مبدئيا true شوف إيش أريد أن أفعل أريد أن
أقول هنا if الـ n بقى قسمة على أي صفر أو
خليها مثلا false في الأول
is prime false و break و
بعدين بقول له if is prime يساوي true كذا تطلعوا
الحل الموجود قدامكم هقرأه من البداية أول حاجة دخلت
إيش أنا الرقم هذا أفضل حل و بعدين حطيت افترضت إنّه
فيه Boolean أخذت الـ Boolean اللي هو يا true يا
false بيكون افترضت إنّه عندي متغير اسمه is prime
قيمته في الأول إيش؟ true يعني أنا افترضت إنّه أي
رقم هيكون الـ prime ما لم يثبت العكس تمام؟ و بعدين
أمسكت كل الأرقام من اثنين إلى قبل الرقم
إذا كانت نتيجة قسمة الـ N على الـ I صفر يعني إذا بقسم
على أي رقم بين الـ 2 والرقم نفسه خلاص اعتبر أن
الرقم ماله مش prime فحط الـ is prime مالها false وعلى
طول ما أعمل ايش break أخذتوها break صحيح ليه ايش
break يعني اطلع من الـ loop ما فيش داعي أتكمل أصلا
أنا لما قسمت 45 على 3 وطلع باقي القسمة صفر
تمام خلاص أنا وصلت لنتيجة ايش أن الرقم ليس الـ
prime في داعي أكمل وأتعب حالي وأتحصل على بقية
الأرقام لحد 44 تمام؟ خلاص بنهي الموضوع وأقول أن
الرقم ليس الـ prime وين النتيجة النهائية ستكون؟ أن
الرقم prime أو لا؟
يعني أنا الآن خلصت وطلعت من الـ loop break ايش يعني
break؟ يعني اطلع من الـ loop طبعا اطلع من الـ loop
مش من البرنامج طبعا لما يطلع من الـ loop وين هيكمل؟
على الـ if statement وين النتيجة أن الرقم prime أو
لا؟ في الـ if prime طبعا الآن أصلا هو لو ما دخلش على
الـ if statement هتبقى الـ if prime ايش؟ true لو دخل
على الـ if statement ايش هيدخل على الـ if statement؟
معناه لو أي رقم كانت نتيجة قسمة الـ N عليه بدون صفر
يعني بقبل قسمة عليه على طول هتصير الـ is الـ is الـ
prime ايش؟ false تمام؟ هيطلع من الـ loop وعلى طول
الـ N هفحص والله إذا الـ is الـ prime ضايلة true
تمام؟ اطبع على الشاشة prime غير يكتب عليها false
عشان نفهم أكثر من أن نطبق على مثال عملي تمام؟ ناخد
السابعة معايا انتبهوا معايا ناخد السابعة في الأول
افترضت أن الرقم ماله
الرقم افترضت أنه prime بعدين مسكت الأرقام من اين؟
من 2 إلى 6، 2، 2 بقى قص متعصف على الـ I
الـ N قيمتها 7، صح؟ 7 باقية، هل بيقبل قسم
على 2 بدون باقي؟ لأ، هيتنفذ هذا، مش هيتنفذ،
صح؟ بعدين، هتصير 7 باقية قسمتها على ايش؟ على
3، فيه باقي، يبقى هذا ماله، مش هيتنفذ، وعلى
4 فيه باقي، يبقى مش هيتنفذ، وعلى 5 فيه
باقي، وعلى 6 فيه باقي، صح؟ يبقى هذا الـ code ماله
كله، مش هيتنفذ، ضل الـ is prime جدّيش الـ true هيقبع
على ايش؟ الـ prime نرجع لمثال 9 تمام 9 هيجرب 9 على
2 فيه باقي مش هينفذ هذا 9 على 3 تمام بقبل قسمة
بدون باقي تمام هينفذها هتصير الـ is the prime ايش
false وعلى طول خلاص مدام أنا لجيت حاجة بتنهي
الشرط أطلع من الـ loop تمام طلع من الـ loop روح
فحصها لجيت الـ is the prime جدّيش قيمته تمام
هذا الـ code امتى هيروح له البرنامج؟ يا اما الـ loop
خلصت يا اما طلع منها بـ break تمام فبتفحص هل الـ is
prime ضايلة قيمتها true ولا لأ؟ إذا كانت true خلص الـ
prime في حالة الـ 9 تمام هذه هتكون false في حالة
القسمة على 3 صح ولا لأ فهيجي وين على is not prime
واضح يا جماعة؟ واحد يقول ليه طب ليش من أول أنت
مديتنا الحل هذا؟ لأ نبدأ بالتدريج، شوية شوية نفكر،
في الأول بدأنا أن نجرب كل الأرقام من 1 إلى
الرقم، وبعدين اختصرناها نت فبدأنا من 2 إلى
قبل الرقم بواحد، بعدين اختصرناها أكثر، نقول لأ
والله إذا اتقسم على أي رقم في النص، خلاص اعتبر أنه
not prime وانهي الموضوع، واضحة يا جماعة؟ طبعا هذه
الخبرة بتيجي من وين كل ما الواحد عمل practice أكثر
وجرب يبرمج في البيت كل ما ايش صارت تفكير المنطقة
عنده أقوى تمام؟ واضح
السؤال؟ يعني لازم أنتم هالجي تروحوا على البيت و
تجربوا تبرمجوا تمام؟ وهذه الأمور أن أنا أحتاج
أطلع من الـ break هذه بتمر كثير في البرمجة تمام؟
كثير بحتاج أن أنا أوقف الـ loop عشان أشتغل في حاجة
ثانية
طيب شوف السؤال هذا بدنا نعمل سؤال أصعب
شوية بدنا نبقى نقول أننا الـ gate ما بدناش في المادة
ده كلها ايش؟ اه كلها المراجعة المفروض أنتم
عارفينها كلها تمام؟ بس هذا كله مطلوب منكم صح أن هي
مراجعة بس كلها مطلوبة منكم طيب السؤال اللي بدنا
نسويه الـ gate بدنا نعمل كثير من البرامج بتطلب من
المستخدم يدخل input تمام؟ مثلا أنا أدخل input أطلب
المستخدم يدخلي أسماء الطلبة أدخل أسماء لحد ما يطبع
لي كلمة done أنه ايش أنه خلص بعد ما يخلص مثلا ممكن
ياخد أسماء الطلبة هدول يشغل عليهم شغلة معينة أو
مثلا اعمل برنامج أطلب المستخدم يدخلي أرقام تمام
يدخل أرقام لحد ما يدخل ناقص واحد يوقف عملية الإدخال
ويروح يعمل حاجة على الأرقام اللي أنا دخلتها فهلجيت
احنا بنشوف كيف احنا ممكن نعمل عملية إدخال مستمرة
ايش يعني أن أنا أطلب منه يدخل بطريقة مستمرة طيب
انتبهوا معايا بالله هلجيت أنا كيف ممكن أعمل عملية
إدخال مستمرة ايوه يحكولي كيف ممكن أعمل عملية إدخال
مستمرة عندكم فكرة عن الموضوع هذا؟
طبعا هو أنا هستخدم loop لازم، طبعا؟ ايوه
أو الطرق مثلا وإنه إذا دخل المستخدم بعدين ..
مستخدم F إذا دخل المستخدم ثاني واحد هيوقف الـ break
.. هيعمل .. هيوقف العملية اللي عملها طبعا هذا صحيح
الأول حاجة بدنا نفكر طالما أنا بحكي عن عملية إدخال
مستمرة نبدأ نتدرج في التفكير خطوة خطوة بدام
العملية إدخال مستمرة يبقى بده loop طبعا الـ loop
أنا بعملها على طريق ثاني يا اما for يا اما while
طبعا النصيحة العامة الـ recommendation إذا العملية
نقطة البداية والنهاية معروفة بنستخدم for إذا نقطة
النهاية مش محددة بنستخدم while هذا لا يمنع أن
نستخدم الـ while مكان الـ for تمام؟ ممكن نعملها لكن
اللي ينصح فيه أن لو العملية مش معروفة نقطة نهايتها
أو نقطة نهايتها مثلا في مثلنا هذا بتعتمد على input
تع الـ user أنا بدي أستمر لحد ما الـ user يدخل done
في الحالة هذه ينصح باستخدام الـ while طبعا في أكثر
من حل، الحل الأول مثلا، أن أعمل عملية while مستمر
لما لا نهاية، كيف أعملها مستمر لما لا نهاية؟ أعمل
while true، طبعا؟ ضل مستمر، وأعمل عملية أدخل، و
كل حاجة بتدخلها أفحصها كشرط شوف هل مثلا الـ user دخل
done ولا لأ إذا دخل عملية done بدي أطلع من الـ loop
break تمام ما دخلش done بدي أعمل العملية المطلوبة
على الـ input اللي دخله الـ user هذا حل الحل الآخر
أن أنا أعمل عملية input في البداية قبل الـ loop
تمام وآخد النتيجة وأفحصها هل هي تساوي شرط اعمل
while مثلا إذا كانت لا تساوي done اعمل عملية واطلب
إدخال مرة ثانية تمام بالطرق ثانية طيب نشوف الطريقة
الأولى أنه اتفقنا أن أنا بدي أخلي العملية تدخل
مستمرة لأي حد ما يتحقق شرط معين فبنقول مثلا while
true ايش يعني while true؟ يعني عملية مستمرة دائما
احنا نفسنا لازم ننهيها بناء على شرط معين طبعا
while true روح اعمل input طبعا فرضا أنا بدأ أدخل
أسماء أشخاص بدأ أعمل name وأقول input please
enter a name
الآن هذا الـ name مثلا أنا بطبعهم الأسماء تمام؟
والله إذا كان done اطلع من الـ loop إذا مش done
اطبع الاسم واطلب اسم ايش واطلب اسم ثاني كأبسط حاجة
ممكن نعملها بالـ input اللي بنسويه فلما نفحص مين؟ الـ
name والله إذا الـ name هذا يساوي done بدنا نطلع من
الـ loop بدنا نقوله break
else print الـ
name ايش هيسوي يا جماعة؟ هيجي يطلب input؟ هيفحص الـ
name؟ تمام؟ إذا كان done هيعمل break عشان يطلع منه
غير هيك هيعمل ايش؟ print الـ name وين هيروح بعدين؟
هيكمل في الـ loop طبعا مدام ما فيش حاجة تنهي الـ loop
هيضل فيها لما لا نهاية الحاجة الوحيدة اللي بتخليه
يطلع من ال loop هي إيش؟ إذا كانت ال name فيها done
هتجرب هنا
enter أنام، هاي أحمد طبعا ليه أحمد؟ وقال لي إيش
كمان؟ enter أنام، هاي علي طبعا ليه علي؟ وقال لي
enter أنام، أمل طبعا لحد ما أحط إيش كلمة done هيطلع
من إيش؟ من البرنامج واضحة
يا جماعة حل آخر طبعا أنه أنا ممكن كبداية أطلب من
المستخدم يدخلي إيش input name وبعدين أقوله طالما
الـ name لا يساوي، مش هذه إشارة لا يساوي طبعا طالما
لا يساوي done اطبع
لل name تمام وعمل لي كمان عملية إيش؟ كمان عملية
input
نفس الـ function بالظبط تمام؟ إيش اللي هيصير؟ أنا
في الأول بعمل عملية input برا تمام؟ ودخلت hyphen
name هنا الآن فحصت ال name هل هو يساوي done ولا
لأ؟ إذا لا يساوي done هيطبع ال name وهيطلب مني
كمان مرة إيش؟ input تمام؟ طب بعد ما دخل input وين
هيروح؟ هيكمل في ال loop هيفحص هل ال name يساوي
done ولا لأ؟ اه يساوي done هيطلع لا يساوي done
هيكمل هيطبع على ال name وهيطلب input هاي كمان نفس
الشيء هاي علي تمام أحمد تمام وهاي done أي حل من
الاتنين زي بعض وكويسين ماشي يا جماعة نكمل في هذا
السؤال طيب نُعَقِّد السؤال شوية لو أنا طلبت شوف السؤال
هذا كيف بدي أطلب من المستخدم يدخلي أرقام عددها ده
محدود تمام؟ يعني ده خلي مثلا افرضها ده إيش هيستفيد
من البرنامج؟ بدنا نعمل برنامج لِمساعدة المدرسين
اللي هو دخل علامات الطلاب كلهم ولما أخلص تمام؟
دخل ناقص واحد مثلا على أساس أن مافيش علامة بتكون
ناقص واحد تمام؟ هو بدخل علامات الطلاب في الآخر بيحط
ناقص واحد خلص عملية ادخال هيطبع لي مثلا
أعلى علامة وأقل علامة تمام وهيَ الطبعِين المتوسط
بتاع العلامات ال average هذا برنامج مفيد صح أو لا؟
طيب أنتم
معايش من هنا نعمل؟ طيب الأول حاجة بنقوله enter
الـ student mark كيف؟
هايبقى نحط هنا إيش؟ هنا نكتب mark تمام؟ ونحط هنا
إيش؟ integer أو float تمام؟
عشان يحولها لرقم نقوله طالما ال mark هذه لا تساوي
سالب واحد طيب
هنا خلينا نقول كأبسط استخدام طباعة هيك طبعا إيش؟ و
نطلب منه يدخل علامة تانية هذه كلها بنعيدها تحت
لحظة
بس هنا احنا ما عملناش حاجة بس إيش بندخل العلامات و
بنطبعها صح ولا لحد ما دخلنا أنا ناقص واحد هاي مثلا
ستين تمام 90 تمام لما دخل ناقص واحد هيطلع طيب هلّقيت
نيجي أول حاجة بدنا نشوف مثلا مجموع كل الدرجات أبسط
حاجة كيف ممكن نجيب لما أحط طبعا مات المفروض يطبع
لمجموع كل الدرجات لما أحط ناقص واحد لما أحط ناقص
واحد هيطلع من ال loop ويطبع للمجموع كيف ممكن نجيب
مجموع كل الدرجات اللي بتتم إدخالها بالظبط تمام؟ زي
ما عملنا قبل شوية مش أنا بمر على أرقام واحد واحد
كل رقم بمر عليه بأخده برميه وين؟ في ال sum تمام؟
فباجي برا هنا بعمل إيش متغير اسمه مقماله sum قيمته
إيش؟ قيمته صفر تمام؟ اه وكل رقم بمر عليه بضيفه
وين؟ بضيف ال mark عليه في الآخر بعد ما يطلع من ال
loop بقوله print
Sum معايا يا جماعة؟ هي أنا جبت مجموع العلامات هاي
مثلا ستين سبعين ثمانين وبعدين ناقص واحد تمام؟
مجموعه مجد إيش؟ مائة وعشرين طيب المجموع ممكن
ما يكونش مفيد كتير للمدرس جد إيش؟ جد ال average صح؟
طب كيف بنجيب ال average؟ مجموعهم على عددهم طيب،
كيف بنجيب ال sum؟ ال sum معروف أن ال average هو
المجموع على عدده، طب المجموع موجود عندنا؟ أيوة
بالظبط، تمام، المفروض أن كل رقم أدخله أزيد ال
counter بإيش؟ بواحد يعني المفروض إذا أعمل هنا
متغير ثاني اسمه counter أحطه بصفر وهنا إذا ال
counter قيمته لا يتساوي ناقص واحد اعمل ال counter
plus يساوي واحد كيف؟
قبل أو بعد مش هتفرق المهم إن أنا جوا ال loop في
الآخر بقول print sum على أو يعني عشان ننطب الشغل
نعرف متغير برا ال loop لأن عملية الحساب في الآخر
مش هحط ال average جوا، ظلط بعد ما في الآخر يجيب
المجموع كله والعدد كله بقول average يساوي sum إذا
بدنا الكسور نخليهم هي double slashed عشان يجيب لي
إيش صحيح تمام؟ وفي الآخر بقوله print average هو
هذا اللي بيعنيني تمام؟
هي مثلا أدخل علامة الأولى 80 و90 و100 وهي ناقص
واحد تمام؟ جدش طلع ال average 90 تمام؟
ثمانين وتسعين ومية وسبعين ومية وعشرين وسبعين على تلاتة
يعني تسعين طبعا هذا جبنا ال average أنا طلبت كمان
حاجة ن و أقدر أعرف كمدرس أقل علامة دخلت وأقل علامة
طيب
ماشي خلينا إيش نشوف حاجة حاجة احنا بنعرف أن في عندنا
احنا method موجودة في الـ .. في الـ .. ده حتى أنا
أنا كتبته مفهوم مرة ثانية يا جماعة، مشكلة أنك
تتوجهها دائما مع الطلبة، ماشي أنت بتحضر المحاضرة
مبسوطين وفاهمين، بتروحوا على البيت، بتشتغلوش، كل
هذا بتنسوه، لازم زي مجودة ال practice العملي طيب،
عندنا method احنا في ال python جاهزة، اللي هي max
و minmax بتحط له أي أرقام 80, 75, 95 تمام ولحالها
بترجح أكبر رقم وبنخزنه في تغير صح يعني هلّقيت
مثلا في مثال عدد ال M قدش هيكون فيها 95 وال min
نفس الحاجة بس بترجح أصغر رقم، هذه method ممتازة لكن
فيها مشكلة إيش هي؟ إنه لازم أكون أنا بشكل مسبق
عارف كل الأرقام، تمام؟ وهذا مش هيتحقق هنا لأنه
أنا شغال في Loop وفي اللحظة الواحدة بكون عارف
إيش تيمة واحدة، صح ولا؟ فمقدرش أنفذ ال max صح
ولا؟ يعني أنا الأرقام خلص اللي بـ .. اللي بخلص منه
في ال loop بنساه بروح للرقم اللي بعده، تمام؟
ممتاز هاي زميلة بتفكر صح احنا بنعمل متغير تمام اه
بس كيف بننفذه هذا شوفوا الفكرة هذه إيش بنسوّه تمام
بدنا نعمل في الأول متغير تمام نسميه max تمام
ومتغير ثاني اسمه min نحطهم الاثنين إيش صفر هذا إيش
معناه أنا عرفت إيش متغيرين max وmin قيمتهم إيش
قيمته صفر تمام أو لأ أنا بتعرف الـ ال max قيمته صفر
وال min قيمته تسعة تسعة تسعة قيمة كبيرة خلينا في
الأول على ال max بتجيب أنا أعلى عرفت في الأول max
قيمته، قيمته صفر، إيش بسوّي ال gate؟ أنا زي ما قلت
مشكلة أن أنا استخدام ال method max مش هقدر أعملها
لأنه ال max بتطلب أن أكون عارف كل الأرقام، لكن أنا
في ال for loop بمرق على رقم الرقم اللي بدي أسويه
أنا بعرف متغير اسمه max قيمته قليلة جدا ليه صفر
ليه؟ كل رقم بمر عليه بشوف والله هذا الرقم أكبر من
ال max ولا لأ؟ إذا أكبر من ال max بيصير هو إيش
بيصير هو ال max تمام واضحة الفكرة يعني الآن أنا
مريت على الرقم الأول بدي أقوله if ال mark هذه أكبر
من ال max max يساوي ال mark بس خلصت أنا دخلت أول
درجة ستين جدش قيمة ال max هتصير؟ ستين لف رجع ثاني
على اللوب دخلت خمسة وتسعين الخمسة وتسعين .. لأن
قيمة ال max صارت ستين دخلت كمان خمسة وتسعين هيجي
الرقم الجديد خمسة وتسعين يقارنه مع ال max الجديد
اللي هي ستين صار أكبر رقم إيش؟ خمسة وتسعين دخلت
بعدين تسعين هل التسعين أكبر من 95؟ لا، فهيظل محافظ
على القيمة، يعني هي الفكرة أنه أنا بما أني بمرق
على كل رقم .. كل رقم على حده، طبعا، ضروري أعرف
متغير على أساس أني أحفظ فيه أكبر قيمة، كيف أنه أنا
ب .. كل رقم بيجيني بقارنه مع القيمة هذه، والله
أكبر بيصير هو الكبير، مش أكبر روح روح، مالِش فيك،
طبعا؟
واضح يا جماعة؟ زي أنا يا ناس بصفهم على طابور، بدي
أشوف أطول واحد فيهم، مش عارف أنا أجيهم أنا ميت
واحد، لو صعب أصفهم هيك جانب بعض وأختار أطول واحد،
بقوله اسمعوا إقفوا في الطابور و مروا عليه واحد
واحد، تمام؟ بمسك الأول، بقوله أنت تعال، طوله مية و
عشرين، بس بفترض أنه إيش؟ هو أطول واحد، إقفوا تعالوا
اللي بعده اه انت اطول اذا اطول خلاص انت روح روح و
احط انت بتسير مكانه تمام مرة اللي بعده انت اطول لأ
خلاص بناشيها اللي بعده انت اطول لأ لجيت واحد اطول
منه بقول اللي عندي خلاص انت روح تعالى انت بتصير
اطول واحد واضحة الفكرة كيف؟ كيف؟
إذا الـ mark أكبر من الـ max بقارنها مع الـ max بتصير
الـ mark هي إيش؟ الـ max الجديدة في الآخر بقول print
الـ
max هيك أنا بجيب أكبر رقم طب كيف نجيب؟ نتأكد من
هذه قبل ما نشوف أصغر رقم تعالوا هنا نعمل run تمام؟
وتعالوا ندخل علامات تمام؟ تسعين ستين خمسة وسبعين
واحد وتسعين تمام؟ هي ناقص واحد أكبر علامة المفروض
إيش واحد وتسعين هي طبعا الـ average تسعة وسبعين و
الـ max هو إيش هو واحد وتسعين
الـ Min هالجهد فيها trick صغيرة الـ Min بقدرش أعرف
متغير قيمته صفر ليش؟ لأنه كيف فكرة الـ Min أنه أنا
بدي أجيب أصغر قيمة فبدي أشوف أول علامة بتدخل
بقارنها بمن؟ بالـ Min هل العلامة اللي دخلتها أصغر
من Min؟ لو الـ Min قيمتها صفر ولا علامة هتكون أقل
من إيش؟ من صفر فدائما الـ Min إحنا بنحطها أكبر
قيمة ممكنة يعني بنقول الـ Min هذه 101 خليها، ممكن
طالب ياخد 100، صح ولا لأ؟ فالآن فرضا أول علامة
دخلتها 99
بفترض دائما أن أول علامة تدخل هي تصير الـ Min، صح
ولا؟ مش هذا المفروض، تمام؟ فبعمل شرط ثاني هنا، هذا
الشرط الأول خاص في مين؟ في الـ Max، في شرط ثاني،
ثانية، if الـ mark أصغر من الـ Min، بتصير هي الـ Min،
الـ Min يساوي الـ Mark في الأول دخلت تسعة وتسعين هل
تسعة وتسعين أصغر من مية واحد؟ آه بتصير الـ main
قداش تسعة وتسعين بعدين دخلت خمسة وسبعين هل
الخمسة وسبعين أقل من تسعة وتسعين؟ آه أقل بتصير
الخمسة وسبعين أقل حاجة دخلت مية واحد جاب مية هل
المية أقل من الخمسة وسبعين؟ لأ تمانين أقل من
الخمسة وسبعين؟ لأ ستين أقل من الخمسة وسبعين؟ آه
بتصير هي الـ minimum تمام فلاحظوا هنا عشان أجيب
الكبير والصغير دائما الـ maximum حطيناها قيمة مبدئية
أقل قيمة على أساس تصبح أول قيمة تدخل هي ما هي الـ
max والـ minimum مبدئيا حطناه أعلى قيمة ممكنة على
أساس أن أول قيمة تدخل تصبح الـ min واضحة كيف يا
جماعة؟ هذيك إذا بنجيب بعدك ثاني وثالث ورابع تمام
هنعتمد بعدك الـ list اللي هناخدها موضوع جديد على
أساس الخزن نقدر نعرف كل الأرقام اللي بتدخل وأقدر
أقارن وأشوف أكبر واحد وفي النص والثاني والثالث
والرابع هيك أنا وأنا مش محتفظ في العلامات اللي
دخلت كلها تمام هقدر أجيب حاجات محدودة اللي هي الـ
maximum والـ minimum والـ average واضح يا جماعة
نيجي هنا نطبع عشان نرتب الناتج نقول هنا average
يساوي ونحط هنا إيش strAverage تمام ونجي هنا
ونقوله max يساوي ونقوله str الـ
max ونقوله print الـ
minimum يساوي str minimum تمام
ونعمل run
مثلا، خمسة وسبعين تمانين خمسة وتسعين ثلاثة و
سبعين ستين خمسة وأربعين حط ناقص واحد عشان نطلع
تمام طبعا لجل الـ average للعلامات عندك واحد و
سبعين أعلى علامة خمسة وتسعين وأقل علامة قداش خمسة
وأربعين واضح
يا جماعة حل السؤال؟ في أي سؤال؟ طيب ناخد تمرين
ثاني خلينا
ناخد الـ functions شوية رجعها أول
حاجة إيش فائدة الـ functions؟
عادة أنا بلجأ لاستخدام الـ functions لما تكون عندي
وظائف اللي هي استخدام متكرر يعني مثلا مثلا الـ
factorial ممكن أنا بعمل عملية رياضية كثيرة وبحتاج
أن أحسب الـ factorial للرقم كثير بدل ما أنا أكرر الـ
code لحساب الـ factorial بعمله كـ function وبستدعيه
مرة واحدة فهو مهم في الموضوع له اسم الـ
encapsulation
اللي هو من كبسولة يعني في النهاية أنا الكبسولة
عادي باهتمش إيش فيها بستخدمها وببلعها هو أنا مش
فاهم الحاجة صح ولا لأ؟ هذا مفهوم الـ encapsulation
في البرمجة معناه أنه قسم الـ code تبعك لأجزاء
لوحدات على شكل functions على أساس المستخدم يستدعي
الـ function بدون أن يدخل في تفاصيل ما في داخل الـ
function وفي نفس الوقت بقلل عدد الـ code لأنه لن
أحتاج أن أكرر الـ code بل أحتاج أن أكرر استدعاء الـ
function طيب
code الـ factorial بس بشكل سريع أنا أعيده بدي أكتبه
كـ function
بنكتب function أعطيها الرقم وترجع لإيش؟ وترجعوا للـ
factorial تعالوا الرقم هذا إيش بيقنع أن الـ function
أعطيها رقم وترجع للـ function كيف بنقرر الـ
function؟ بنكتب دائما في الأول def تمام؟ وبعدين
بنكتب اسم الـ function تمام؟ بنسميها مثلا إيش؟
factorial وبعدين بنكتب الـ parameters أو الـ
arguments اللي هو الـ parameters اللي هو الـ
function طبعا .. لحظة .. هذا الـ .. الـ .. الـ .. إيش
الـ parameters بتاخدها؟ طبعا إحنا بنقرأ في الـ
function ممكن ما تاخدش ولا parameter في الحالة هذه
بحط قوسين وخلاص طبعا وممكن تاخد من parameter
لعدد غير محدود طيب عدد الـ parameters إيش بحددهم؟
إيش نوع المهمة اللي بدها تعملها الـ function؟ طبعا
المفروض في حالتي هذه الـ factorial أنه أنا أبعثلها
رقم وترجعليه رقماً دائما أفكر قبل أن أعمل الـ
function أشوف إيش الـ input تبعها وإيش الـ output
الـ input تبعها بيكون رقم والـ output رقم طيب إيش
الـ input تبعها بيكون رقم ولا يكون n اللي هو
المفروض يكون رقم صح؟ إلى أن باجي بكتب الـ code تبعي
اللي هو code الفكتوري العادي كتبناها قبل شوية اللي
هو بنعرف الـ product يساوي واحد وبنعمل for loop for
i in range من اثنين خلينا نقول إلى N زائد واحد عشان
يكون الـ N داخلة في الموضوع وبنقول الـ product ضرب
يساوي الـ I قبل شوية كنا بنعمل print للـ product
الآن المفروض من يرجع القيمة؟ return بالضبط إذا الـ
function بترجعش حاجة بنعمل return زي كده فاضل لكم إذا
ترجع حاجة مثل مثلنا هذا إيش النتيجة؟ وين هتكون
موجودة؟ في الـ product صح ولا؟ يبقى أنا معنى return
الـ product طبعا الـ function بيعرفها فوق عشان
أستخدمها دائما تحت بقدرش أعرف الـ function تحت في
الملف صح ولا؟ لأن مثلا أنا عرفت الـ function بدي
أستدعيها خلصنا الـ function ده يعني الـ function
تنتهي وين يا جماعة؟ عند الـ return طبعا الـ return
يا بتكون return زي كده معناه أن الـ function بترجع
الشيء طبعا آه ممكن الـ function ماترجحش حاجة تشتغل
شغل معين تطبعلي حاجات وخلاص بعمل return وخلاص
إذا بدي أرجّح الشيء بعمل return product
الآن أنا عملت الـ function استفدت منها استدعيتها
طبعًا أكيد أنتم عارفين أن أنا لو نفذت الـ code هذا
بشغّل الـ function مش هيطلع ناتجها لأن
الـ function code لا ينفذ إلا عند ايش؟ إلا عند الاستدعاء طبعًا
الآن بكتب الـ code كيف بدي أستدعي الـ function factorial
و بحط الرقم اللي بدي إياه بما أن هذا الـ function
بترجّع نتيجة تمام؟ بدي متغير أحفظ فيه النتيجة بدي
أقول له result مثلًا يساوي factorial تمام؟ وبعدين
بقول له print الـ
result هذا الـ code اللي ما له اللي هيتنفذ
هذه النتيجة ايش؟ مائة وعشرون وممكن أصلًا أستدعي أنا
عشرين مرة لأكثر من الرقم اه
ممكن أخلي input ستة أو سبعة أو ثمانية يحسب لي الـ
factorial ويطبع لي؟ يطبع لي النتيجة وممكن أعمل
ايش يا جماعة؟ أحط الـ factorial نفسه في أمر الطباعة
عشان أوفر code يعني ممكن أقول مثلًا في المثال هذا
بدل ما أحط اللي هي في result وأطبع للـ result على
طول مباشرة بقول print factorial
عشان
طبعًا واضحة يا جماعة؟ طيب، بنتغير نكتفي بالقدر هذا
اليوم، ونكمل المحاضرة الجاي، في حد عنده أي سؤال
أو استفسار قبل ما ننتهي؟