طيب يا جماعة السلام عليكم، بنكمل إن شاء الله ال
chapter الخاص بالـ files و exception handling بناخد
فقط سؤالين أو ثلاثة نحلهم على الـ files وبعدين
نبدأ في موضوع جديد، شوفنا احنا التعامل مع الـ files
بشكل عام، القراءة والكتابة، شوفنا معالجة الأخطاء
باستخدام الـ try except، شوفنا كيف أن الـ try except
إن لو حصل خطأ في أي سطر، بيروح ينفذ الـ code الموجود
في الـ except اللي هو المفروض يحط فيه code لمعالجة
الخطأ، بعد لو تم معالجة الخطأ، بيكمل تنفيذ البرنامج
الفكرة في الـ try except أنه ما يصيرش أتلقيش في
البرنامج يوقف فجأة من غير ما أعرف إيش المشكلة، الصح
إن البرنامج يستمر في العمل، ويطلع لسه، لا يتبلغ
نقش الخطأ اللي موجود، يعني الواحد حتى في حياته لما
يتعامل مع أي برنامج، مش منطق أنه فجأة البرنامج يطفي
الواحد بيتضايق، لكن لو البرنامج حصل فيه خطأ، أنا
مقدرش أمنع الأخطاء، يعني في أخطاء ما لهاش علاقة في
البرنامج جد، ما إلها علاقة في البيئة الخارجية، يعني
مثلاً البرنامج بدي أقرأ ملف، والملف مش موجود، تمام؟
هذا مش مشكلة في الـ code، المشكلة أن الملف اللي
موجود برة الـ code مش موجود، البرنامج مش شغال، لكن ال
input اللي دخل الـ user غلط، صح ولا؟ يعني شفنا المرة
الماضية أن المطلوب يدخل رقم، ويدخل نص، هذا مش خطأ
في البرنامج، خطأ في الـ input، فأنا مقدرش أمنع
الأخطاء، لكن أنا لازم أحط قايلة لمعالجة الخطأ لو حصل
وهذا اللي احنا بنعمل في exception handling، إن لو
حصل خطأ، بنفذ الـ code في الـ except اللي غالباً بحط
فيه مثلاً طباعة لرسالة بتوضح إيش الخطأ اللي صار، و
بعدين بكمل تنفيذ البرنامج، طيب اليوم هنحل سؤالين على
الـ files، طيب
بدنا write a program that will count the number of
characters, words and lines in a file، يعني بنعمل
برنامج نعطيه ملف، ويعد لي كم عدد الأسطر، و
الكلمات والحروف الموجودة في الملف، طبعاً بيقول لي
words are separated by a whitespace character، your
program should prompt the user to enter a file
name، يعني بنعمل برنامج يطلب من المستخدم يدخل اسم
الملف أو مسار الملف، وبعد ذلك البرنامج بيطبع لي
الملف فيه كام كلمة، كام حرف، وكام سطر، تمام؟
أول حاجة، خلينا نشوف ملف من الملفات، لأن
هذا مثلاً ملف فيه أسماء، تمام؟ من أن أعد كم سطر فيه، و
كم كلمة، وكم حرف
طيب أول حاجة بيقول لي، أطلب من المستخدم يدخل اسم مسار
الملف، طبعاً يعني بدنا نعمل أول حاجة نعمل متغير اسمه
file path يساوي input enter
file path، ماقدرش أخلي إيه اسم الملف بس، لازم مساره
مساره، لازم المسار، لكن بعد هيك لو الملف لو الملف
موجود مع هدول هنا في الـ project، بعتله اسم الملف
بقرأه طبعاً، لكن أنا لو الملف موجود عندي في الـ C أو
الـ D لازم أعطيه المسار كامل، عشان يعرف هو موجود
طبعاً لأن في الـ branch الفعلي زي ما هنشوف قدام لما
ناخد الـ graphical user interface، إن أنا ممكن أعرض
للمستخدم شاشة فتح الملف، عارفينها اللي بيختار فيها
مسار الملف و... تمام؟ في النهاية أصلاً شاشة فتح
الملف إيش... إيش فيديوها؟ بتعطيني مسار الملف
تمام؟ يعني احنا هناخد من الموضوع القادم إن شاء
الله لـ Graphical User Interface، بس لازم احنا في
البداية نتعلم الـ code هذا اللي أكيد هينكتب داخل أو
في الخلفية بتاعة Graphical User Interface، Enter
file path، المستخدم يدخل المسار، الآن بندروح أعمل
open للـ file path، وهذا برجع لمتغير نسميه مثلاً file
طيب
هيك أنا أخدت من مستخدم مثال الملف، وعملت له open
الآن إيش بده أسوي؟ أكيد لازم نقرأ الملف عشان نعد
كم سطر، وكم كلمة، وكم حرف، قلنا فيه ثلاث طرق
لقراءة الملف، في method read بتقرأ الملف كاملاً، read
lines بترجع لـ list of lines، وفي عندي read line
بتقرأ سطر واحد، وقلنا أنا شخصياً بفضل أفضل طريقة
اللي هي read line، ليش؟ عشان ما أحملش كل الملف
الذاكرة، read كويسة وسهلة، لكن بتأخذ الملف وتحطه
في الـ memory كله، لكن read line بتقرأ سطر سطر، فأنا
لما أتعامل مع ملفات كبيرة، أفضل أن أتعامل مع سطر
سطر على أساس السطر اللي بخلصه وأشيله من الذاكرة
واضح؟ إلا لو أنا البرنامج بيقرأ، بحتاج الملف كله
وجدت أنه يجب أن أقرأ، أعمل read لكل الملف، لكن هنا
ما أقدر أن أفعل هو أن أقرأ سطر سطر، وأعد في السطر
كم character وكم كلمة، وما هو سطر، ماهو counter
لا أسطر، يعني أنا مقدر أتعامل مع السطر سطر، صح أو لا؟
أعد كم كلمة فيه، وكم character، هو إيش المطلوب
أجيب كم كلمة في الملف كله، فأنا بجيب line line بعد
كم كلمة فيه، وبضيفها على counters، some بعد كم
كلمة موجودة في الملف، بدي أعد عدد الأسطر، كل line
أنا بقرأ، وبزيد واحد على counter ثاني، طيب فعشان
هيك أنا قبل ما أبدأ قراءة الملف، بدي أروح أعمل ثلاث
متغيرات اللي هم مثلاً ده سميهم lines يساوي صفر
words يساوي صفر، و chars يساوي صفر، هدول الـ counters
اللي بدنا نعده، كم line، وword، وcharacter، بعدين
بقوله line بده أقرأه، لأن سطر سطر، طبعاً هنا في عندي
غلط، open و بحط هنا R، file.read، قرأت السطر الأول، و
بعدين بقول while line لا يساوي فاضي، مش هيك أنا
بقرأ السطر، وبقول طالب السطر مش فاضي، لأن بدأ أمسك
السطر، وأعد كام كلمة فيه، وكام character، أول حاجة
بعمل بقول الـ lines زائد يساوي واحد، يعني أنا مدام
قرأت السطر، بضيف الـ counter بتاع الـ lines، والآن في
... شوف لأن في السطر واحدة حلها دي، بدي أكتبها، و
أقول لكم إيش بتعملها دي؟ مين
يقول لي هذا السطر إيش بعمله؟ عدد الكلمات في السطر؟
كيف بعملها؟ عدد الحروف
طيب هذا السطر بيجيب عدد الكلمات في السطر، طبعاً اللي
بيسوي إنه بيروح بيجيب السطر، وبعدين بعمل split بناء
على أساس مسافة، هذا إيش بيرجع عندي هنا dot split
بيرجع عندي list، يعني هذا كل اللي مظلل قدامكم
بيرجع list طبعاً، وبعدين جيبة len للـ list هذه طبعاً
أنا اختصرت سطرين في سطر، صح ولا؟ يعني أنا كان ممكن
إيش أعمل؟ أقول له هنا أعمل list يساوي زي هيك صح ولا؟ و
بعدين أقول له len الـ list، صح؟
بس أنا اختصرتها، هذا
كله len الـ list ضفته، أمين تمام؟ وبعدين chars
لأن بدي أضيف عدد الحروف اللي في الـ line، كم بدي
أجيب عدد الحروف اللي بالـ line، منتقل بساطة من يقول
ليه لا؟
مش هحتاج أعمل counter حتة فيه أسهم الـ counter، لأن
الـ line يا جماعة، صح ولا؟ الـ line مش عبارة عن نص، احنا
لما نعمل len للمص، إيش بده بيجيب لي؟ عدد ال
characters صح؟
ما هي المسافة تعتبر الـ character طبعاً؟ ماشي، بتكونش
تحسبوا المسافة، وقتها بده أضطر أن أعمل for loop
طبعاً؟ بده يقول for I in line، صح؟ إيش هاد بتعمل for
I الـ line؟ بتدور على كل character، if I لا يساوي
space، روح على الـ chars زائد وزيد واحد، تمام؟ هنا أنا
بعد الـ characters كلها، ما عدا ما عدا الـ space بس
أنا بتصور لو عدينا الـ space مش غلط، لأن هو الـ space
يعتبر character
واضحة يا جماعة؟ أنا هنا أساس أعد كل الـ characters
ما عدا الـ space، فروحت عملت له for I in line، احنا
قوله يا جماعة في النهاية الـ text أصلاً عبارة عن
list صح الـ text الـ string عبارة عن list فلما أقول
for I in I بيجيبلي character character إذا الـ
character لا يساوي مسافة أروح زيد الـ characters
is alpha is a character اه ممكن ماجربتاش أنا بس ..
بس مش هيعد ايش الـ underscore الرموز الخاصة طبعا is
alpha بتأكد أن هو alpha pedicle مش هيعد الأرقام
طبعا يعني أنا بدي أعد الـ characters بالشكل العام بغض
النظر هم رمز رقم is alpha بعدلي بس الحروف
الأفجارية طب لو عاملنا بدل الـ loop len list الـ line
لحظة
لأن أنا عشان أججز أي text بستخدم الـ split تمام؟
لما .. ليش استخدمت أنا الـ split هنا؟ عشان أججز الـ
line لكلمات list of words و بعدين جيب الطول list
الكلمات عشان أجيب عدد الكلمات لأن عشان أجيب عدد
الحروف في الـ line هو الـ line أصلا عبارة عن list مش
الـ line عبارة عن list of characters تمام؟ لما أعمل
link اللي هو بيجيبلي عدد الـ characters اللي فيه
لكن لو عملت link للـ line بيجيبلي عدد الـ characters
بما فيهم الـ space إذا بدأ أحسب بدون الـ space بدأ
الطرق أعمل for loop الشكل هذا تمام؟
لأ لسه مخلصناش بدأ أروح أعمل كمان مرة
read line صح ولا في الـ while loop مدام أنا خلصت
السطر كل سطر على حده بروح بقرأ السطر اللي بعده صح
يا جماعة ولا لأ أنت معايا طبعا قرأت السطر بقرأت
السطر اللي بعده افحصلي على السطر اللي بعده اللي هي
سوى فراغ مش فاضي ونفذ نفس الخطوات زيد الـ line
بواحد و جيب لي line dot split اه بالظبط و بنفذ
عليه نفس الخطوات بعد اللي فيه الآن في النهاية بعد
ما يخلص الـ file loop بعد ما يخلص الملف ممكن أقوله
file.close و النتيجة النهائية هتكون موجودة في الـ
lines و الـ words و الـ cars المتغيرات اللي أنا
عرفتهم فبقوله اطبعلي lines words و cars طبعتهم جمب
بعض واضح
يا جماعة السؤال هذا طب خلينا نجربه
طيب هنا هيطلب مني الـ path بتاع الملف طيب
طبعا اللي بيقول أن أنت عندك ستة lines و تمانية
words و واحد و أربعين character بدون spaces طبعا
هاي الـ lines ستة واضحين الكلمات تمانية ليش هنا في
اتنين اتنين و بعدين أربعة و هنا في أربعة صاروا
ثمانية و الـ characters بعد كل واحد واضح
السؤال هذا يا جماعة طيب تعالى نشوف سؤال تاني
بقول
لي هذا السؤال
السؤال المظلل هنا Encode the file by adding 5 to
every byte in the file Write a program هذا من أسئلة
الكتاب that prompts the user to enter an input
file name and output file name and saves the
encrypted version of the input file to the output
file ايش يعني؟ هنا طلب مني أعمل file encoding ايش
يعني encoding؟ termise أو تشفير للملف يعني كيف فكرة
تشفير الملفات أو أن أعمل encoding لهم هنا بدي
أستخدم طريقة بسيطة أنه بقول مثلا my name هي جملة
is Ahmed بدنا نشفر هذا بحيث أن الناس اللي مايقرؤوه
مايفهموش ايش النص هذا معناه بقول يروح لكل حرف مش كل
حرف عبارة عن اللي له ASCII code زيد الـ ASCII code
بتاعه بخمسة هيصير ايش تاني ممكن يصير P مثلا أو Q
فح؟ و هذا .. و هذا هيصير أي حرف آخر ممكن يكون بيه
capital و هذا الـ space بيصير حرف تاني طبعا ممكن
يصير M مثلا كل حرف لو أنا لابد في الـ ASCII code
بتاعه زيدت عليه رقم أو نقصت رقم هيصير ايش مختلف طبعا
فالآن هذا النص لما أي واحد يقرأه هيلاجيه مش هيفهمه
مش معناه إلا طبعا مش هيجر هو يفهم ايش النص هذا إلا
لو عرف ايش العملية الحسابية اللي عملت عليها عشان
أرجعها صح؟ فهو جولي اعمل encoding عن طريق إضافة
رقم للـ characters وهي عملية التشفير اللي بتصير
فعليا عمليات حسابية بلجأ أنه يحول الـ characters أو
الرموز لحاجات تانية عن طريق أنه يعمل فيها عملية
حسابية أكيد أعقد هتكون من هيك لأن هذا المثال بسيط
سهل فك تشفيره سهل واحد يكتشف ايش اللي صار موجود
فيه تمام؟ لكن لو كانت عملية معقدة أنه امسك الـ ASCII
code أضيف عليه كذا أطرح منه كذا جيب الجذر التبعه
كذا تمام ممكن تصير العملية أصعب أنه كيف يفك تشفير
الملف طيب
عشان الحل هو ايش طلب مني encode the file by adding
5 to every byte Write a program that prompts you to
enter an input name and output file name يعني
البرنامج هيطلب من الـ user يدخل مسار الملف اللي
بدنا نشفره و مسار الملف اللي بدنا نكتب عليه نتيجة
التشفير واضح؟ يعني أنا هنا الملف الأساسي أنا
مابديش ألعب فيه أنا بدي أطلع لسخة مشفرة واضح يا
جماعة معاك؟ يعني هيطلب من الـ user يدخل ايه؟ حاجتين
مسار الملف اللي بده يشفره و مسار الملف اللي بده
اكتب عليه المسار اللي بده اكتب عليه الملف الجديد
البرنامج
نفسه فيه read و فيه write and saves the encrypted
version of the input file to the output file يعني
بعد ما يعمل encrypt للملف الأول بخزن النتيجة في
الملف الثاني خليني أحل خطوة خطوة أول حاجة بدا أطلب
من الـ user دخل input فبدا أقول له source
path enter
path of file to be encrypted دخل
مسار الملف اللي احنا بنعمله encryption
destination path input
enter path of encrypted file هنا مسار الملف اللي
بناني يعمله encryption و هنا مسار الملف اللي هيكون
مشفر وين نكتب يعني طيب
الآن بدنا نروح نقرأ محتوى الـ Source Path أنا بدأ
أشتغل على مبدأ أن أقرأ سطر سطر و كل سطر بدأ أشفره و
أكتبه على الملف الثاني مباشرة يعني برضه احنا
هنستفيد من السؤال هذا نشوف مثلا كيف نعمل copy
لمحتوى ملف .. لملف تاني فبدأ أفتح الملفين فاحد
للقراءة و الثاني للكتابة الثاني لسه مش موجود أكيد
يعني أنا في النهاية بقى أطلع ملف جديد طبعا لكن
الحين بنعرف لما بنعمل open لـ write لو الملف مش
موجود بنشيه طبعا طيب file 1 يساوي open source path
read
file 2
الآن بدأ أقرأ سطر سطر من الملف الأول line يساوي
file واحد dot read readline الآن بقوله while line لا
يساوي فاضي بدنا
نعمل هنا خطوات التشفير و نكتبه على الملف الثاني و
بعدين نقرأ السطر اللي بعده file واحد dot readline
و في الآخر .. طبعا أنا نسيت فراغ لسه الـ code هنا
مش كامل close للملف الأول و close للملف الثاني لأن
الـ code التشفيرة و الـ encoding بيكون هنا طبعا أنا
اللي بسويه أنه بروح للملف الأول و بقرأ السطر كل
سطر على حده طبعا هنا بعمله processing و بعدين
بقوله اقرأ السطر اللي بعده و هكذا طيب هنا ايش بنا
نسوي اللي بنا نسويه بنا نمسك السطر بنروح للـ
characters بتاعة السطر character character و نزيد
على كل character خمسة طبعا طيب هنا بدنا نعمل
string جديدة اسمها الـ
new line ايش الـ new line هاد الـ string جديدة فاضية
طبعا بعدين بدنا نقول for I in line
ماذا يعني for I in line؟
لأ، لأ، كل حرف في السطر، تمام؟ كل حرف في السطر، طب
شوف أنا إيش بدي أسوي، الآن الحرف هذا بدي أحوله
لـ ASCII code، ليش أحوله لـ ASCII code؟ عشان أضيف عليه
خمسة، بعدين بعد ما أضيف عليه خمسة بدي أحول الـ ASCII
النتج لإيش؟ لـ character، طيب كيف نحول الـ character
لـ ASCII code؟ ORD، ORD هتاخد مين بين قسم؟ الـ I و
بعدين زاد خمسة، وبعدين هذا كم
CHR، إيش الـ CHR بتاعي؟ ما هي بتاخد رقم وبتطلع لي
character، مرة ثانية، الـ character اللي عندي اللي هو
وين موجود الآن في الـ I، طبعًا بدي أحوله لـ ASCII code
ORD، بعد هذا اتحول لرقم صح، نتيجة الـ function هذه
بزيد عليها خمسة، ليش خمسة؟ هو طلب مني في السؤال خمسة
وبعدين هذا كل الرقم الناتج بحطه كـ Parameter للـ
method CHR، عشان يتحول لـ Character تاني، والـ
Character التاني هذا كله بضيفه لمين؟ لـ New Line
فهمتوها؟
السطر هذه يا جماعة؟ كل الـ Character الناتج عندي
بضيفه لـ New Line، الآن بعد ما يخلص الـ For Loop
هذه بيطلع عندي Line جديد بشكل جديد، لأن الـ line
الجديد هذا هكتبه في الملف التاني في File Name dot
write وبعطيله الـ new
line وبحط مثلًا slash n في الآخر عشان ينزل سطر
جديدة، خلصنا
مرة ثانية بشكل سريع، هيقرأ مسار الملف الأول، هيقرأ
مسار الملف التاني، هيفتح الملف الأول للقراءة،
والملف التاني للكتابة، إذا لم يكن موجود، هينشئه،
بعدين، هيقرأ سطر سطر من الملف الأول، وطالما أن
السطر ليس فاضي، السطر الأمن حوله لشكل جديد، لسطر
جديد، فالنتيجة عشان أحوله لسطر جديد أعمل متغير اسمه
new line string لسه فاضي، وبعدين أمر على كل
character من الـ line اللي جبته بالملف الأول، امسك
كل character، جيب الـ ASCII code تبعه وأضيف عليه خمسة،
ويرجع أحوله لإيش؟ لـ character جديد وأضيفه على new
line، وفي النهاية يكتب لي الـ new line في الملف
الجديد، ويرجع يقرأ الملف السطر التاني من الملف
الأول، وهي نفس الخطوات لأ
لحظة، إذا
أنا لأ، بتهيأ لي إنّها صح، لأ، الـ write كل ما أعمل
open للملف فبكتب ملف جديد، طبعًا يعني إذا أنا بعمل
write أكثر من مرة في open واحدة، بيقعد يكتب عليه
انتبهوا معايا يا جماعة، اه لو أنا روحت عملت أسألكم
بتسأل، بتقول أنا عملت open للملف طبعًا وحطيت هنا w
اجيت أعمل write، كتب حاجة على الملف، وجيت أعمل write
تاني، هيمحي المكتوب، لأ، أنا ما محيتش المكتوب، إيش اللي
بيصير؟ طالما أنا عملت open مرة واحدة، ما سكرتش لسه كل
عملية write، مكتوب في سطر طبعًا... الآن بعد هيك لو
عملت close للملف ورجعت عملت open تاني وحطيت
write، هيمحي المكتوب
فالـ code اللي أنا عامله ما فيش فيه مشكلة، لأنه فعليًا
هيضيف على الملف، طالما أنا عملت open مرة واحدة، هيظل
يكمل على الملف، طيب عشان نجرب هذا الشغل بدنا نروح
للملف هذا واحد تبعنا ونكتب فيه سطرين، my name is
Ahmed I study at IUG
دخّل مسار الملف اللي بنعمله encryption، دخّل
مسار الملف الجديد، تمام،
هيه خلصت، عملت ملف اسمه ink تمام،
هذا شكل الملف بعد إيش؟ بعد ده شفرنا، طيب بدنا نتأكد
اللي عملناها ده صح ولا غلط، إيش بنعمله؟ بدنا نعمل
عملية عكسية، هلجت يعني بده يقرأ الملف هذا ويطرح
منهم الخمسة ويخصه في ملف جديد عشان نتأكد ويرجعني
الملف الأصلي، واضح يا جماعة؟ إيش بنعمله؟ فروحت أنا
للملف تبع الـ code تبعي هذا، بس حكيت له هنا بدل مزيد
نقص خمسة، وبدي أشغل الملف، أعطيله مسار الملف المشفر
عشان يطلع الملف الجديد، واضحة كيف بدي أتأكد من حلل
اه، فالآن ثاني، Enter File to be Encrypted طبعًا هي
decrypted المفروض، 123، الـ ink.txt، مسار الملف
الجديد
Decrypt.txt هلجت
فيه ملف جديد؟ هاي ايه شكل الملف بعد مراجعة؟ أظن
الـ Newline عملت فيها مشكلة، يعني أعتقد إنه احنا لما
كتبناش هذه هيطلع الشغل صح، لإن هو أصلًا فيه Newline
واضح يا جماعة السؤال هذا؟ طيب بهذا السؤال استفدنا
منه حاجتين، أول حاجة شفنا كيف نعمل encryption وبعدين
طلبت سؤال شبيه فيه، كيف أنا أعمل copy لملف من
ملف لملف ثاني، نفس الحاجة، نقرأ سطر يعني كل اللي
أعمله عشان أعمل copy للملف إني أنا أشيل هذا السطر
وأقوله اعمل copy للـ line نفسه، يعني شايفين الـ code
الآن هذا، هذا الـ code اللي موجود قدامكم، إيش بعمله
هذا
الـ code اللي قدامكم
أنا أنا حولت الـ code من عملية copy، نسخ ملف لملف
تاني، إيش بيسوي هذا الـ code؟ بيقرأ سطر سطر من الملف
الأول، وبروح بكتب وين؟ على الملف التاني، يعني هذا
code copy ملف لملف ثاني، والطريقة اللي استخدمتها
على طريق الـ read line، مش الـ read أو الـ read lines
ليش؟ لأن فعليًا كل سطر على حدّه بياخذه من الملف الأول ومكتوب
على الملف التاني، خلص السطر الأول بيروح وين؟
على سطر التاني وعلى كده، بياخدش مساحة كبيرة في
الذاكرة
ودخل
مسار الملف التاسع السادسة واحدة؟
هيطلع له error الآن، عشان احنا برضه هذا الـ code
ممكن يصير عندي errors كتير، صح؟ ولا دخلت أنا مصالة
ملف غلط، ما شافش الملف، ما قدرش يشتغل، صلاحية الكتابة
على الملف، فاحنا عشان نحل هذه المشاكل كلها كل الـ
code تبع هذا بحطه ما بين الـ try، تمام
وفي الآخر هنا بقوله إيش؟ Except، وعشان أطلع الخطأ
بقوله إيش؟ هات للـ exception اللي بتطلع as x، ليش
exception as x؟ عشان آخد الرسالة اللي بتطلع في
الخطأ، وبقوله print
الـ x، واحد بيقول طب ليش حطينا الـ code كله، مش أنت
قلت لي المرة الماضية ما تحطيش الـ code؟ لأ، لإن الـ
code هنا كله معتمد على بعضه، أكيد طبعًا يعني إذا
ما قدرش يقرأ أي ملف من الملفين لازم ينفذش الـ code
التالي
طيب يا جماعة خلينا الآن ندخل في موضوع جديد، طيب
موضوع جديد وبسيط وهو موجود في الكتاب في Chapter
14، تمام؟ احنا طبعًا الـ files والـ exception هنا ده
Chapter 13، Chapter 14 بيحكي عن حاجة اسمها الـ tuples
والـ sets والـ dictionaries اللي هو هنبدأ فيه إن
شاء الله اليوم، طبعًا هذا chapter إن شاء الله هيكون
سهل، شبيه جدًا بالموضوع الـ list والـ string، عشان هيك
الامراجة أو متابع المعانا هيلاقوا الموضوع هذا
الجديد بسيط، الـ
Python، الجماعة فيها عدد من الـ data structures، إيش
هي الـ data structures؟ اللي هي... خلينا نسميها هيكل
البيانات اللي أنا بستخدمها للتعامل مع أنواع
البيانات المختلفة، من ضمن هيكل البيانات اللي احنا
أخدناها الـ list، الـ list فعليًا الحاوية للبيانات صح
ولا؟ ميزتها عن الـ variables العادية اللي بتاخد
أكثر من قيمة، الآن أنا أتطرق لأنواع أخرى خاصة من الـ
list، أنواع خاصة من الـ list استخداماتها مختلفة شوية
عن الـ list اللي لها بعض الميزات الإضافية، أول
نوع هنتكلم عليه حاجة اسمها tuple، باختصار
شديد، الـ tuple هو عبارة عن list غير قابلة للتعديل
يعني مثلا أنا معرف list بقول مثلا list واحد يساوي
واحد اثنين ثلاثة أربعة هذه list of four numbers
طبعا ال list هذه أنا بقدر أعدل عليها صح؟ بتضيف
عليها بعمل append بدي أحفظ remove بدي أعدل أي عنصر
بروح لل index و بغير القيمة الموجودة فيه لكن إذا
أنا بس روحت غيرت الأقواس اللي هنا خليتهم زي هيك
صارت نوع ثاني من ال list هذه بنسميها tuple حتى أنا
ما بديش أسمي ال المتغير list عشان ما يصيرش فيه لخبطة
بتسميه T1 هذه زي ال list تماما فيها
variables كتير لكن الفرق أن هذه ال tuple اللي جت
هذه بنسميها tuple اللي بين قوسين زي هيك هذه بنسميها
tuple اللي لا يمكن التغيير على المحتوى
ليش؟ ليش بنعمله؟ يعني أنا عندي حاجة ثوابت، تمام؟
ما بديش حد يغير فيها أو يلعب فيها، بنستخدم ال tuple
يعني أنا شخصيا ما أستخدمش ال tuple كتير، لكن ... بس
من المعرفة أنه عبارة عن list بس غير قابل أن أنا
أغير فيه أي شيء، أيوة تفضل أنت حكيت ال text برضه
غير قابل تعديله، بس تعديله بطريقة غير مباشرة، بس
القصة هي بتتغير
النص عبارة عن list of characters ممكن
لو يعني عن طريق إضافة character بيعمل لي نص جديد
لكن هذه لأ، أنا ما أقدرش أضيف عليها أو أحذف منها
بالمرة زي ما قلنا استخدامها فقط في حالة إنه أنا
بدي أعمل list من حاجات أنا ما بديش هي تتغير بالمرة زي
constants ثابتة ما بديش هي تتغير تطلعوا معايا كل ال
methods أو عدد كبير من ال methods اللي كانت موجودة
في ال list بقدر أنفذها في ال tuple يعني مثلا len
ال T1 هذا المفروض يتبع لي طول ال tuple في
عندي ال minimum و ال max و ال sum هذه كلها مصدر
methods كانت موجودة في ال list تمام؟ هذه minimum T1
Print Max
T1 طيب
ممكن كمان أن أعمل أفحص إذا in أو not in عشان أشوف
إذا العنصر موجود أو لأ بقوله مثلا F5 in T1
print found else print
not found
لو أنا عملت run لل code هذا
طبعا طبعا ليه؟ أربعة و واحد لين أربعة ال minimum
واحد ال max أربعة وبعدين طبعا ليه؟ not found لأن
الخمسة مش موجودة في ال tuple يعني نفس ال methods
اللي كنا نطبقها في ال list بتعامل مع ال tuple زي
كأنه بتعامل مع ال list لكن ما أقدرش أغير محتوى بدليل
أنه تعالوا نروح ل T1 و نشوف هل فيها method ل
append هذه مثلا ما فيش عندي method اسمها append لو
موجودة تطلع ليها في الخيارات صح؟ ما فيش عندي append
في عندي count ليش بنستخدم ال count في ال list؟
عشان نعد العنصر كم مرة موجود وفي عندي ال index
موجودة ليش بنستخدم ال index في ال list؟ عشان أدي
العنصر و يقول وين موجود في ال list المكان أول ظهور
فنفس ال methods اللي موجودة في ال list لكن لا تغير
على محتوى ال list موجودة هنا لكن أي method كانت
تتغير على محتوى ال list مش موجودة يعني مثلا ما فيش
عندي حاجة اسمها sort لأن ال sort بتغير ما فيش عندي
append إضافة لأن ال append بتغير ما فيش عندي remove
تمام هاي remove ما فيش عندي بالمرة باختصار أي
method بتغيرش موجودة أي method لا يتغير على الـ
tuple الموجودة من الـ methods الموجودة في ال list
لكن أي حاجة لا تتغير لأ تعالى نشوف ال tuple مثلا
قلت له tuple 1 و اضغط فيه 7 ايش أنا قاعد بعمل؟ بدي
أحاول أغير العنصر الثاني في ال tuple تمام؟ تعالى
نعمل run هيطلع ليه error أن أنا ما أقدرش أعدل عنصر في
ال tuple
بس طبعا بقدر أوصل أطبع ... أطبع العنصر، يعني هيك
بمشي الحل، طبعا، طبعا، لكن تغير؟ لأ
تمام؟ تغيير لأ ال slicing موجود تمام؟ ليش؟ لأن ال
slicing فعليا أنا ما بغيرش حتى في ال list أنا ما بغيرش
على ال list أنا باخد قطعة منها نسخة .. يعني نسخة
جديدة تمام؟ فال slicing موجود مثلا هيتي واحد اعملي
مثلا من اثنين للآخر يعني هيأخذ من ايش هذا ثلاثة و
أربعة طبعا ايش بيرجع T1 T2 هيرجع لي list طبعا
ال slicing لل tuple بيرجع list كيف
أتأكد أنه ايش رجع لي بطبع ال list اللي طلعت عندي هنا
مرة ثانية يا جماعة هذا ال slicing صح؟ هي كتبت اسم
ال tuple و قلت له من اثنين للآخر حتى
لأ رجع لي tuple تمام؟ يعني ال slicing لل tuple
رجع لي ال tuple ثاني فيه بس ايش العناصر اللي أنا
طلبتها تمام؟
طيب ممكن يكون عندي أنا list و أحولها ل tuple يعني
مثلا عندي list فيها مثلا أحمد أتأكد
tuple
أنا هنا طلع معايا عملت أنا list تمام وهنا روحت
عملت tuple بين قوسين list يعني أنا ايش عملت هنا
حولت ال list ل tuple ليش مثلا ما بديش حد يغير محتوى
ال list هذه يحذف منها تمام يضيف عليها حولتها ل
tuple طبعا أنا لما طبعت هذه طبعة لمحتوى على نفسه
بس لاحظ أن القوسين
قصة ال tuple يعني خلاص تحولت طبعا ال list يا
جماعة ضلت نسخة ال list لكن طلع عندي tuple جديد
يعني أنا بقدر أعدل على ال list الأصلية لكن ال
tuple اللي طلع عندي هو اللي ما أقدرش أعدل عليه
طيب هذا بالنسبة لل tuple زي ما قلنا استخدامه محدود
في ال python و استخدامه فقط لما أنا بدي أعمل
مجموعة من العناصر اللي ما بديش حد يغير عليها عشان
هيك أنا قلت أنه في الأول أنه في ال chapter هذا
بيحكي عن أنواع خاصة من ال list لأن ال tuple
باعتبروا زيك أنه list لكنه من نوع خاص
طيب نيجي الآن لنوع ثاني من .. برضه من ال list اللي
احنا بنسميه ال set طيب
ال set في الرياضيات هي عبارة عن ايش في معاها؟
مجموعة، تمام؟ ايش خصائص المجموعة في الرياضيات؟ أهم
خاصية للمجموعة لل set أن العناصر لا تتكرر فيها
العناصر في ال set لا تتكرر يعني احنا كيف كنا نلمس
المجموعة في الرياضيات كنا نحطهم بالقوسين هدول صح
ولا؟ تمام؟ وكان يقولون كمان أنه ما ينفعش أن يكون
عنده عنصر مكرر صح هذا غلط تمام فكرة ال set يا جماعة
هي عبارة عن list عادية لكن لا تسمح بتكرار العناصر
على عكس ال tuple هنشوف أن ال set مهمة و لها
تطبيقات كتير مش بس تكرار إليها وتطبيقات ثانية
هتمر علينا من خلال الأمثلة خلينا أول حاجة نشوف
كيف ننشئ set عشان ننشئ set بمنتهى البساطة زي ما
عملنا في ال list هاي S1 يساوي كيف احنا كنا ننشئ
list كنا نعمل زي هيك، صح؟ يعني عشان ننشئ set بنعمل
زي هيك بنحط بينهم العناصر 1 2 2 4 6 7 8 7 1
هيقول لي في عناصر مكررة هنا حتى لو أنا كتبت عناصر
مكررة أي حاجة مكررة هو لحاله بيجهلها و الدليل أن
أنا بعد ما أنشأت ال set روحت عملت print ل S1
تعالوا شوف ايش صار فيه موجود في ال set
تمام؟ العناصر المكررة شالها لحاله عشان نشيل التكرار
هل جيت احنا مثلا مثلا هن .. نفكر قدام شوية ايش
هنستفيد من ال set لو أنا قلت عندي نص مثلا فيه
كلمات مكررة وأنا طلبت أنه بدنا نشيل الكلمات
المكررة من النص ايش بنعمل؟ النص بنحوله ل list و ال
list بنحولها ل set لحاله بيشيل ايش؟ كل الكلمات
المكررة
طيب
في مشكلة صغيرة في الـ set صح هي أعطتني ميزة إنها
بتشيل التكرار لكن أنا بقول إن الـ set لا تضمن
الترتيب
هذه نقطة مهمة بمعنى إن أنا الـ set جت ضفت عليها
عناصر، ممكن العنصر اللي أنا أضيفه ينحط في الأول،
ينحط في النص، على عكس الـ list الـ list بتضمن ترتيب
إضافة العناصر، يعني العنصر اللي بضيفه في الآخر،
بيضله في الآخر، تمام؟ العنصر اللي بضيفه في الأول،
بيضله في الأول، الـ set لأما بتضمنش .. الترتيب مش
مضمون، تمام؟ ممكن تطلع العناصر عندك مرتبة لكن
الترتيب فيها مش مضمون ولذلك هنشوف أمثلة على هذا
الكلام ممكن
مش كل ما أمرن يعني ممكن أنا ضفت عنصر جديد، العنصر
الجديد بحطه في الرقم 2 مثلا، تمام؟ هو عنده طريقة
داخلية للترتيب، بعرفش كيف هو برتبها داخليا لكن المهم
أنه الترتيب العناصر في الـ set مش مضبوط، طبعا إذا
أنا بدور على الترتيب بروح لـ list طبعا هنشوف إنه
ممكن نحول الـ set لـ list والـ list لـ set، ليش هنلجأ
للتحويل أثناء البرمجة عشان نستفيد من مميزات هذه ومميزات
هذه الـ set فيها مميزات إنها بتشيل التكرار
الـ list فيها ومميزات تانية هنتكلم عليها قدام إنه بقدر
أشوف العلاقة بين set و set تاني، هل في تقاطع بينهم؟ هل
هذه بتحتوي هذه؟ هل فيش في عناصر مشتركة بينهم؟ لكن
في الـ list هذه الحاجات صعبة إن أعملها، الـ list فيها
ميزة إنها بتضمن الترتيب وممكن أعمل sort لها الـ list
هذه مش ممكن أعمل فيها sort لأن قولنا مالها بتضمنش
الترتيب
طيب أول حاجة جزء كبير من الـ methods الموجودة في الـ
list موجودة أيضا في الـ set يعني مثلا print len
set بيجيب لي طول العناصر الموجودة فيها، max set أكبر
عنصر، sum
set
print 13 in S1
إيش هنا هذا الكلام يا جماعة؟ هنا طول الـ set أكبر
عنصر، مجموعة العناصر اللي فيها، هذي افحص لي هل الـ 13
موجود في الـ set، معروف إن الـ in هذي بترجع true أو
false، لو بدنا نجيب عنصر من الـ index يعني، نحط
أناقوص، أناقوص بتاعة الـ .. بدنا نجيب عنصر معين من
الـ set هـ .. هـ .. أناقوص الـ set في الـ .. الـ .. نفس
.. نفس .. نفس .. نفس .. نفس .. نفس .. نفس .. نفس
.. نفس .. نفس ..
نفس .. مافيش عندي إن أنا .. أو مثلا لو طبعنا S2 مش
هنستفيد منها كتير لإنه بتقولنا الترتيب مش مضمون
أنا عارف بس بحكي أكواس .. أكواس الـ S والأكواس هم
.. هم نستخدم .. آه .. ما .. هد مش .. لحظة شوف هد
هتشتغل ولا لأ .. هد أصلا تمام مش هتشتغل، يعني في الـ
set لا يمكن الوصول لأي عنصر بالـ index، تمام؟ ليش
موقفين أنا في الـ set؟ لأنه أصلا المبدأ إنك تصل بالـ
index، هذا مفيد أو أنا أستفيد منه لو أنا .. يعني
العناصر مرتبة، تمام؟ يعني أنا بدي العنصر الأول
بقوله صفر، الأقل في الـ set، المشكلة إنه أنا ضفت
العناصر لكن هو مرتبليش إياهم زي ما أنا ضفتهم
فالترتيب مش مضمون فبيقول لي إن هذا الـ index مش موجود
هنا إذا أنا بدي أوصل على الـ index بدي أضطر أحول الـ
set لإيش؟ على الـ list عشان أوصل العناصر واحد واحد، الآن
هنشوف من خلال أمثلة عملية، خلينا بس نستعرض إيش فيه
في الـ set وبعدين هنشوف كيف هنستفيد منها في أمثلة
عملية، طيب هذا الـ method زي ما حكينا إن كلها موجودة
في الـ set وموجودة في الـ list، بقدر
كمان أعمل for loop على الـ set يعني مثلا for i in S1
مثلا مثلا مثلا مثلا مثلا مثلا مثلا مثلا
مثلا مثلا
مثلا
مثلا مثلا مثلا مثلا مثلا مثلا
مثلا مثلا مثلا مثلا مثلا مثلا مثلا مثلا
مثلا مثلا، الـ set زيها زي الـ list برضه تماما
باستثناء واحد إنها بتسمحش بالتكرار، ما بنستخدمش الـ
index وفي اختلافات تانية يعني مثلا احنا شوفنا الـ
methods المشتركة تعالى نشوف الـ methods المختلفة
بينهم
S1 كيف كنا نضيف على الـ list؟ Append، الآن عشان نضيف
حطها Add، ليش حط Add؟ ليش غير الاسم؟ كلمة Append
معناها ضيف في الآخر، كلمة Append في الإنجليزي يعني
ألحق في النهاية، طبعا هذه مدام الإضافة مش مضمونة وأنا
يحطه طبعا فغير اسم اسمها من Append إلى Add، Add
معناها ضيف لكن أنت ممكن تضيفه تلاقيه حط وين؟ في
الأول، أد ثلاثة أد
ستة ستة موجودة خمسة سنضيف ستة ثانية ثم نطبق طبعا
هنا هل ضعف الثلاثة؟ طبعا ماشي، أضاف التلاتة وين بعد
الاتنين، طبعا الخامسة بعمل
ترتيب بس برضه مش مضمون ممكن نلاقي النتائج مش مرتبة
طبعا الستة
طبعا لأنها موجودة ما رضيش يضيف ستة تانية بعد انطباعت
الـ set هيجيب ليها بالشكل هذا فباختصار يا جماعة إن هو
بدل append استخدم add
بعدين في عندي method تانية شبهها في اسمها update
تمام، هذه يا جماعة update زيها
زي الـ extend بتتذكروا الـ extend في الـ list إيش
فائدتها إنها تضيف list جديدة، هنا غير اسمها من
extend لـ update لنفس السبب إنه هدى تستخدم أيضا
لإضافة set داخل set تاني لكن ما سمعش extend لأن
كلمة extend معناها إنها ضيفة إضافة جديدة صح ولا في
الآخر، extend زي تمدد دايما الحاجة اللي بتتمدد
الإضافة الجديدة بتكون في الآخر، طبعا فهنا لأ أنا
جالك بغير الاسم بسميها update لإنه ما تحملش معنى
إن الإضافة أو الـ set الجديدة اللي هضيفها تكون في
الآخر، يعني باختصار هذا الـ update بتضيف set لكن وين
بتضيفها؟ وين العناصر اللي بتنحط مش معروف، طبعا شوفوا
إيش بدي أعمل أنا ستة وستين تلاتة أربعة عشر، ضفت
set جديدة
على S1 Print
S1
هو
أكيد ضاف هذه كلها، انضافت على هذه
الـ extend كان يعني العناصر الموجودة في الـ list
يضيف عليها، بضيف الـ data عادية، الـ update زيها زي الـ
extend في الـ list، أخد العناصر الموجودة في الـ set
الجديدة وضافها في الـ set الأولى لكن اتطلعوا شوفوا الـ
66 مثلا وين ضافها؟ وين حتى الـ 66؟ آه مع أي اللي
بنحكي إن الترتيب مش مضمون، التلاتة ضافت هنا
الـ 14 ضافت هنا لكن في النهاية كل العناصر هدول
اللي حطوا هنا في الـ set الأولى
يبقى
يا جماعة بدل الـ append والـ extend موجود هنا add و
update تمام؟
طيب في عندي كمان method كيف نحذف من الـ set زي ما
بنحذف من الـ list، كيف كنا نحذف من الـ list في طرف
تاني، في remove وفي del، تشبهوا في بعض، الـ del
بتتعامل مع الـ index، الـ remove بيعطيه عنصر بدور
عليه موجود وبيحذف، وفي كمان الـ pop، يبقى فيه تلت
طرق للحذف الـ remove والـ pop والـ del، طيب الـ remove
و الـ pop موجودين في الـ set لكن الدل لأ ليش لأن
الـ del معتمد على الـ index تمام؟ و الـ pop الموجودة في
الـ set هنشوفها الآن بقدرش حدد فيها index بتشيلي بس
من الأول تعالى نشوفها أول حاجة أسهل طريقة أني أحذف
الـ remove
باطل الأنصار اللي بدي أحفظه ليكون أربعة S1 تحفظه و
بعدين ا print S1
تعالوا نشوف الـ list اللي طلعت عندي هاي واحد اتنين
الأربعة شالها ستة سبعة تماما طبعا
الـ remove لو ماكنش الأنصار اللي بدي أشيله موجود
هيطلع error تمام يعني مثلا شيلنيعشرة هذا
بطلع error فالأفضل
أنه قبل ما أحدث أقول له F10 N S1 صح؟ روح عمل
remove
في طريقة تانية هم عاملينها في الـ set لحالها اسمها
زي الـ remove بالظبط بس اسمها discard و
بعطيله مثلا أربع الـ discard زي الـ remove بس الفرق
أنه لو الأنصر مش موجود بيطلق ليش error يعني
مثلا أنا هنا روحت عملت حذف لعشرة
و فعلياً الـ list مش فيه عشرة ما طلعليش قرار طبعا
يعني remove و discard زي بعض بعطلهم الـ item و
بيشيلوه من الـ set لأن
في method تاني للحذف اسمها pop تعالوا نشوف إيش
بتعمل طبعا إحنا في الـ list بتذكرين إن الـ pop
طب لحظة الـ pop اللي موجودة في الـ list اول حاجة
ممكن تاخد index ممكن لأ يعني انا مثلا ممكن اقوله
في الـ list اعطله pop خمسة يعني اطلعه للانصر الخامس
و طبعا الفايدة التانية للـ pop انها بترجع الانصر
اللي بحثه في متغير مثلا R اه لو ماحطناش حاجة بتشيل
من الآخر تمام؟
في ال .. في الـ set موجودة الـ pop تمام؟ لكن بنفعش
أحط لها index نشوف إيش هتطلع في
الـ pop بتشيلي أول عنصر موجود في الـ set تمام؟
الـ pop بتشيلي أول عنصر موجود في الـ set طبعا الـ pop
هنا مش هتفيدني كتير لانه انا مش عارف او مش ضامن
ايش هو اول answer طبعا فانا مفضلش استخدامها هنا
فافضل طريقة الحذف من الـ set اللي هو استخدم الـ
remove او الـ discard الفرق بين remove و discard ان
الـ remove بتطلع اقول ان هو الـ answer مش موجود و الـ
discard لأ
يعني يا جماعة اللخص اللي حكيناه أن الـ set تقريبا
شبيه جدا في الـ list لكن مافيش فيها تكرار مافيش ..
لأنه التكرار أو المكان العناصر مش مضمون الوصول
المباشر باستخدام الـ index مش موجود تمام؟ أي
عمليات؟كانت تعتمد على الـ index برضه مش موجودة يعني
مثلا s.index مافيش method اسمها index في الـ list
كانت موجودة ايش فايدة الـ method index في الـ list
اتجيبلي مكان اول ضهولة للـ answer صح يترجعلي رقم في
الـ set هذه مش موجودة انت بيقولي مدام انت الترتيب
مش مضمون يجيبهم cash تعرف وين كل answer موجود فأي
حاجة اللي عم بتتعامل مع index بطلت موجودة في الـ
set الآن اي method لها علاقة بالمحتوى هتلي طول الـ
list او الـ set هتلي اكبر عنصر او اصغر عنصر عدد
العناصر مثلا
مجموعة العناصر الموجودين for loop هل in او not in
العنصر موجود او مش موجود هذه كلها موجودة في الـ
list و في الـ set الـ set زي الـ list بقدر اضيف عليها
لكن هو مغير أسماء الـ methods يعني بدل ما يستخدم
append و extend استخدم add و update طبعا الحدث طرق
الحدث بال value موجودة ماعنى بال value بالقيمة زي
remove مثلا طرق الحدث بال index مش موجودة زي الـ
deal واضحة كيف؟
الآن الـ set مافيش فيها sort ليش انه احنا نقول لا
تضمن ترتيب العناصر طيب
الـ
set فيها clear ايش يعني زي الـ list اللي حذف كل
العناصر الـ tuple اللي فيه clear ايش رأيكم من غير ما
نجرب الـ tuple اللي فيه clear لأ لأن الـ tuple اللي
انا انشقته مينفعشأعدّل عليه واحد في العناصر
الموجودة فيه طيب أثناء البرامج هنحتاج لماع بشكل
كبير نحوّل من set ل list أو list ل set ليش؟ لأن
أحيانا أنا بحتاج خصائص مش موجودة في الـ set فبضأ
الطرق أحولها ل list عشان أستفيد منها يعني مثلا من
الأسئلة هناخدها بعد ذلك أن أنا أعطي علامات أو
أرقام أو أسماء أشخاص أقول له شيل الامكرر و رتب ليه
أشرح كيف نحل سؤال زي ايه؟ زمان
شي اللي مكرر كانت جثة موجودة في الـ list صح؟ كنا
نمر عليها ناسر و نشوف نعمل list جديدة، متذكرين؟
اللي هي .. اللي .. كنا نعمل سجل، كل حاجة نمر عليها
نحطها في list تانية، هل موجودة في الـ list التانية؟
إذا موجودة، خلاص ماضفها، مش كنا نعمل زي ايه؟ اللي
قال لأ، بمنطقة البساطة، عشان أشيل التكرار، الـ list
بحولها ل six، راح التكرار كله طب بعدين بنرتبها؟
مانفعش أرتب الـ set بقعدش أحولها ل list و برتبها
طبعا؟ هاتوا الأن ناخد مثال عالسريع إن أنا في
المحاضرة and list فيها
مثلا أسماء أشخاص أحمد عمر علي كمان أحمد
الان انا ادلس طلبت انا ان اشيل التكرار و ارتبه
مابجديا كل اللي بدي اسوي هو بدي احول الـ list لـ set
عشان اشيل التكرار كيف؟ بعمل set 1 هذي اسم الـ set
كيف احول الـ list لـ set؟ بكتب كلمة set و بين قصين
بحط الـ list تعتي بهو
الـ list اللي عندى بدي احولها ل set بستخدم الـ
method اللي هي set و بحطله بين قسين الـ list بتاعتي
مش هذه list واحد حطيت هنا هي list واحد هذه تحويل
الـ list لـ set هذه ايش بترجع الـ method set بترجع
set جديد الأن
الـ set الجديد هذا فيها العناصر بدون تكرار والدليل
أنه أنا تعالي نعمل run تمام هي جب للعناصر و كل
مكرر ماله كله حدث لكن شايفيني الترتيب خرب الدنيا صح
ومش أبجدي يرتبها ولا عكس ترتيب الأبجدي لأنه طلع و
هنا أحمد حطها في الآخر صح ولا لأ و هنا علي حطها
يعني .. يعني مفيش ترتيب مش مضمون بالمرة ولا بنقدر
نقول أنه أبجدي ولا reverse alphabetical تمام مش
مضمون الترتيب لأن بدي أكمل على السؤال أنه أنا بدي
.. هيكتب العناصر بالدرجة
بتخزن في list واحد بدل من متغير جديد بكتب برضه
كلمة list و بحط بين قسين الـ set بتاعتي يعني
باختصار يا جماعة عشان احول list
ل set بستخدم الـ method set و هنا بحط الـ list
بتاعتي عشان احول الـ set ل list بكتب list و بحط هنا
إيش الـ 6 طيب حولناها ل list ليش؟ إيش الهدف من
التحويل ل list؟ عشان أقدر أقول له list1.sort و
بعدين print بالنسبة
لهذه الـ list بدون تكرار و العلاقات اللي فيها مرتبة
أبجدين تمام؟
الموضوع هذا يا جماعة الـ chapter هذا زي ما قلنا
بسيط بيعرضنا خلانا نقول data structures اضافية او
انواع خاصة صميناها من الـ list تجاوزا انواع خاصة من
الـ list اللي هي الـ tuple والـ set وفي حالة تالتة
اللي هي semantic channels هتكلم عنها لاحقا الـ
tuple list لا يمكن التعديل عليها هذا معناه ان اي
method فيها تعديل او تغيير مش موجودة الـ set بتلغي
التكرار هذا معناه ان اي method بتتعامل
مع الـ index برضه مش موجودة نقطة أخيرة جمالنا
المحاضرة بيحكيلي كمان في ال python أن ال
performance أو ال efficiency بتاعة ال set و ال
tuple أكثر من ال list ايش أن efficiency يعني
فعالية أو كفاءة ال set و ال tuple أكثر من ال list
يعني أنا لما اجي اعمل for loop على ال set هتكون
أسرع من إني أعمل for loop على ال list، هي معناه ال
efficiency، تمام؟ الإضافة و الحذف و البحث في ال
set و ال tuple أسرع من ال list، أسرع، طبعا هذه
و أنا بتفرج معايا، لو أنا بتعامل مع برامج فيها data
ضخمة جدا و بدي ابحث مثلا في list في الحالة هذه إذا
كانت البيانات ضخمة و أنا باخد وقت طويل في البحث
ممكن أحول ال list ليش؟ ل set أو ل tuple كم
بحول ال list ل tuple بحط كلمة tuple و بين قوسين بحط
ال list عادي فبس دورنا نقطة ال efficiency في أي
سؤال يا جماعة؟