طيب في المحاضرة الماضية يا جماعة أخذنا بعض الأمثلة
على استخدام الـ string، المحاضرة هذه هنحلّ
كمان سؤالين، وندخل إن شاء الله في موضوع جديد، اللي
هو التعامل مع الـ files، يعني كيف نقرأ و نكتب من
files، طيب
السؤال اللي هنحلّه اليوم، أول سؤال بيقول write a
function، اللي هي صفحة صحية، هي صفحة صحية يعني اكتف
فانكشن تفحص هل الـ password صحية، تنطبق عليها شروط
معينة أو لا، إيش هي الشروط هذه؟ هنشوفها الآن في
السؤال، suppose that the password rules are as
follows، قواعد الـ password كانت تالية، أول حاجة a
password must have at least eight characters، يعني
لازم على الأقل طول الـ password يكون ثمانية، ثمانية
أو أكثر، بتكون الـ password صحيحة، a password must
consist of only letters and digits، يعني احنا بنقدر
نحط في الـ password فقط حروف وأرقام، يعني رموز
ممنوع تمامًا، الشرط الثالث a password must contain at
least two digits، يعني لازم تحتوي على الأقل على
رقمين، يعني أنا مش بدخل characters على الأقل ثمانية
من الثمانية هدول على الأقل اثنين بدهم يكونوا
digits، طبعًا هذه الشرط احنا بنواجهها كثير في الـ ..
لما نعمل password صح؟ ليش بيقول لك لأ، ولا الـ
password اللي عملتها لازم يكون فيها على الأقل
أرقام، طبعًا لازم يكون فيها بتبدأ بـ capital، طبعًا حتى
ممكن نضيف شرط نقول مثلًا إذا يكون بداية الكلمة إيش
capital letter
طيب خلينا نشوف شرط شرط ونشوف كيف احنا برمجيًا
بنحقق الشروط هذه، أول حاجة الـ password must have at
least 8 characters، على الـ len هذا كيف بنعملها على
الـ len، يعني لازم يكون الـ len أكبر من أو يساوي
ثمانية، الشرط الثاني الـ password لازم تحتوي أو تتكوّن
من letters و digits، إذا قلنا إذا قلنا إذا قلنا
إذا قلنا إذا قلنا إذا قلنا إذا قلنا إذا قلنا إذا
قلنا إذا قلنا إذا قلنا إذا قلنا إذا قلنا إذا قلنا
إذا قلنا إذا قلنا إذا قلنا إذا قلنا إذا قلنا إذا
إذا قلنا إذا قلنا إذا قلنا إذا
قلنا إذا قلنا إذا قلنا
خلينا نحلّ السؤال مع بعض يا جماعة، طبعًا هو طلب إيش؟
function، يعني خلينا نفكر في الأول إيش اسم الـ
function؟ إيش الـ input تبعها؟ وإيش الـ output؟
يعني إيش رأيكم؟ إيش الـ input تبعها؟ إيش المدخل
هيكون للـ function؟ الـ password صح ولا؟ والمخرج
إيش؟ يعني هي المفروض تقول إن أنا valid ولا not
valid، يعني إيش؟ يعني المفروض يكون المخرج تبعها true
أو false، صح ولا يا جماعة؟ دائمًا أنا لما يكون عندي
نتيجة أو لا، أبيض أو أسود، واحد أو صفر، valid أو
not valid، برجع true أو false، طبعًا، طيب نجي هنا نعمل
الـ function، نقول diff اسمها check password
وبين القوسين همرّ مين؟ همرّ الـ password، لأن
أنا عندي طريقة ثانية للحلّ، يا إما أحطّ if في
statement واحدة، أحط فيها شروط، شرط الأول إذا تحقق
and الشرط الثاني and الشرط الثالث، رجع true، يا إما
نفحص شرط شرط، والله إذا ما تحققش الشرط الأول رجع
false، إذا تحقق إيش أعمل؟ أكمل، واضحة الفكرة كيف هذه؟
هذا الـ logic المفروض يكون بناءً عنكم من المادة
الأولى، يعني يا إما أن أفحص كل الشروط، أقول والله
إذا تحقق الشرط الأول والثاني والثالث رجعت true،
غير هيك رجع false، هذه طريقة، زي ما عملنا المحاضرة
الماضية، حليّناها بالطريقتين، الحل الثاني كان إن
احنا حطينا كل الشروط ورا بعض، طبعًا إذا تحققوا كلهم
حطينا الـ and بينهم، رجعنا true، الطريقة الثانية لأ نفحص
الشروط شرط شرط، والله نفحص الشرط الأول، ما تحققش على
طول ما فيش داعي نكمل، ما فيش داعي نكمل، نرجع false، إذا
ما .. إذا ما تحققش الشرط، مش هيرجع false، هيكمل في
البرنامج، نفحص الشرط الثاني والثالث وهكذا، الآن
أي طريقة أفضل؟ لكن أنا عندي هنا كل شرط بده شغل،
طبعًا، فمثلًا إن أحطّهم كلهم ورا بعض ممكن تكون صعبة
شوية، طبعًا، والـ code ممكن مش readable، يعني صعب
قراءته أو فهمه، لو واحد يجي بدي يقرأ الـ code، فأنا
بدي أحلّها الطريقة الثانية، وكل واحد يعني أي مبرمج
ممكن يحلّ بطرق مختلفة، طبعًا، طيب أول حاجة بدي أشوف
أتأكد إن طول الـ string ما يقلّش عن ثمانية، لأن أمتى
المفروض يطلع false، إذا قلّ عن ثمانية، فبدي أقول له if
len الـ password أقل من ثمانية، return
false، يعني أنا هنا حطيت شرط إنه تكون إذا كانت أقل
من ثمانية، على طول ما فيش داعي تكمل، رجع إيش؟ رجع false، الآن
إذا ما دخلش على الـ if statement، أو إذا ما تحققش
الـ if statement، هيكمل تحت، تمام؟ الآن بتبحث من
شرط الثاني، الشرط الثانية بيقول إن لازم الـ password
تتكون من letters و digits، يعني باختصار ما يكونش
فيها مثلًا رموز، الآن if password is unknown، تمام؟
آه لأ، بديش أعمل return true، الآن أنا بدي أقول له
if not is unknown
return false، ماهي الكلام اللي حققته أنا إذا بديها
is unknown، إذا كان يتكون من alphabetical
characters و numerical characters، أكمل، إذا ما كانش
هيك إيش؟ نعمل false، عشان هيك نفيتها، قلت له if not
is unknown، يعني إذا ما تحققش الشرط هذا خلاص بتكون
الـ password مالها؟ خاطئة، فيعمل false، return false
أمتى هيكمل؟ إذا كانت إيش؟ العكس واضح يا جماعة هذه؟
هذا logic، يعني في الأول أنا الطريقة اللي مشيت
عليها إنّي أفحص شروط إذا كانت الـ password مش صحيحة
فبدأ أشوف إذا ما انطبقش الشرط الأول، هيك بحكي هي الـ
logic، إذا ما انطبقش الشرط الأول اطلع، طب إذا انطبق
أفحص الشرط الثاني، إذا ما انطبقش الشرط الثاني اطلع،
لاحظ أنا قاعد بأنفي إذا ما .. إذا لم ينطبق الشرط
الثاني اطلع، كلمة إذا لم ينطبقها دي كيف طبقتها؟
حطيت not، تمام؟ وهنا كيف طبقت إذا لم ينطبق هذا
الشرط؟ حطيت بدل أكبر من أو يساوي، حطيت إيش؟ أقل من
تمام؟ الآن تأكدنا من شرطين، الآن الشرط الثالث هو
اللي بده شغل شوية، إيش بيقول لي؟ إنه لازم يكون في
الـ password على الأقل رقمين، طب كيف نتأكد إنه
رقمين؟ احنا واحدة يقول لي أخذنا method اسمها is
digit، تمام؟ بس هذا is digit بتفحص الـ password
كلها، أنا بديش أفحص الـ password كلها، أنا بدي أتأكد
إنه من ضمن الـ characters ذات الـ password فيه two
characters على الأقل ما لهم أرقام، تمام؟ آه بالظبط
في الحالة هذه أنا بقدرش أفحص الـ is digit على الـ
password كلها، لازم أجزّئ الـ password لـ characters و
أمرّ عليها character character، وكل character أتأكد
إنه digit ولا مش digit، واضحة الفكرة هذه؟ طيب يبقى
أنا الـ is digit بديش أفحصها على الـ password، بدي
أفحصها على مين؟ على مين؟ على الـ characters، أنتم
معايا ولا لا يا جماعة؟ بدي أفحصها على الـ
characters، كيف أنا بفحصها على الـ characters بتاعة
الـ password؟ لازم أعمل loop على الـ password عشان
أجيب character character، عشان أفحص character
character، فبقول for in
password، مش هيك؟ أنا بمرّ على الـ characters، طبعًا
بقول له if i dot is digit، لأن إيش عملت هنا؟ فحصت مين
الـ character، هل هو digit ولا مش digit، إيش بنعمل في
الحالة هذه؟ خلينا نفكر، هل جيت بالظبط احنا قلنا يا
جماعة ما يقلّش عدد الـ digits عن اثنين، بمعنى إنه احنا
قاعدين بنعدّ، صحيح ولا لأ؟ فأنا بتمرّ عليه الـ
characters اللي موجود في ال string هاي مثلا كلمة
hello تلاتة و تلاتين تمام هو اشترط عليه انه ما يقلش
عدد ال digits عن اتنين فبتدمره على ال character
الأول هل هذا digit مدام أنا حددلي عدد يبقى لازم
اعدهم صحيح ولا لأ يبقى لازم اعمل قبل هيك ايش متغير
counter قيمته مثلا صفر
تسيبه وروح وين؟ على اللي بعده رقم لأ لأ لأ لأ هذا
ما قاله رقم زيد ال counter بواحد وروح على اللي
بعده هذا رقم زيد ال counter بواحد الآن إذا بتطلع
على ال counter والله إذا كان اتنين معناه الشرط ما
يتحقق كان أقل من اتنين هو ايش اشترط انه ما يقلش عن
اتنين اذا كان أقل من اتنين معناه الشرط خطأ
ما اتحققش واضحة ده الفكرة ده يا جماعة
فأنا عملت loop for i in password عشان يمرعلك كل
character وفحصت هل ال character عبارة عن digit إذا
كان الكلام هذا سليم هنا قبل اللوب هذا يجب عمل
counter يساوي صفر وهنا بحكي counter زائد يساوي
واحد بعد
ما يخلص هذا كله if counter
أقل من اتنين return
false كأني بقوله إذا ما اتحققش الشرط التالت صح
ولا لأ if counter أقل من اتنين ايش يعني إذا ما
اتحققش الشرط التالت اعمل برضه ايش return false
يعني أنا ماشي الشروط بالترتيب مسكت الشرط الأول
ما اتحققش اعمل false على قول في دا عنكمل فيش دا
عنكمل بعدين امسك اذا اتحقق الشرط الأول روح على
التاني ما اتحققش التاني اعمل false اتحقق كمل على
التالت اشتغلنا على الشرط التالت اذا ما اتحققش اعمل
false الآن والله اذا ما عملش return من ال code اللي
جابه المعنى ان كل الشروط مالها اتحققت فماعلي الا
في اخر سطر احط return true
فهمتوا هذه؟ يعني إذا والله ما رجعش هنا وما رجعش
هنا وما رجعش هنا معناها أن كل الشرط حققت صح في
الآخر عملت return true واضح
الحل يا جماعة الآن ده نتأكد من الحل هذا كيف
نتأكد؟ هذه عبارة عن function طبعا فبدأ أقول له لأن
check أو اه بدأ أعمله print و بين قصين أحطه ل
check password ايش عملت انا نديت check password من
داخل ال print ممكن ايه دي أعملها؟ بنفع ولا بنفعش؟
بنفع هتطبع على ايش؟ true أو false لأن check
password في الآخر بترجع قيمة أنا هنا بطبع القيمة
اللي بترجع من ال function check password انجرب نحط
مثلا passwords هي مثلا أحمد تلاتة هذه المفروض ايش
تطلع false لأن فيها digit واحد طبعا هي الكتاب لهنا
false طب هاتوا نجرب اكتر من واحدة هذه
لن شوف مين هيطلع false و مين هيطلع true هذه false
ليش ال digits واحد هذه صحيحة ولا يعني على عدد واحد
اتنين تلاتة اربعة خمسة ستة سبعة طيب هذه مالها برضه
خطأ عشان فيها underscore هذه مالها خطأ خلينا
نعملنا واحدة صح عشان ايش حطها هنا مثلا
واضح يا جماعة؟ طب كيف نفحص إذا الكلمة بتبدأ
ب capital؟ ما قلنا ايش، صح؟
نشوف ايش في عندنا مثلا خلينا نقول هنا نعرف اجربها
مثلا P يساوى نص معين isUpper
في عندي method اسمها isUpper طالع يا جماعة معايا
احنا بنفحص إذا الكلمة بتبدأ ب capital يعني أنا ضفت
شرط من عندي ايش الشروط الآن صارت إن الكلمة ما يقلش
عن تمانية ما يكونش فيها رموز تكون بس من أرقام و
characters و الشرط التالت انه يكون فيها على الأقل
two digits و الشرط الرابع إنها تبدأ ب capital
letter طبعا؟ الآن عشان أشوف تبدأ ب capital letter
في عندي لل string مثل اسمها is upper طبعا ايش يعني
is upper؟ من اسمها تفحصلي انه كان upper case بس
مقدرش أقوله أطبق .. أقوله password و أعمله is
upper ليش؟ لأنه هاد هيفحصها كلها أنا بدي أتأكد فقط
انه أول واحد هو ماله ال capital طبعا فبقوله
password وحط هنا ايش؟ zero يعني هل ال character
الأول upper؟ طبعا على نفس ال manual اللي مشيت عليه
انه انا دايما بفحص اذا الشرط ما اتحققش اعمل return
false فبقول له if not upper .. صح ولا يا جماعة
احنا ده منين في الشرط return false كيف
تاني .. اهليش في الآخر حطينا return true؟ لأن احنا
الطريقة اللي مشينا عليها انه نفحص الشروط شرط شرط و
أي شرط ما اتحققش نطلع من الـ return false يعني إذا
ما اتحققش الشرط الأول اعمل return false بعدين روح
على الشرط التاني ما اتحققش اعمل return false روح
على الشرط التالت ما اتحققش اعمل return false طبعا؟
الآن في أي شرط ما اتحققش هيطلع من ال function صح
ولا؟ طيب إذا مر على الشروط كله معناه مش هي عمل
return فالخيار الوحيد اللي ضال عندي أو الاحتمال
الوحيد انها true تكون صح ولا لأ؟ يعني اذا هو الشرط
الأول اتحقق يعني معناه ما عملش return false الشرط
التاني اتحقق معناه ما عملش return false التالت
اتحقق ما عملش return false معناه انه خلاص انه كل
الشرط حققت فهيعمل return true واضح
هذي يا جماعة كيف؟
هل في method اسمها isTitle؟ هنا السؤال طبعا إذا في
method اسمها I في isTitle ممكن تمشي يعني مثلا هنا
لجيت أنا method اسمها isTitle بس هذا isTitle يعني
ايش بتعمل؟ لو المكونة من كلمتين لازم الحرف الأول
من كل كلمة يكون capital إذا كانت ال password عبارة
عن كلمة واحدة هادي بتمشي فيها يعني هنا كإني بقول
برضه إذا not title اما return false بس أسهل عشان
تكون مفهومة يمكن هي دي بتطلع ايش مفهومة أكتر is
upper يعني معناه افحصلي ال character الأول والله
إذا ما كانش upper على طول اما ال return فالس الان لو
وصل عند هنا شايفين المؤشر هذا السطر هذا إذا وصل
عند السطر هذا معناه انه عدى من مين؟ من كل اللي فوق
معناه انه اكيد ما ضلاش خيار ان ال password مالها
صحيح يعني
في الحالة هذه مثلا لو حطيتها decimal المفروض يرجع
ايش؟ false
طيب خليني أشوف مثال تاني
write a function that parses a binary number as a
string into a decimal integer use the function
header if binary to decimal binary string ايش معنى
الكلام هذا؟ بنعمل برنامج ياخد مني binary number
ك string ويحوله ل decimal واضح يا جماعة؟ بدي ياخد
مني binary ويحوله ل decimal طبعا انتوا أخدتوا في
المقدمة في الحوسبة الفاصلة الماضية التحويل من
ثنائي لعشري تمام؟ والمفروض أن يكون H بسيط صح ولا
لأ؟ يعني مثلا لو أنا قلت الرقم هذا 101 تحويله ل
decimal عبارة عن باخد هذا اتنين بضربه في H في
اتنين وصفرو هذا بضره في 2 أس 1 و هذا بضره في 2 أس
2 و بجمعهم كلهم النواتر صح ولا لأ هيك أنا بحول ل
decimal طيب خليني احنا نشوف كيف احنا بدنا ندخل
string عبارة عن رقم binary و في الآخر بده يطلعلي
رقم decimal يقوللي هذا ال binary ال decimal تبقى
ايه زيه تمام بدنا نفكر فيها خطوة خطوة اول حاجة انا
هدخل جام المبدأ حل خلينا نخطط كيف الحل هيكون بعدين
مطبق اول شي انا ال string هدخلها مثلا كنص طبعا؟
مش
شرط ممكن نحولها في الأول ممكن نحولها في الآخر،
طبعا؟ اه الاصل ان احنا نجزقها، طبعا؟ يعني بدي اخلي
أو امر على كل واحد على حد، صح ولا؟ خلينا نشوف الآن
المفروض ممكن نبقى طبعًا الـ .. هذا الرقم زي هيك أول
character فيه وين كـ string إذا تعاملت معه كـ string
وين أول character؟ من هنا، مش من هنا، صح ولا؟ يبقى
أنا لما أجي أعمل loop بقوله for I in مثلًا S، اللي
هي إيش الـ S هذه؟ اللي هي الـ .. الـ string هذه ممكن
نعمل loop بالعكس، مش مشكلة، تمام؟ بس أنا بدي ..
أنا بدي أعملها بالشكل هذا الآن بدي أمسك الـ
character الأول المفروض أضربه في إيش؟ في 2 أقصى حجة
صح ولا؟ في 2 أقصى جداش المفروض أضربه في المثال هذا
هنا في المثال هذا في 2 أقصى جداش؟ في 2 أقصى 3 كيف
عرفت 2 أقصى 3؟
ماشي طول الـ string جداش؟ أربعة طبعًا فدائمًا هنبدأ
الأول هيكون في اثنين أقصى صفر اثنين أقصى واحد
اثنين أقصى اثنين اثنين أقصى ثلاثة هذا يا جماعة
ناسي كيف تحويل من بايدنا لديسمل تمام بنضرب في
اثنين أقصى صفر لحد اثنين أقصى طول الرقم ناقص واحد
صح ولا يعني هذا هينضرب في اثنين أقصى ثلاثة هذه
الثلاثة ممكن أنا أجيبها أن هي len الـ S ناقص واحد
فشفوا أنا إيش بيسويه أنا بدي أعرف طبعًا الآن أجيت
لكل I in ليش؟ عشان أمر على الأرقام واحد واحد صح ولا؟
الآن هذا الرقم بينفع أضربه لسه هو character صح
لازم أحوله لإيش؟ لـ string فبدي أقوله مثلًا B يساوي
int الـ I أشمل الكلمة، يعني كل character مرّيت عليه
حوّلته لـ int لـ int بعدين، أمسكت الـ B وبدأ
أضربها في مين؟ لحظة، في len .. في len الـ S ناقص واحد
لأن أنا .. في اثنين .. في اثنين .. في اثنين .. في
اثنين .. في اثنين .. مش هيك القص؟ len الـ S ناقص
واحد طيب بعد ما ضربنا أول مفروض نحط الناتج المفروض
زي متذكرين برضه أنه احنا لما نضرب في اثنين أقصى صفر
اثنين أقصى واحد اثنين أقصى اثنين اثنين أقصى ثلاثة كل
هدول بنجمعهم صح ولا يبقى في الآخر هذا الناتج
المفروض أضيفه على sum بالظبط تمام؟ المفروض يكون
عندي sum هنا يساوي صفر وهذا كله ينضاف على مين؟ طبعًا
هنا بدنا indentation طبعًا المفروض هذا كله ينضاف
على الـ sum لسه فندي مشكلة هنا في الـ code مرة
ثانية يا جماعة عشان ما نخبطش انتبهوا معايا الـ code
هاداش بيعمل أول حاجة بيعرف متغير اسمه sum came
to zero بعدين بده يمر على الـ characters الموجودة
في الـ string character character من هنا عملية
التحويل بتقول إذا بدأت من هنا بتضرب في اثنين أقصى
صفر، إذا بدأت من هنا بدأت تضرب في اثنين أقصى طول الـ
string ناقص واحد، واحد بيقول لي كيف أجيب طول الـ
string ناقص واحد؟ جرب
مفروض الـ character اللي بعده ينضرب في إيش؟ في اثنين
أقصى اثنين مش اثنين أقصى ثلاثة يعني المفروض الرقم هذا
ماله ينقص طبعًا ببساطة شديدة عشان أخلي الرقم هذا
ينقص هو البداية الرقم جداش هتكون N يساوي len الـ S
ناقص واحد صح فادرب في N وبعدين أقوله N ناقص يساوي
واحد
هيظلوا ينقص إيه؟ يعني الـ N بدايتها اللي هي len الـ S
ناقص واحد أول رقم هينضرب في إيش؟ في len الـ S ناقص
واحد وبعدين هينقص الـ N في اللفة اللي بعدها الـ N
مالها هتقل صح ولا إيه يا جماعة خلينا إيش نكتب
الكلام هذا هو
أصلًا هيوقف لما يوصل لوين؟ يعني automatically هيوقف
لما الـ N تساوي صفر تمام؟ لأنه هيعمل loop من أول
للآخر، تمام؟ فأخر قيمة هتكون للـ N هتكون صفر طيب،
خلينا نجرب نحل السؤال هذا أول حاجة بدي أطلب من
المستخدم يدخل إيش الرقم كـ string فبدي أقول له مثلًا
binary أو لحظة قبل ما نطلب هو إيش طلب مني؟ طلب مني
function صح؟ لسه احنا نكتب الـ function وبعدين نطلب
من المستخدم يعني طلب من المستخدم هذا في التجربة
طبعًا فبدأ أقول له def هو طبعًا بيان لصغتها شكل الـ
method زي هيك هاي بنسخها لو حطها اسم الـ function
binary to decimal بتاخد binary string المفروض أن
ترجعني integer صحيح؟ لأ اللي هو decimal value لأن
بالنسبة لي على التفكير اللي فكرته تمام؟ أول حاجة
أريد أن أعرف sum قيمته صفر اللي هو هذا الناتج
النهائية اللي أريد أن أضع فيه لأن أنا بمر على
أرقام واحد واحد وكل واحد بضربه في اثنين أو أس حاجة
وبضيف الناتج على الـ sum بعدين
اتفقنا كمان أن أنا كل رقم بمر عليه بضربه في اثنين
أس حاجة بيبقى أن أنا أعمل for loop for I in
binary string هيك أنا مرّيت عالمين على الـ
characters واحد واحد خد الـ character هذا وحوّله
لإيش؟ لـ int عشان أقدر أضرب و
بعدين الـ character هذا أضربه في len ناقص
واحد وتنتهي عن صفر len ناقص
واحد وتنتهي
عن صفر وأضيفه على الـ sum وبعدين ما ننساش ننقص من الـ
n من الـ n واحد خلصنا
يا جماعة الناتج النهائي هيكون في الآخر في الـ sum و
بقول return return
sum
يعني أنا هذا أكثر حاجة مقدر أعملها عشان أفهمكم
السؤال اللي مش فاهمه يقعد يروح ياخده على البيت و
يحلله لحاله ويحاول يفهمه تمام؟ لأن أنا معتمد أن
انتوا إيش .. يعني متذكرين كيف نحول من binary لـ
decimal طيب لأن أنا عشان نجرب الحل هذا بنقوله مثلًا
print و
ناخد الـ .. الـ function ونبعتلها أرقام binary
المفروض تطلع لي الـ decimal الصح إليها مثلًا بدي أقول
101، اللي هو إيش بيطلع؟ خمسة، تمام؟ عندي 1111، اللي
هو سبعة طيب،
هتنع مرة؟ تمام؟ هي طلع لي خمسة، سبعة، عشرة، تمام؟
في حد عنده سؤال يا جماعة؟ طيب،
نقطة أخيرة، قبل ما ننهي موضوع الـ string نقطة صغيرة
ما أتكلمناش إياها، يعني بدي أنوه إليها لأن في جماعة
سألوني عليها المحاضرة الماضية shuffle a string، إيش
يعني shuffle a string؟ string مكونا من مجموعة
كلمات، بيقولنا لخبطها، تمام؟ سؤال مثلًا text
يساوي أحمد علي أمل عمر حسن لأن هذه أسماء هل بنقدر
نعمل لخبط على الأسماء هذه؟ طيب، بنشوف كيف نقدر
نخبطها أول حاجة كان عندنا في الـ list method يسمى
shuffle هل بنقدر نستخدم الـ shuffle هنا؟ لأ، ليش؟
تمام، كلهم .. مو غير إيه كمان؟ الـ text is
immutable يعني أنا مقدرش أغير على محتوى الـ text
لاحظوا أن فيش ولا method احنا طبقناها على الـ
string بتغير في الـ string الأصلية بترجع متغير جديد،
طبعًا؟ لكن في الـ .. في الـ list احنا بنقدر نغير
المحتوى، لما تقول له list dot sort، إيش عمل؟
أرتبها، غيرها، shuffle، غير في الـ list نفسها،
ما رجع لي list جديدة، طبعًا؟ فأي method كانت في الـ
list تتغير محتوها، لا يمكن أن أستخدمها مع الـ text
فيش في الـ text اسمها text dot sort هذا ما فيش مثل
موجود زي هي لغوها لأنّي بقول لك الـ text هذا immutable
مقدرش أغيره على المحتوى والـ sort المفروض تغير في
المحتوى نفسه طب إيش الحل لو أنا بدي أعمل shuffle
عشوائي أخربط الأسماء الموجودة هنا أول حاجة بدي
أعملها مدام بدي أخربط يبقى لازم أحول الـ text لإيش؟
لـ list الـ list مقدر أخربطها الـ text مقدرش أخربطه
صح؟ فبالظبط كيف نحول من text لـ list أخذنا أن نعمل
split بناء على المسافة تمام؟ وهذا يرجع لي list
نسميها مثلًا names الآن خلاص صار in the list بقدر
أخبطها وبقدر أرتبها يعني حتى ممكن السؤال مش بصل
أخبط أرتب للأسماء الموجودة sort مثل ما بترتب الأسماء
اللي موجودة في النص طب كيف بترتب الأسماء اللي
موجودة في النص؟ ما أقدرش إلا أحول النص لـ list كيف
حولته لـ list؟ جزّقته بناءً على الـ space هيك صار list
بعدين بأخذ الـ names بعملها sort إذا بترتبهم ترتيب
تصادفي أو بعمل shuffle كيف نعمل shuffle؟ import
random random
don't shuffle names
الآن السؤال المهم هل بنقدر نرجع الـ list لـ string؟
لنص؟ كيف؟ ممكن نعملها بأكثر من طريقة تمام؟ آه في
join وفي .. يعني الطريقة اللي أنتم ممكن تعملوها
الآن على اللي أخذناها أني أعمل string فاضية و
أعمل loop على الـ list وكل answer بمر عليه بضيفه
على الـ string صح ولا لأ؟ يعني أنا عندي list names بدي
أحولها لنص بعمل text 2 مال الـ text 2؟ فاضي و
أعملي for i in names إيش يعني for i in names؟
مرّيلي على العناصر الموجودة في الـ list واحد واحد و
أعملي text 2 زائد يساوي i وحطّ مسافة
هذه واضحة يا جماعة؟ إيش اللي عملته هنا؟ مرّري اللي
.. ال .. ال .. ال .. ال .. ال .. ال .. ال .. ال ..
ال .. ال .. ال .. ال .. ال .. ال .. ال .. ال .. ال
.. ال .. ال .. ال .. ال .. ال .. ال .. ال .. ال ..
ال .. ال .. ال .. ال .. ال .. ال .. ال .. ال .. ال
.. ال .. ال .. ال .. ال .. ال .. ال .. ال .. ال ..
ال .. ال .. ال .. ال .. ال .. ال .. ال .. ال .. ال
.. ال .. ال .. ال .. ال .. ال ..
.. ال .. ال .. ال .. ال .. ال .. ال .. ال .. ال ..
ال .. ال .. ال .. ال .. ال .. ال .. ال .. ال ..
ال
وأضافت هذا كله لمين؟ على الـ text هيك رجعت عندي
text لتأكد هيتعامل أطبع print
text 2
لأن هذه النتيجة حق لي أحمد عمر أمال علي حسن تمام
تعال نعمل run ثاني المفروض تطلع نتيجة مختلفة طب
هاي run ثاني هاي مثلا هنا طلع لي أمل أحمد علي عمر
حسن كمان مرة run تمام أمل علي حسن أحمد عمر هاي
أحمد عمر حسن علي أمل تمام هاي وقاعد بالخبط
واضح يا جماعة السؤال هذا كيف حولنا النص لـ list
وكيف حولنا الـ list لنص ثاني طيب في طريقة سهلة
لتحويل الـ list لنص احنا كيف الطريقة اللي عملناها
لتحويل الـ list لنص عملنا loop وضفنا كل واحد
بالمرة عليها على نص فاضي الطريقة الثانية بقولي أنت
بتقدر تروح تعمل حاجة اسمها method اسمها join ماذا
يعني كلمة join؟ اربط، تمام؟ الـ join هذا انتبه كيف
بتشتغل الـ join بيقول لأول حاجة بدك تعمل string
اتحدد فيها إيش الحاجة اللي بدها تفصل أنا مرت عشان
ما أنتم إيش، إيش الحاجات اللي بدنا نعملها join؟
الحاجات الموجودة في الـ list بدنا نعملها join عشان
يطلع عنده text مرة ثانية الحاجات الموجودة في الـ
list بدنا نعملها join عشان يطلع عنده text طبعا
فأول حاجة بنحدد الحاجة اللي بدها تفصل اللي بنقل
عليها بدنا نعمل join ماشي أنا عملت لهم join يعني
ربطهم مع بعض إيش بده يفصل بينهم لما تربطهم عن بعض؟
أنا هنا قلت له space بجعل space هذا .. بكتب space و
بقول له dot تمام وبحط إيش؟ join .. join لمن؟ للـ
names بروح
على الـ string على الفاصل اللي أنا بدي إياها بين
الكلمات وبقول له dot join وبحط هنا list هذه كلها
هترجع لي نص ماشي
نفس الحاجة تمام هاي print تكسي
اتنين هذه بتعمل نفس النتيجة اللي قبل شوية أنا برضه
بتربط الكلمات مع بعض مرة ثانية يا جماعة هاي أنا
عندي نص بدي أعمله لخبطة وهو نص ما أقدرش ألخبطه لازم
أحوله لـ list وألخبطه وبعدين أرجع لإيش؟ لنص فروحت
في الأول عشان أحوله لـ list عملت split اتحول لـ
list اسمها names عملت shuffle للـ names خلاص لخبطت
لأن بدي أرجع text ثاني كيف برجع الـ text ثاني؟ ممكن
أعمل .. أستخدم طريقة الـ join بحيث أن أحط الحاجة
اللي بدي إياها تفصل بين الكلمات وأقول له dot join و
هنا ببعث الـ list وهذا كله سطر برجع لي نص
بحط في متغير اسمه text2 مثلا وبقول له print text2
مثل شوف مثلا list تساوي 1,2,3,4,5,6 هذه مالها؟ أرقام
list of numbers بدي أحول الـ list هذه لنص واحد يفصل
بين كل رقم ورقم شحطة تمام؟ إيش بنعمل؟ بحط رمز
الشحطة زي هيك وبقول dot join تمام؟ وبين القوسين
بحط main الـ list وهذا هيرجع لي text
صح يقول إيه يا جماعة شحطة join وببعت الـ list وهد
برجع لي نص وبقول print آه
هد إيش الغلط بس إن هدول بقولي أرقام الـ join هد
بدها string list of strings تمام فخلينا احنا نحطهم
أرقام
هي الـ join بتشترط أني أعمل join لنصوص لـ
strings طبعا إذا
أن هي الناتج طلع لك كل الأرقام فاصل بينها إيش؟ شحطة
وأحب أقول طبعا عند الـ list أصلا كلها من أرقام
تقدر تمر عليهم واحد واحد وتعدل كل واحد الرقم
تحولها للـ String طيب واضح المثال هذا يا جماعة؟
طيب الآن في homework على chapter لـ String اللي هي
الأسئلة هذه 8, 4 chapter 8 الأسئلة
4, 6, 9, 11, 13, 4
6, 9, 11, 13 ومرة ثانية بأكد يا جماعة أن البرمجة
بدها يا جماعة شغل في البيت تمام؟ بدها تمرين كل ما
اتدربت أكثر كل ما غلطت أكثر كل ما تعلمت أكثر
تمام؟
هدول؟
ما هو الكتاب موجود PDF يعني الكتاب فيه تفاصيل و
أحيانا الكتاب بيحط رسمة وبيحط example فأفضل ترجع
للكتاب طيب يا جماعة خلينا ندخل في موضوع جديد الآن
طيب يا جماعة انتبهوا معايا كل البرامج اللي أخذناها
لحد الآن لو تعاملنا فيها مع الـ data وفكرنا
البرنامج الـ data كلها بتروح يعني مثلا عندي list
فيها أرقام أسماء
تعاملنا كيف نتعامل مع الـ list هذه أو الـ string
بطرق مختلفة المهم أنه أنا لما أسكر البرنامج في
الآخر كل الـ data اللي بتعامل معاها مالها؟ بتروح لكن
احنا لما أجي أعمل برنامج فعلي بلزمني حاجة اسمها
data persistence إيش يعني؟ أنه لازم أنا أحافظ على
البيانات اللي بتعامل معاها البرنامج مثلا برنامج
قبول التسجيل في الجامعة أكيد أن بيانات الطالب
بتاعة التسجيل والحذف والإضافة كلها موجودة في
البرنامج صح ولا لأ؟ برجع ثاني بلاقي كل البيانات زي
ما هي الأصل احنا لما نعمل برامج معتمدة على data أن
التغييرات اللي بتصير أو كل الـ data اللي بدخلها على
البرنامج لازم أبقى لها موجودة بحيث أني أقدر أرجعها
في وقت لاحق، تمام؟ فكيف بنشوف .. كيف احنا نحفظ
البيانات اللي بتتعامل معها البرامج أو هاد
بيشيلولها دائما في البرمجة لحال يسمى data
persistence اللي هو المحافظة على الـ data أو ثبات
الـ data، تمام؟ طيب كيف احنا نحافظ على الـ data
persistence؟ في أكثر من طريقة لحفظ البيانات اللي
بتعامل معاها البرنامج أول طريقة أنه أنا مثلا أخل
البرنامج معتمد على files ملفات بمعنى أنه أنا أي
data بتعامل معاها أي بيانات بدخلها المستخدم بأخذها
بحطها وين؟ في ملف بيجي البرنامج بشغل من أول وجديد
بخليه يقرأ من نفس الملف هذا واضح يا جماعة؟ وهذا
الموضوع اللي احنا هنتكلم عليه اليوم اللي هو
التعامل مع الملفات بطلب من المستخدم أدخل أسماء طلاب
على طول أول ما يدخلهم بيحطهم وين في ملفه بيرجع
ثاني بيقرأ أسماء الطلاب اللي عنده بيقراهم الملف و
بيطبع له إياهم ما فيش دا أي دخلهم من أول وجديد طبعا
احنا هنبدأ في موضوع الـ files أن هو دي أسهل طريقة
للإدخال والإخراج للبرنامج في طريقة ثانية كمان اللي
هو التعامل مع قواعد البيانات أو الـ databases تمام
الـ databases ميزتها أنها بتقسم البيانات لجداول و
لأعمدة و بتُمَكِّنِّي أن أعمل حاجة اسمها query بمعنى
استعلام على قواعد البيانات تمام؟ والاستعلام هذا
بقدر أخصصه أُحدد أقول له مثلا هاتلي الأشخاص اللي
أسماؤهم بتبدأ بحرف الـ a بروح بدور في الـ data
وبيجيب لي فقط الـ data اللي بتنطبق عليها المعايير
الموجودة في الاستعلام اللي أنا بعته قواعد البيانات
لها مميزات أكثر بكثير من الـ files لأن زي ما قلنا
الـ file مشكلته أن أنا بفتحه و بقرأه كله لكن قواعد
البيانات بستخرج منها فقط البيانات اللي أنا بدي
إياها لكن التعامل مع قواعد البيانات هذا هتاخدوه أنتم
في مادة كاملة اللي هي المادة القادمة اللي هو الـ
database وطبعا اللحظة أن كل المواد بتكمل بعض يعني
الـ database بتخدم بالبرمجة أصلا ليش بدرسكم
database؟ لأن عشان أقدر أعمل برمجيات معتمدة على الـ
database مواقع الـ web كلها، موقع الأخبار مثلا، من
وين بيجيب الـ data اللي موجودة فيه؟ من قواعد
البيانات، تمام؟ مخزنة في قاعدة البيانات على الـ
server فَقواعد
البيانات مرتبطة في البرمجة، احنا طبعا مش هنقدر
نشرح قواعد البيانات في المادة هذه ليش؟ لأنكم لسه لم
تحصلوا على قواعد البيانات تمام؟ فنشرح استخدام الـ
files لأنه بسيط قواعد البيانات تاخدوها بالتفصيل
لأنه بده تفاصيل كثيرة ومعلومات ما أقدرش نغطيها أو مش
اهتمامنا في المادة هذه طبعاً في طرق ثانية أنه نخزن
على مثلًا الـ cloud خليني أقول هذا remote storage
يعني storage بعيد أخزن على الـ cloud أخزن على الـ
server بعيد طبعا أكيد هي بتروح على الـ server و
تتخزن فيها على ملف أو قاعدة بيانات طبعا اللي
بتتعامل مع البرامج ضروري أنه يقدر يتعامل مع طرق
التخزين المختلفة يعني الآن مثلا مثلا اللي بتتعامل
مع الـ mobile applications كل معظم الـ mobile
applications بتتلقى الـ data بتاعتها أو بتخزنها على
الـ servers أو على الـ cloud ليش؟ لأن الذاكرة أو الـ
storage size الموجود في الـ mobile محدود تمام؟
فدائماً احنا بنجيب الـ data بنقرأها من الـ server و
بنخزنها برضه على الـ server عادة هذا لا يمنع أن
احنا نقدر نخزن على الـ mobile و برضه لازم تكون عندك
إمكانية أن تتعامل مع التخزين والقراءة من الملفات
لأن الملفات بتمثل طريقة بسيطة لتخزين البيانات و
قراءتها وأكثر حاجة مستخدمة طبعا بالذات مثلًا في
مواقع الـ web لأن تخصصكم ومصيركم تقريبا إيش؟ web
ما أقدرش واحد يقول والله أنا ما بحبش البرمجة مش ميولي ..
مش ميولي برمجة مش ميولكم برمجة أنا مش ميولكم
multimedia ليش؟ لأن التخصص نفسه تكنولوجيا الوسائط
المتعددة هو تطوير الـ web إلا لو بدنا نحذف ما بعد
الـ و هذا خلاص بتصيروا تشتغلوا multimedia
طيب المحاضرة عادي إن شاء الله هنتطرق للتعامل مع
الملفات كيف نقرأ ونكتب من الملفات باستخدام الـ
python ولاحظوا أن المواضيع مش منفصلة المواضيع
كلها مترابطة مع بعض يعني في النهاية إيش اللي بتخزن
في الملف يا جماعة؟ text صح ولا؟ في النهاية أنا
بتعامل معه text يعني هناخده احنا المحاضرة عادي و
المحاضرة اللي جاية مكملة للتعامل مع النصوص لأن أنا
بقرأ من الملف نص وبسيط أتعامل معه طيب أول حاجة
خلينا نشوفها كيف احنا نوصل للملف نكتب عليه ونقرأ
منه الكتابة والقراءة بسيطة جداً يا جماعة تخيلوا
مثلًا أنا بدي أروح على مجلد عندي على drive تمام و
ها بدي أنشأ مثلًا ملف ونكتب فيه hello world
learning file io in python
هذا ملف Text اسمه 1.txt موجود في مجلد عندي الآن
بدي أتعلم كيف أكتب على الملف وكيف أقرأ منه عشان
أقرأ من الملف في عندي method اسمها open افتح الملف
يعني open هذي بتاخذ حاجتين بتاخذ مسار الملف وبتاخذ
الـ mode حاجة اسمها الـ mode هنفصل فيه الآن مسار
الملف يعني أنا بروح بكتب مسار بتاع الملف بقول له C
نقطتين slash 123 slash 1 dot txt هذا الملف تبقى
موجود على الـ C نقطة
مهمة احنا لما نكتب المسار عادة نحط slash واحدة لكن
لما نتعامل بالبرمجة لازم نحط slash in ليش؟
إيش السبب؟ مين عارف؟ لأن الـ slash عبارة عن
character محجوز في البرمجة يستخدم استخدامات كثيرة
يعني مثلًا أنتم لما تحطوا slash in جربتوها Slash T
كأنكم بتقولوا أنه اطبع لي new line اطبع لي Tab
أتمنى؟ أيوة فهو بترجم الـ Slash أنه لو بعدها في
character هينفذ شيء معين أنه هيعمل الـ new line أو
كذا فعشان ما يتلخبطش حطينا slash in واضحة في هذه
النقطة يا جماعة؟ فدائماً في الـ paths إيش path
يعني؟ المسار بتاع الملفات بنحط slash in بنحطش slash
واحدة
آه يعني مثلًا مثلًا لو كان .. لو كنت أنا حاط slash
واحدة واسم الملف slash n.txt هيك أنا لخبطته هلأ أنت
بدك تعمل new line ولا قصدك أنت اسم
الملف لكن أنا هيك .. هيك راح يطلع الخبطة بفهم two
slashes آه يعني أنا مش بدي أعمل slash n هذا معناه
للمثال طيب نرجع لملفنا 1 dot txt هيك أنا بفتح
الملف النقطة الثانية اللي بنحددها ليش بده نفتح
الملف؟ آه يا إما نقرأ منه يا إما نكتب عليه يا إما
نعدل عليه في ثلاثة conditions ثلاثة modes الـ mode
يعني الوضع الوضع القراءة والكتابة ليش أنت بده تفتح
الملف؟ لأن إذا أنا بدي أكتب عشان .. إذا أنا بدي
أفتح الملف عشان أكتب عليه بحط رمز
W اختصارًا إيش من write تمام احنا خليني ناخذ حاجة
حاجة الكتابة لأن أنا هنا فتحت الملف بهدف الكتابة
بعمل open بحط مسار الملف وبحط الـ mode اللي هو W
هم فيه ثلاثة modes W وR وA احنا الأولى بناخد الـW
للكتابة الـR للـRead والـA للـAppend تعديل طبعًا
خليني أقول واحد واحد كتبنا الـW للكتابة هذا الـ
method open بترجع عندي متغير خليني أسمي المتغير
file مش الملف هذا متغير ممكن أسميه A,B,X,Y,Z هذا
متغير بيرجع من مين؟ من الـ method open تمام؟ هذا
المتغير بيقول لي من نوع حاجة اسمها text IO wrapper
هلأ هي المتغيرات أنواع؟ في متغير integer في
متغير string في متغير float الرقم اللي فيه كسور
float تمام؟ هذا متغير من نوع خاص اسمه text IO
wrapper نوع ثابت في الـ .. في الـ python ماذا يعني
Text IO wrapper؟ هذا عبارة عن متغير يوصلنا إلى
الملف يعني
زي كأنه حاجة مشبوكة في الملف تبعي يعني بمجرد ما
أكتب على المتغير هذا هو لحاله بيروح .. اللي أنا
كتبته على المتغير بوديه وين؟ على الـ file تبعي كلمة
wrapper إيش يعني بالإنجليزي؟ كلمة wrapper معناها
غلاف كلمة wrapper الترجمة الحرفية لها معناها غلاف
تمام فكأنه هذا الـ variable اللي برجع عندي من
method open مش قولنا الـ open بترجع متغير وكأنه
هذا الـ variable عبارة عن حاجة هي الملف تبعي تمام
والـ variable هو كأنه حاجة إيش حوالين الملف اسم الـ
variable إيش سميناها احنا file عن طريق الـ file أنا
بعمل access لمين؟ للملف
طيب نرجع هنا، هاي جيبنا المتغير أنا فتحته للكتابة
ابقى أنا بدي أكتب عليه، بقوله الآن file dot dot
الآن طلالي مجموعة من الـ methods في عندي method
اسمها ممتعة البساطة اسمها write إيش write أكتب
this
is the first example
هو احنا مادام نتعامل مع نص، نتعامل مع text، ممكن
نتعامل مع أي نوع من الملفات، لكن لو تعاملت مع ملف
مثلا binary data، يعني إما هقرأ data مش هفهمها،
تمام؟ بتكون يعني encoded فيه، لكن إذا .. طبعا في
أنواع مثلا ملفات Excel، فيها مكتبات خاصة بالتعامل
معاها، مثلا، تمام؟ الصور برضه لها تعامل خاص يعني
هناخد احنا graphical user interface كيف نقرأ الصور
ونعرضها تمام؟ هذي لها تعامل خاص الآن احنا ما نعمل
نتعامل مع data الـ data عبارة عن إيش؟ يعني النصوص و
أرقام النصوص وأرقام بقدر أخزنها في text files
تمام؟ طب this is the first example هذه الجملة اللي
هيكتبها وين؟ في الـ file الآن ممكن آجي في الآخر عشان
ينزل سطر جديد أعمل slash and تمام؟ وآجي الآن
بقدر أقوله خلصت كتابة وانتهيت، ما ننساش بروح للـ file
وبقوله إيش close أنه أنهي عملية الكتابة هي عملية
الكتابة للملف جمالها بمنتهى البساطة ثلاث خطوات
الخطوة الأولى open right close
هل أجيت؟ هنشوف، هنجرب، تمام؟ تعالوا نعمل run، خلص،
كاميرا أتأكد هل جيت، هنروح على الملف تبعي، تمام،
فتحته، this is the first example،
باشي، صح، كان في كلام، وراح الكلام، تمام، بقول لي
هل جيت، هذه الـ .. الـ right بتشيل كل حاجة موجودة و
بتبدأ تكتب من أول وجديد صفحة بيضة يعني بتبدأ ..
بتبدأ تمام؟ بقول إذا أنت بدك تكمل على الموجود مش
هذا الـ بدك وياه تمام؟ حط هنا A بس اه A اختصار لـ
append append يعني خدناها append في الـ list يعني
أضيف في الآخر تمام؟ هذه append معناها بيكمل على
محتوى الملف طب نجرب نشوف هيكمل ولا لأ كيف؟
هو فيه إمكانية نضيف في السطور الأولى بس الغالب أنه
نكمل في الأسفل حاليا احنا نشوف الأمثلة بسيطة بعدين
بنشوف كيف نضيف في الأول والآخر append معناها بتضيف
كمل على الملف هرجع بدل ما أقوله first exam اللي
بده أحط هنا إيش second المفروض هذا ينضيف سطر جديد
الأولاني إيش اه يظله زي ما هو خلينا نسكر الملف لسه
ما طب ما عملناش run high run تمام خلص تعالى نفتح
الملف تمام هي إيش كتب له second example تمام سكر
هذا كمان هنا
third example هي كمان run تمام
هي وجاعد إيش بعمل بضيف على الملف
طيب، ممكن على فكرة نكتب أكثر من سطر جامع ما أسكر
الملف، يعني أنا هنا عملت write لجملة، صح؟ ممكن
أروح أعمل كمان write أنا
كأني كتبت كمان إيش؟ كمان جملة واحد بيقول، طب احنا
هنعمل write واحدة ولا أكثر من write؟ هو انتبهوا
دلوقت كل عملية write بيرجع فيها للملف يعني مثلا
إذا أنا نفذت الـ write مئة مرة معناه بده يروح يفتح
يعني هو الملف مفتوح الملف مفتوح من هنا صح؟ بده
يروح يعمل عملية قراءة مئة مرة وهذا ممكن تكون بتاخد
وقت شوية لأن عملية القراءة معناه أروح أحرك رأس الـ
hard disk للملف وأكتب عليه صح؟ ممكن تكون بتبطئ
شوية، فإذا أنا قدرت أفضل أن أعمل عملية write إيش مرة
واحدة أحيانا طبعا ما أقدرش أعملها مرة واحدة مثلا
بتكون حجم الـ data اللي بدك تكتبه massive، ضخمة جدا
عشرة جيجا بدك تكتب على الملف، تمام؟ لأ في الحالة
هذه بدنا نضطر نجزق ونعمل كل جزء في إيش؟ في عملية
write فعليا عملية الـ write بيحطها في buffer والـ
buffer مكتوب على الملف يعني الأصل أنه يكون صغير
يكون في عملية الـ write يعني أنا ممكن أنفذ أكثر من
سطر تعالوا
نشوف الآن إيش هيعمل هي كمان run أكيد بيضل يضيف وين؟
يضيف تحت لحظة هنا لما قلت له احمد studies on IOG
وكتبتها مرة ثانية حطها جنبها اه لأن أنا ما حطيتش
slash إيش slash in عشان يعتبر أن هذا سطر سطر لحاله
طيب لما
آجي أكتب على الملف الأصل قبل ما أكتب كمان احنا لسه
الآن بنتناول عملية الكتابة أن أفحص الملف موجود ولا
لأ صح ولا يا جماعة يعني افرض أنا حطيت الملف مثلا
TTTT بس ما يكونش فيه ملف زيك عندنا اه وعملت run اه
لأ هذا هو بنشئه في الحالة هذه معقول
أنشأه؟ اه هي طيب
هذا على فكرة يا جماعة الـ W والـ A بيحكي لي إنه
الملف لو ما كانش موجود اه بروح بنشئه يعني هنا مثلا
لو جيت مثلا هذا أي ملف كتبته ما فيش عندي ملف مثلا
بالاسم هذا مش هطلع إرر لحاله ما لاقاش الملف بروح
بنشئه تمام؟ وبقعد يكتب عليه يعني حتى هنا مش
هيلزمني أن أفحص كمان إذا الملف موجود اه أو لأ
طيب هذا عملية الكتابة خلينا نشوف القراءة كيف نقرأ
من الملف هو بعمل open للملف وبحط هنا إيش بدل
write w بحط r وبعد بمنتهى البساطة بقول file dot
read إيش هي dot read اقرأ الملف بقرأ للملف كاملا و
برجع ليها في متغير يعني
أنا النتيجة اللي رجعت من الـ read حطيتها في متغير و
في الآخر بقوله file do to close وبطبع مين؟ بطبع الـ
text بس منتقل بساطة يعني لاحظوا القراءة والكتابة
سهل جدا ماذا يفرق القراءة عن الكتابة الكتابة بحط W
هنا أو A لو أنا بدأت أضيف للملف وبدل read بحط
إيش في الكتابة write وبعدين بعمل close في القراءة
نفس الشيء تقريبا مع تغييرات بسيطة بدل W بحط R بدل
write بعمل read والنتيجة بترجع عندي وين؟ في متغير
وبعدين بعمل close وبقبع النتيجة اللي قرأتها
قراءة بقرأ الملف هنشوف ناخد أمثلة عملية، يعني مثلا
المدرس دخل علامات طلاب وسكر البرنامج، خلاص يعني
تعب يظلوا ساعة يدخل علامات خمسين طالب وأسماءهم و
راحوا بعدين؟ لأ، المفروض أنه إيش نعمل؟ كل البيانات
اللي دخلت عندي أحطها في ملف، إيجي بعدين المدرس بده
يرجع يقرأ علامات الطلاب ثاني، بده يرجع يقرأهم من
وين؟ من الملف احنا ناخد أمثلة عملية زي في، بس احنا
في الأول إيش .. قلنا بنبين أهمية البرنامج، بعدين
بنبين الأساسيات كيف ببساطة شديدة نكتب جملة ونقرأ
جملة، بعدين بناخد أمثلة عملية هد
لأ، هد open معناه أفتح الملف، معناه أجاب لي
reference على الملف، معناه اعمل لي wrapper حوالين
الملف، بس هي عملية الـ open، open ما بتقراش ولا
بتكتب طبعا كأنه فقط بس open عملنا reference بأشر
على الملف عن طريق الـ file اللي .. اللي .. اللي رجع
عندي من method open بقدر أقرأ وأكتب القراءة قريت والـ
الكتابة قريت تعالوا نجرب هذا الـ code طبعا إيش هذا
اللي طبع ليها هنا؟ شفتوا الخربيش اللي كتبناها قبل
شوي في الملف؟ اه هاي طبع ليها كله قرأ محتوى الملف
كاملا وطبع له
ماشي يا جماعة؟ طيب خلينا ننهي أو نوقف عند الجزئية
هذه أنا عارف ازاي كتوا انتوا تمام؟ والمرة الجاية
بنكمل إن شاء الله