دورة تعلم البايثون Python

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 107

‫ميحرلا نمحرلا هللا و الصالة و السالم على أشرؾ المرسلٌن سٌدنا دمحم و صحبه أجمعٌن و من تبعهم بإحسان إلى

ٌوم‬
‫بسم‬
‫الدٌن‬
‫أما بعد‬
‫سنبدأ بحول هللا دورة فً لؽة الباٌثون نتعرؾ فٌها على هذه اللؽة الرابعة ذات اإلمكانٌات العالٌة التً جمعت بٌن الموة‬
‫و السهولة و لمد عرفنا سابما المشارٌع الضخمة التً أنجزت بهذه اللؽة وتعتبر لؽة الباٌثون أحسن إختٌار للبدء‬
‫بالبرمجة حسب رأي أؼلب خبراء البرمجة ألنها لؽة كاملة تحتوي على جمٌع مبادئ البرمجة ألنها كانت سابما عبارة‬
‫عن نواة نظام تشؽٌل كما أن البرمجة بهذه اللؽة سٌزٌد من إنتاجٌة المبرمج ألنها تتٌح له الكثٌر من الدوال التً تسهل‬
‫علٌه إنشاء المشارٌع الكبٌرة كما أن المبرمج بلؽة السً ٌتوجب علٌه تعلم هذه اللؽة إلستعمالها مع لؽة السً حفظا‬
‫للولت‪.‬‬
‫لؽة الباٌثون لؽة محمولة تستطٌع البرمجة بواسطتها على كل األنظمة و لكنها تعتبر مركز لوة‬
‫لمستعمل نظام لٌنٌكس خصوصا ألمنها متوافمة مع هذا النظام مما ٌسمح للمبرمج بالتحكم فً‬
‫موارد النظام بسهولة‪.‬‬

‫خطة الدورة‪:‬‬

‫ستكون الدورة ممسمة على ثالثة ألسام‬


‫‪-‬المسم األول من الدورة ٌحتوي على مبادئ هذه اللؽة و سنمر علٌه بسرعة مع مراعات ذكر كل‬
‫المبادئ‪.‬‬
‫‪-‬المسم الثانً من الدورة سٌكون متمدما نوعا ما بحٌث سندرس فٌه البرمجة اإلجرابٌة و البرمجة‬
‫الكابنٌة بواسطة هذه للؽة و سنتطرق أٌضا للواجهات الرسومٌة فً هذا المسم من الدورة‬
‫‪-‬المسم الثالث سٌخصص لبرمجة الشبكات و التطبٌمات الموزعة‬
‫‪-‬المسم الرابع سٌكون مختبر الدورة بحٌث سنموم بدراسة عدة مشارٌع متكاملة و ندرس كٌفٌة‬
‫تطوٌرها وفً كل مرة نختار مشروع و ندرسه بصورة مركزة‪.‬‬

‫متطلبات الدورة‬

‫سنحتاج أوال إلى المفسر الرسمً للؽة الباٌثون و تستطٌع تحمٌله من المولع الرسمً للؽة‬
‫الباٌثون‬

‫رابط التحمٌل‬
‫‪http://www.python.org/ftp/python/2.5.1/python-2.5.1.msi‬‬

‫صورة المفسر‬

‫ثم ٌلزمنا بعد ذلن تحمٌل المفسر ‪ Py******erer‬الذي سنعمل به خالل األلسام األولى من‬
‫الدورة‬

‫رابط التحمٌل‬
‫‪http://www.mediafire.com/?e5ioniytoxs‬‬

‫صورة المفسر‬

‫لم بتثبٌت المفسر الرسمً الذي حملته أوال سٌطلب منن إعادة تشؽٌل الجهاز بعد التثبٌت عند‬
‫تشؽٌل الجهاز ثانٌتا لم بتثبٌت بٌسكرٌبتر‬
‫إذا كنت تستعمل لٌنٌكس ال ٌلزمن تحمٌل أي برنامج ألن لٌنٌكس لد أعطان العشرات من‬
‫اإلمكانٌات للبرمجة بهذه اللؽة تستطٌع إستعمال سطر األوامر مباشرة بكتابة األمر ‪ python‬أو‬
‫تستطٌع إستعمال بٌبة ‪ Kdevelop‬و ٌوجد بٌبة أخرى مخصصة للؽة الباٌثون إسمها‪Eric‬‬

‫أول خطوة مع الباٌثون‬

‫أدات النسخ‪print‬‬

‫طرٌمة إستعمال المفسر سهلة جدا و هذا راجع لسهولة اللؽة بحٌث ال تفرض علٌنا تعرٌفات لبل‬
‫اإلستعمال ‪ .‬و لطباعة الكتابة على الشاشة نستعمل األمر ‪ print‬ثم نتبعه بالرسالة التً نرٌد‬
‫طباعتها و لتشؽٌل البرنامج )‪ (run‬نموم بالضؽط على‪F9‬‬

‫وٌظهر النتاتج الكود أسفل البرنامج‬

‫و نستطٌع أٌضا إسناد جمل لـ المتؽٌرات و طباعتها على الشاشة كما هو موضح فً الثال التالً‬

‫‪-‬المتؽٌرات‬
‫كما ٌدل إسمها المتؽٌرات عبارة عن لٌم لابلة ل التؽٌر طول مدة تنفٌد البرنامج فهً ال تأخذ لٌمة‬
‫ثابتة بل نستطٌع تؽٌرها متى نشاء‪.‬‬
‫نضرب مثاال‬
‫نفرض مثال أنن كتبت برنامج ٌموم بحفظ أعمار وأسماء العمال فً شركة معٌنة فٌموم العامل‬
‫بإدخال إسمه ثم عمره و ٌإتً عامل آخر فٌموم بنفس الشٌا وهكذا‪.‬‬
‫تعتبر أسماء و أعمار العمال لٌم نطلك علها إسم المٌم ولكً نستطٌع حفظ هذه المٌم فً ذاكرة‬
‫الجهاز ٌجب أن نسندها إلى متؽٌر فٌموم المتؽٌر بالتحاور مع الجهاز و حفظ المٌم المحجوزة‬
‫بداخله أو المسندة إلٌه ألن الجهاز ٌحفظ المٌم بواسطة إسم المتؽٌر و المثال التالً ٌوضح األمر‬
‫أكثر‬

‫كما نالحظ فً المثال ‪ x‬تعتبر المتؽٌر أو إسم المتؽٌر و ‪ 10‬أو ‪ 22‬تعتبر لٌمة المتؽٌر و للنا أن‬
‫إسمه متؽٌر ألننا نستطٌع تؽٌر لٌمته متى نشاء‬
‫و لكً نستطٌع حجز لٌم ومعلومات فً ذاكرة الجهاز البد لنا من إسنادها إلى متؽٌرات لكً‬
‫ٌستطٌع الجهاز حجزها فالجهاز ٌتعامل مع المعلومات أو المٌم حسب أسمابها فمثال ٌحجز الجهاز‬
‫المٌمة ‪ 10‬وٌطلك علها إسم ‪ x‬فإذا استدعٌنا ‪ x‬باألمر ‪ٌ print‬موم الجهاز بالبحث عن ‪ x‬فً‬
‫الذاكرة ثم ٌموم بتحمٌل لٌمتها‪.‬‬

‫تترن الؽة فً إختٌار األسماء ل المتؽٌرات و بكل األحرؾ )‪ (A>Z‬و األعداد(‪<9) 0‬لكن ٌشترط‬
‫أن ٌكون أول اإلسم عبارة عن حرؾ ال عدد‪.‬‬
‫و التستطٌع إستخدام األحرؾ الخاصة لتسمٌة المتؽٌرات مثل ‪ # @ /$‬و أٌضا ال ٌمكنن تسمٌة‬
‫المتؽٌرات باالسماء المحجوزة من الطرؾ اللؽة و المبٌنة فً المابمة التالً‬

‫بسم ميحرلا نمحرلا هللا و الصالة و السالم على أشرؾ المرسلٌن سٌدنا دمحم و صحبه أجمعٌن و من تبعهم‬
‫بإحسان إلى ٌوم الدٌن‬
‫أما بعد‬
‫سنبدأ بحول هللا دورة فً لؽة الباٌثون نتعرؾ فٌها على هذه اللؽة الرابعة ذات اإلمكانٌات العالٌة التً جمعت‬
‫بٌن الموة و السهولة و لمد عرفنا سابما المشارٌع الضخمة التً أنجزت بهذه اللؽة وتعتبر لؽة الباٌثون أحسن‬
‫إختٌار للبدء بالبرمجة حسب رأي أؼلب خبراء البرمجة ألنها لؽة كاملة تحتوي على جمٌع مبادئ البرمجة‬
‫ألنها كانت سابما عبارة عن نواة نظام تشؽٌل كما أن البرمجة بهذه اللؽة سٌزٌد من إنتاجٌة المبرمج ألنها‬
‫تتٌح له الكثٌر من الدوال التً تسهل علٌه إنشاء المشارٌع الكبٌرة كما أن المبرمج بلؽة السً ٌتوجب علٌه‬
‫تعلم هذه اللؽة إلستعمالها مع لؽة السً حفظا للولت‪.‬‬
‫لؽة الباٌثون لؽة محمولة تستطٌع البرمجة بواسطتها على كل األنظمة و لكنها تعتبر مركز لوة‬
‫لمستعمل نظام لٌنٌكس خصوصا ألمنها متوافمة مع هذا النظام مما ٌسمح للمبرمج بالتحكم فً‬
‫موارد النظام بسهولة‪.‬‬

‫خطة الدورة‪:‬‬
‫ستكون الدورة ممسمة على ثالثة ألسام‬
‫‪-‬المسم األول من الدورة ٌحتوي على مبادئ هذه اللؽة و سنمر علٌه بسرعة مع مراعات ذكر كل‬
‫المبادئ‪.‬‬
‫‪-‬المسم الثانً من الدورة سٌكون متمدما نوعا ما بحٌث سندرس فٌه البرمجة اإلجرابٌة و البرمجة‬
‫الكابنٌة بواسطة هذه للؽة و سنتطرق أٌضا للواجهات الرسومٌة فً هذا المسم من الدورة‬
‫‪-‬المسم الثالث سٌخصص لبرمجة الشبكات و التطبٌمات الموزعة‬
‫‪-‬المسم الرابع سٌكون مختبر الدورة بحٌث سنموم بدراسة عدة مشارٌع متكاملة و ندرس كٌفٌة‬
‫تطوٌرها وفً كل مرة نختار مشروع و ندرسه بصورة مركزة‪.‬‬

‫متطلبات الدورة‬

‫سنحتاج أوال إلى المفسر الرسمً للؽة الباٌثون و تستطٌع تحمٌله من المولع الرسمً للؽة‬
‫الباٌثون‬

‫رابط التحمٌل‬
‫‪http://www.python.org/ftp/python/2.5.1/python-2.5.1.msi‬‬

‫صورة المفسر‬

‫ثم ٌلزمنا بعد ذلن تحمٌل المفسر ‪ Py******erer‬الذي سنعمل به خالل األلسام األولى من‬
‫الدورة‬

‫رابط التحمٌل‬

‫‪http://www.mediafire.com/?e5ioniytoxs‬‬

‫صورة المفسر‬

‫لم بتثبٌت المفسر الرسمً الذي حملته أوال سٌطلب منن إعادة تشؽٌل الجهاز بعد التثبٌت عند‬
‫تشؽٌل الجهاز ثانٌتا لم بتثبٌت بٌسكرٌبتر‬
‫إذا كنت تستعمل لٌنٌكس ال ٌلزمن تحمٌل أي برنامج ألن لٌنٌكس لد أعطان العشرات من‬
‫اإلمكانٌات للبرمجة بهذه اللؽة تستطٌع إستعمال سطر األوامر مباشرة بكتابة األمر ‪ python‬أو‬
‫تستطٌع إستعمال بٌبة ‪ Kdevelop‬و ٌوجد بٌبة أخرى مخصصة للؽة الباٌثون إسمها‪Eric‬‬

‫أول خطوة مع الباٌثون‬

‫أدات النسخ‪print‬‬
‫طرٌمة إستعمال المفسر سهلة جدا و هذا راجع لسهولة اللؽة بحٌث ال تفرض علٌنا تعرٌفات لبل‬
‫اإلستعمال ‪ .‬و لطباعة الكتابة على الشاشة نستعمل األمر ‪ print‬ثم نتبعه بالرسالة التً نرٌد‬
‫طباعتها و لتشؽٌل البرنامج )‪ (run‬نموم بالضؽط على‪F9‬‬

‫وٌظهر النتاتج الكود أسفل البرنامج‬

‫و نستطٌع أٌضا إسناد جمل لـ المتؽٌرات و طباعتها على الشاشة كما هو موضح فً الثال التالً‬

‫‪-‬المتؽٌرات‬

‫كما ٌدل إسمها المتؽٌرات عبارة عن لٌم لابلة ل التؽٌر طول مدة تنفٌد البرنامج فهً ال تأخذ لٌمة‬
‫ثابتة بل نستطٌع تؽٌرها متى نشاء‪.‬‬
‫نضرب مثاال‬
‫نفرض مثال أنن كتبت برنامج ٌموم بحفظ أعمار وأسماء العمال فً شركة معٌنة فٌموم العامل‬
‫بإدخال إسمه ثم عمره و ٌإتً عامل آخر فٌموم بنفس الشٌا وهكذا‪.‬‬
‫تعتبر أسماء و أعمار العمال لٌم نطلك علها إسم المٌم ولكً نستطٌع حفظ هذه المٌم فً ذاكرة‬
‫الجهاز ٌجب أن نسندها إلى متؽٌر فٌموم المتؽٌر بالتحاور مع الجهاز و حفظ المٌم المحجوزة‬
‫بداخله أو المسندة إلٌه ألن الجهاز ٌحفظ المٌم بواسطة إسم المتؽٌر و المثال التالً ٌوضح األمر‬
‫أكثر‬

‫كما نالحظ فً المثال ‪ x‬تعتبر المتؽٌر أو إسم المتؽٌر و ‪ 10‬أو ‪ 22‬تعتبر لٌمة المتؽٌر و للنا أن‬
‫إسمه متؽٌر ألننا نستطٌع تؽٌر لٌمته متى نشاء‬
‫و لكً نستطٌع حجز لٌم ومعلومات فً ذاكرة الجهاز البد لنا من إسنادها إلى متؽٌرات لكً‬
‫ٌستطٌع الجهاز حجزها فالجهاز ٌتعامل مع المعلومات أو المٌم حسب أسمابها فمثال ٌحجز الجهاز‬
‫المٌمة ‪ 10‬وٌطلك علها إسم ‪ x‬فإذا استدعٌنا ‪ x‬باألمر ‪ٌ print‬موم الجهاز بالبحث عن ‪ x‬فً‬
‫الذاكرة ثم ٌموم بتحمٌل لٌمتها‪.‬‬

‫تترن الؽة فً إختٌار األسماء ل المتؽٌرات و بكل األحرؾ )‪ (A>Z‬و األعداد(‪<9) 0‬لكن ٌشترط‬
‫أن ٌكون أول اإلسم عبارة عن حرؾ ال عدد‪.‬‬
‫و التستطٌع إستخدام األحرؾ الخاصة لتسمٌة المتؽٌرات مثل ‪ # @ /$‬و أٌضا ال ٌمكنن تسمٌة‬
‫المتؽٌرات باالسماء المحجوزة من الطرؾ اللؽة و المبٌنة فً المابمة التالٌة‬
‫كود‪PHP:‬‬
‫‪and assert break‬‬ ‫‪class‬‬ ‫‪continue‬‬ ‫‪def‬‬
‫‪del‬‬ ‫‪elif‬‬ ‫‪else‬‬ ‫‪except‬‬ ‫‪exec‬‬ ‫‪finally‬‬
‫‪for‬‬ ‫‪from‬‬ ‫‪global‬‬ ‫‪if‬‬ ‫‪import‬‬ ‫‪in‬‬
‫‪is‬‬ ‫‪lambda‬‬ ‫‪not‬‬ ‫‪or‬‬ ‫‪pass‬‬ ‫‪print‬‬
‫‪raise‬‬ ‫‪return‬‬ ‫‪try‬‬ ‫‪while‬‬ ‫‪yield‬‬

‫ما عدى هذا ٌمكنن إختٌار اإلسم الذي تشاء و لكً تسهل على نفسن األمر حاول دابما إختٌار إسم‬
‫ٌكون معبر عن عمل المتؽٌر مثال إذا احتجت لمتؽٌر تحجز فٌه االسماء سمه ‪ name‬حتى‬
‫تستطٌع معرفته بسهولة ألنن فً المستمبل إن شاء هللا ستستعمل الكثٌر من المتؽٌرات فً‬
‫مشروعن فإذا كان اإلسم مناسب لن تتعب كثٌرا فً البحث عن المتؽٌر و ٌكون عملن منظما اكثر‪.‬‬

‫إسناد لٌم لـ المتؽٌرات‬

‫كما للنا سابما ٌتكون المتؽٌر من لسمٌن إسم ولٌمة و إسناد لٌمة لمتؽٌر معٌن أمر سهل جدا‬
‫بحٌث نموم بكتابة إسم المتؽٌر ثم وضع عالمة = ثم لٌمة المتؽٌر‪.‬‬

‫من اروع ممٌزات لؽة الباٌثون أنها تموم بتعرٌؾ المتؽٌر تلمابٌا ففً لؽة السً مثال ٌجب أن‬
‫نعرؾ نوع المتؽٌر لبل أن نسند له لٌمة‬

‫لؽة الباٌثون تكتشؾ نوع المتؽٌر تلمابٌا لٌس هذا فمط بل إنها تموم بتسٌر موارد الذاكرة تلمابٌا و‬
‫هذه المٌزة األخٌرة ال ٌعرؾ لٌمتها إال من جرب البرمجة بلؽة السً و السً‪++ .‬‬
‫فً األمثلة الثالثة الذكورة فً األعلى ٌموم الحهاز بعمل أربعة أمور‬
‫‪-‬إنشاء المتؽٌر ثم حفظه و حفظ المعلومات الخاصة به( اإلسم المٌمة‪).‬‬
‫‪ٌ-‬حدد نوعه‪.‬‬
‫‪ٌ-‬حوله إلى صٌؽته الخاص الصٌؽةأو المستعملة من طرؾ الجهاز المشابهة ل الصٌؽة التالٌة ‪a3‬‬
‫‪b9 fx‬‬
‫‪-‬إنشاء رابط (مؤشر) بٌن اإلسم و مكان الحفظ و هذه مٌزة أخرى رابعة بحٌث أن اللؽة تموم‬
‫ٌتسٌر المؤشرات تلمابٌا‪.‬‬

‫نستطٌع إعطاء لٌمة ألكثر من متؽٌر فً سطر واحد أو حتى إعطاء لٌم مختلفة لمتؽٌرات متعددة‬
‫كما ٌوضح المثال التالً‬

‫وهذا مثال ٌموم بحساب المساحة‬


‫كما نستطٌع التعامل مع المتؽٌرات بكل المعامالت الرٌاضٌة‪*/ + ...‬‬

‫ٌوجد معامل مهم هو معامل بالً المسمة‪%‬‬

‫تذكرو هذا المعامل جٌدا ألنكم ستحتاجونه كثٌرا فً المستمبل و خاصتا مع السالسل الحرفٌة‪.‬‬

‫هذه ممدمة سرٌعة على لؽة الباٌثون و التعامل بالمتؽٌرات سنحاول اإلختصار فً المراحل األولى‬
‫من الدورة دون ظلم المبتدبٌن و سنتطرق لهذه األمور بالتفصٌل فً الدروس المتمدمة‪.‬‬
‫سندخل مباشرتا فً الدرس المادم إلى الجمل الشرطٌة‪.‬‬

‫جمل التحكم بالمتؽٌرات (جمل الشرطٌة)‬

‫كنت أود أن ندرس السالسل الحرفٌة أوال و لكن لكً نستفٌد أكثر لررت أن ندرس الجمل‬
‫الشرطٌة ألنها سهلة ثم نطبمها أكثر مع السالسل الحرفٌة و الموابم‪.‬‬

‫أوال ٌجب علٌن أن تعلم أن عماد البرمجة بأي لؽة هً الجمل الشرطٌة و الحلمات و السالسل‬
‫الحرفٌة بمختلؾ أنواعها و المؤشرات(فً اللؽات المنخفضة المستوى) و إن احتراؾ البرمجة ال‬
‫ٌؤتى إال بإتمان هذه األمور و فهمها جٌدا ألن كل شٌا ٌأتً بعد هذه األمور سٌعتمد علٌها سواء‬
‫فً البرمجة الكٌنوٌة ( )‪Class ,Method‬أو فً الواجهات الرسومٌة لدى إحذر أخً المارئ‬
‫فطرٌك اإلحتلراؾ ٌبدئ من هنا و ال تستصؽر أي شٌا ألنن ستحتاجه فٌما بعد‪.‬‬

‫نحن نعلم أن اللؽة العربٌة تحتوي على جمل الشرط و أن هذه الجمل تتكون من لسمٌن جملة‬
‫الشرط وجملة جواب الشرط ‪ ,‬كذلن الحال مع لؽات البرمجة بحٌث أننا نموم بكتابة الشرط ثم ٌلٌه‬
‫جواب الشرط أو باالحرى األوامر التً سٌنفدها البرنامج عند تحمك الشرط‬
‫كود‪PHP:‬‬
‫انششط >‪if< condition‬‬
‫>'‪< bloc d'instruction‬‬
‫جٕاب انششط‬

‫فً لؽة الباٌثون تكون جملة الشرط على النحو التالً‬


‫كود‪PHP:‬‬
‫‪a=10‬‬
‫‪if(a>10):‬‬
‫‪..........‬‬
‫فجملة الشرط تبتدأ دابما بعبارة( ‪ IF‬إذا) ومابٌن الموسٌن ٌعبر عن الشرط ثم النمطتٌن ‪ :‬لـ الداللة‬
‫على أن ما ٌتبع النمطتٌن عبارة عن جواب الشرط أو لكً نبٌن للمفسر أن كل ما ٌأتً بعد‬
‫النمتطٌن ٌنفد إذا تحمك الشرط‪.‬‬
‫كود‪PHP:‬‬
‫‪a=1200‬‬
‫‪if(a<2000):‬‬
‫"‪print"a <2000‬‬

‫عند تحمك الشرط لام المفسر بتنفٌد جواب الشرط و هو طباعة الرسالة‪.‬‬

‫مالحظة هامة ‪ٌ :‬جب مراعات المسافة التً ٌتٌحها لن البرنامج بعد جملة ‪ If‬ال تعد ألول السطر‬
‫بل أكتب األوامر فً هذه المسافة فكل ما سٌكب فً هذه المسافة ٌعتبره المفسر تابع لجملة‪if .‬‬

‫اآلن لو كان لدٌنا حالتٌن لشرط واحد ٌتوجب علٌنا إستعمال عبارة ثمسث التً تعتبر أخت جملة‬
‫‪if‬‬

‫بهذا سنكون لادرٌن على التعامل مع أكثر من حالة مع نفس الشرط ‪ ,‬ال ٌشترط كما تالحظون‬
‫وضع األلواس فً جملة ‪ if‬ولكن من األحسن وضعهما لكً تزٌد فً وضوح الكود‪.‬‬
‫وهذه بعض المعامالت التً سنحتاج إلٌها ل التعامل مع المتؽٌرات بواسطة الجمل الشرطٌة‬
‫كود‪PHP:‬‬
‫‪x==y‬‬ ‫انًسأاخ‬
‫‪x!=y‬‬ ‫عذو انًسأاخ‬
‫‪x>y‬‬
‫‪x<y‬‬
‫‪x>=y‬‬
‫أكثش أٔ ‪ٚ‬سأ٘‬
‫‪x<=y‬‬
‫أقم أٔ ‪ٚ‬سأ٘‬

‫مثال‬

‫إكتشاؾ العدد زوجً أو فردي‬


‫كود‪PHP:‬‬
‫‪a=7‬‬
‫‪if(a%2==0):‬‬
‫"‪print" a est pair‬‬ ‫‪#‬عذد صٔج‪# ٙ‬‬
‫‪else :‬‬
‫"‪print " a est impair‬‬
‫‪#‬عذد فشد‪#‬‬
‫أخذ المعلومات من المستعمل‪:‬‬

‫حتى اآلن لم نعرؾ كٌؾ نطلب من المستعمل إدخال معلومات أو أعداد وهذا ما سنعرفه اآلن‬
‫ٌوجد عبارتٌن أساسٌتٌن فً لؽة الباٌثون إلدخال المعلومات هما )(‪ Input‬و )(‪ raw_input‬و‬
‫كلهما له نفس العمل تمرٌبا ولكن ٌوجد إختالؾ طفٌؾ بٌنهما سنعرفه فً الدروس المتمدمة إن‬
‫شاء هللا‪.‬‬
‫و لكً نستطٌع إستعمالهما بصورة دٌنامٌكٌة ٌجب علٌنا إستعمال الفسر ‪ Py******er‬و من‬
‫اآلن فصاعدا سنستعمل هذا المفسر ألنه أحسن من المفسر الرسمً‪.‬‬

‫بما أننا أصبحنا اآلن نعرؾ كٌؾ نتعامل مع المستخدم سنواصل الجمل الشرطٌة ونطبك بعض‬
‫األمثلة علٌها‬

‫سنموم فً المثال التالً بـ الطلب من المستخد إدخال عددٌن ثم ندرس حاالت العددٌن‬
‫كود‪PHP:‬‬
‫‪a=input('number 1‬‬ ‫)'‪:‬‬
‫‪b=input(' number 2‬‬ ‫)'‪:‬‬
‫‪if a>b:‬‬
‫‪print a," > ",b‬‬
‫‪elif a<b:‬‬
‫‪print a," < ",b‬‬
‫‪else:‬‬
‫‪print a," = ",b‬‬

‫و فً التالً سنموم بالطلب من المستخدم بإدخال عدد ثم ٌكتشؾ البرنامج إن كان العدد زوجً أو‬
‫فردي‬
‫كود‪PHP:‬‬
‫‪a=raw_input( 'Introdiusez un nombre‬‬ ‫)'‪:‬‬
‫‪if (int(a) % 2==0 ):‬‬
‫" ‪print a," est paire‬‬
‫‪else:‬‬
‫" ‪print a," est impaire‬‬

‫لمنا بالكتابة التالٌة‬


‫كود‪PHP:‬‬
‫)‪int(a‬‬

‫حتى ٌحول المفسر لٌمة ‪ a‬إلى عدد صحٌح ‪ integer‬بدون فاصلة‪.‬‬


‫ثم لسمنا هذ العدد على إثنٌن فإذا كان الناتج صفر فالعدد ‪ a‬زوجً و إذا كان الناتج مختلؾ عن‬
‫الصفر فالعدد فردي‪.‬‬
‫اآلن نرٌد أن ٌكون العدد المدخل من طرؾ المستعمل ألل من مبة فإذا كان أكبر من مبة نطبع‬
‫للمستخدم رسالة خطأ‬
‫كود‪PHP:‬‬
‫‪a=raw_input( 'Introdiusez un nombre <100‬‬ ‫)'‪:‬‬
‫‪if (int(a) % 2==0 and int(a)<100 ):‬‬
‫" ‪print a," est paire‬‬
‫‪elif a>100:‬‬
‫‪print a," Error‬‬ ‫"‬
‫‪else:‬‬
‫"‪print a,"est impaire‬‬

‫المعامل ‪ٌ and‬عنً "و" و المعامل ‪ٌ or‬عنً "أو" و المعامل ‪ٌ not‬عنً "لٌس "المعامل ‪in‬‬
‫ٌعنً "فً"‬

‫أمثلة‬

‫فً المثال التالً سٌموم البرنامج بالطلب من المستخدم إدخال رلم بٌن ‪ 0‬و ‪ 100‬فإذا أدخل‬
‫المستخدم رلم أكبر من ‪ 100‬أو ألل من ‪ 0‬سٌموم البرنامج بطباعة رسالة خطأ‬
‫كود‪PHP:‬‬
‫))' ‪a=int(raw_input('enter any number !!(0) or >100‬‬
‫‪if( a<0 or a>100):‬‬
‫"‪print "pleas enter a nember between 1 and 99‬‬
‫‪elif (a>0 and a<100):‬‬
‫"‪print "good‬‬
‫‪else:‬‬
‫"‪print"Error‬‬

‫فً المثال التالً ٌموم البرنامج بالبحث عن حرؾ ‪ s‬فً إسم المستخدم‬
‫كود‪PHP:‬‬
‫)' ‪name =raw_input('your name pleas :‬‬
‫‪if 's' in name :‬‬
‫") ‪print " your name contain (s) char‬‬
‫‪else:‬‬
‫‪print" can't find char s in your name‬‬ ‫"‬

‫كما اننا نستطٌع إستعمال ‪ in‬فً األرلام كما هو موضح فً المثال التالً‬
‫كود‪PHP:‬‬
‫)' ‪number =raw_input('enter a number :‬‬
‫‪if '0' in number:‬‬
‫") ‪print " the number contain 0‬‬
‫‪else:‬‬
‫‪print" the number dos't contain 0‬‬ ‫"‬

‫و فً التالً مثال ٌموم بالطلب من المستخدم إدخال مبلػ مالً ثم ٌموم البرنامج بحساب المٌم‬
‫المضافة ‪ TVA‬لهذا المبلػ علما أنه إذا كان المبلػ ألل من ‪ 1000‬فلٌس علٌه لٌمة مضافة و إذا‬
‫كان المبلػ أكبر من ‪ 1000‬سٌطلب البرنامج من المستخدم إدخال لٌمة الرسم ‪ TVA‬ثم ٌحسب‬
‫المٌمة‬
‫كود‪PHP:‬‬
‫‪Sum =int(raw_input('Sum‬‬ ‫))' ‪:‬‬
‫‪if Sum<1000:‬‬
‫" ‪print "No TVA‬‬

‫‪else:‬‬
‫‪p =float(raw_input('TVA‬‬ ‫)) ' ‪:‬‬
‫‪TVA=(Sum*p)/100‬‬
‫‪print "TVA : ",TVA‬‬

‫علمنا بأن لٌمة الرسم تكون بالفاصلة فً أؼلب األحٌان فممنا بتحوٌل العدد المدخل من طرؾ‬
‫المستخدم إلى نوع ‪ float‬حتى ٌتمكن البرنامج من التعامل مع العدد المدخل‬
‫كود‪PHP:‬‬
‫‪p =float(raw_input('TVA‬‬ ‫)) ' ‪:‬‬

‫إنتهٌنا اآلن من الجمل الشرطٌة و أظن أن األكثرٌة فهمتها ألنها سهلة جدا و لكنها مازالت تتبعنا‬
‫فً مشوارنا الطوٌل إن شاء هللا و سنطبك أمثلة علٌها فً الدروس الممبلة‬

‫سننتمل اآلن إلى الحلمات التكرارٌة و هً األخرى سهلة جدا و لن تأخذ منا الكثٌر من الولت و‬
‫سنطبك الجمل الشرطٌة علٌها حتى تعم الفابدة‪.‬‬

‫‪nile‬‬

‫مشاهذة مهفه انشخصي‬

‫إرسال رسانت خاصت إنى‪nile‬‬

‫انبحث عن جميع مشاركاث‪nile‬‬

‫أضف ‪ nile‬إنى قائمت األصذقاء‬

‫‪#2‬‬

‫يوو أمس ‪, 09:05 PM‬‬

‫تاريخ انتسجيم‪: Feb 2008‬‬


‫انمشاركاث‪302,1 :‬‬
‫‪nile‬‬
‫االدارة‬

‫الــــــــ ‪Python‬‬ ‫رد‪ :‬دورة فى لغة‬

‫كما ٌدل إسمها تستعمل الحاللات لتكرار عمل معٌن عدة مرات فإذا كان لدٌنا عمل ٌتوجب فعله‬
‫أكثر من مرة فبدل من أن نكتب األومر عدة مرات نموم بإستعمال حلمة تكرارٌة تكرر هذا العمل‪.‬‬
‫تحتوي لؽة الباٌثون على نوعٌن من الحلمات ‪ :‬حلمة ‪ while‬و حلمة ‪ for‬نظرٌا كل الحلمتٌن‬
‫تؤدٌان إلى نفس النتٌجة و لكن عملٌا األمر ٌختلؾ فكل حلمة تحتوي على خصابص معٌنة و هذا‬
‫ما ستكتشفه فً المستمبل‪.‬‬
‫كود‪PHP:‬‬
‫‪while( expretion) :‬‬
‫>‪<bloc d'instruction‬‬

‫تشبه الحلمات الجمل الشرطٌة كثٌرا بل فً بعض األحٌان تعمل نفس عملها ‪ while‬تعنً "إذا‬
‫كان" و هنا نضع شرط الحلمة إن صح التعبٌر مثال‬
‫كود‪PHP:‬‬
‫‪while(i<10):‬‬

‫أو‬
‫كود‪PHP:‬‬
‫‪while(name !=' '):‬‬

‫إستعماالتها كثٌرة جدا و ٌبمى اإلستعمال األهم ل الحلمات التكرارٌة مع السالسل الحرفٌة و‬
‫الموامٌس ‪ dico‬و هذا ما سنراه مستمبال‪.‬‬
‫كما للت حاالت إستعمال الحاللات كثٌرة جدا و لكن نستطٌع تلخٌصها فً حالتٌن أساسٌتٌن‪:‬‬
‫الحالة األولى تتمثل فً تكرار عمل معٌن‬
‫كود‪PHP:‬‬
‫‪i=0‬‬
‫‪while(i<10):‬‬
‫‪print i‬‬
‫‪i=i+1‬‬

‫سٌطبع هذا البرنامج األعداد من صفر إلى عشرة ‪ .‬شرط الحلمة أن ٌكون ‪ i‬ألل من عشرة و للب‬
‫الحلمة أو عمل الحلمة هو طباعة المتؽٌر ‪ i‬أما الكتابة‬
‫كود‪PHP:‬‬
‫‪i=i+1‬‬

‫فتسمى عداد الحلمة ونستطٌع إختصارها بالعبارة التالٌة ‪ i+=1‬وتؤدي نفس عمل العبارة السابمة‬
‫‪.‬‬
‫فً للب الحلمة‬
‫لو أردنا تحلٌل عمل هذه الحلمة بالتفصٌل الممل نمول‪:‬‬
‫أول سٌا ٌفعله المفسر هو لتحمك من شرط الحلمة ‪ i<10‬فإن وجد الشرط محمك ٌتجه لتنفٌد‬
‫عمل الحلمة و هو ‪ print i‬ثم ٌنزل إلى تحت فٌجد العبارة ‪ i=i+1‬فٌموم بإضافة ‪ 1‬إلى ‪ i‬أي أن ‪i‬‬
‫أصبح ٌساوي ‪ 1‬ثم ٌتحمك من الشرط ثانٌتا فٌجده محمك ألن ‪<10 1‬فٌنفد أمر الحلمة و ٌطبع‬
‫عدد ‪ 1‬ثم ٌنزل إلى تحت فٌجد العداد فٌموم بإضالة ‪ 1‬إلى ‪ i‬ثم ٌتحمك من شرط الحلمة مجددا ‪.....‬‬
‫وهكذا حتى ٌصبح ‪ٌ i‬ساوي ‪ٌ 9‬موم بطباعته على الشاشة ثم ٌضٌؾ له ‪ 1‬و عندما ٌتحمك من‬
‫الشرط ٌجده ؼٌر محمك ألن العبارة ‪<10 10‬عبارة خاطبة فٌموم المفسر بالخروج من الحلمة‬
‫تماما‪.‬‬
‫هكذا تعمل الحلمات‪.‬‬

‫مثال لو أردنا بطبعات نفس األعداد ولكن بصورة عكسٌة سٌصبح الكود كالتالً‬
‫كود‪PHP:‬‬
‫‪i=10‬‬
‫‪while(i>0):‬‬
‫‪print i‬‬
‫‪i=i-1‬‬
‫عكس الحلمة األولى تماما و نستطٌع أٌضا إستبدال العبارة ‪ i=i-1‬بـ العبارة‪i-=1‬‬
‫كما أننا نستطٌع إضافة عبارات عند نسخ رلم العداد‬
‫كود‪PHP:‬‬
‫‪count= 0‬‬
‫‪while(count<10):‬‬
‫‪print" the index is‬‬ ‫‪:",count‬‬
‫‪count+=1‬‬

‫نستطٌع إستعمال الحلمات اللتأكد من شرط أي أننا نستخدمها بالطرٌمة التً نستخدم بها الجمل‬
‫الشرطٌة‬
‫كود‪PHP:‬‬
‫''=‪name‬‬
‫‪while not name :‬‬
‫‪name=raw_input(' your name pleas‬‬ ‫)'‪:‬‬

‫‪print "Welcom ",name‬‬

‫ستموم هذه الحلمة بتكرار طلب إسم المستخدم حتى ٌدخل إسمه‬

‫مثال آخر‬
‫ٌموم هذا المثال بجمع األعداد التً ٌدخلها المستخدم حتى ٌدخل الرلم ‪ 0‬فإذا أدخل الرلم ‪ٌ 0‬موم‬
‫البرنامج بإظهار الناتج‬
‫كود‪PHP:‬‬
‫‪a,b=0,0‬‬
‫))') ‪a=int(raw_input('enter a number (0 to exit‬‬
‫‪while a>0:‬‬
‫‪b=b+a‬‬
‫))') ‪a=int(raw_input('enter a number (0 to exit‬‬

‫‪print " THE some is‬‬ ‫‪:",b‬‬

‫و المثال التالً نفس المثال الذي رأٌناه سابما (إكتشاؾ العدد الزوجً و الفردي) ولكن مع شرط‬
‫إدخال عدد موجب فلو أدخل المستخدم عدد سالب تموم الحلمة بإعادة طلب اإلدخال حتى ٌدخل‬
‫المستخدم عدد موجب‬
‫كود‪PHP:‬‬
‫))' ‪a=int(raw_input('entrer uu nombre svp‬‬
‫‪while a<0:‬‬
‫" ‪print" entrer un nombre positif >0‬‬
‫))' ‪a=int(raw_input('entrer uu nombre svp‬‬
‫‪if a%2==0:‬‬
‫" ‪print a,"est paire‬‬
‫‪else :‬‬
‫" ‪print a,"est impaire‬‬

‫]"‪[size="4‬لم نتحدث عن جملة ‪ for‬حتى اآلن ألن اإلستعمال األساسً لهذ الجملة ٌكون مع السالسل‬
‫الحرفٌة كل ماعلٌن اآلن أخً المارئ هو فهم كٌفٌة عمل الحلمات و الجمل الشرطٌة و سنطبك علٌهما الكثٌر‬
‫من األمثلة مع السالسل الحرفٌة و الموابم‪.‬‬

‫]"‪[color="DarkGreen‬سٌكون درسنا المادم بإذن هللا مجموعة من األمثلة حول الجمل الشرطٌة و‬
‫الحلمات لبل اإلنطالق فً السالسل الحرفٌة‬

‫هذه مجموعة من التمارٌن حول الجمل الشرطٌة و الجمل التكرارٌة‬

‫المثال األول آلة حاسبة بسٌطة‬

‫كود‪PHP:‬‬
‫"***************** ‪print" ************ Python calculator‬‬
‫))'‪a=float(raw_input('first num :‬‬
‫))' ‪b=float(raw_input('second num :‬‬
‫)'‪op=raw_input(' operator :‬‬
‫‪if op=='+':‬‬
‫)‪print "%d + %d = %d" % (a,b,a+b‬‬
‫‪elif op=='-':‬‬
‫)‪print "%d - %d = %d" % (a,b,a-b‬‬
‫‪elif op=='*':‬‬
‫)‪print "%d * %d = %d" % (a,b,a*b‬‬
‫‪elif op=='/':‬‬
‫)‪print "%d / %d = %f" %(a,b,a/b‬‬

‫أوال لمنا بالطلب من المستخدم بإدخال رلمٌن و لمد حجزنا هذٌن الرلمٌن على صٌؽة ‪ float‬حتى‬
‫ٌتمكن البرنامج من حساب اإلعداد بالفواصل دون مشاكل‬
‫ثم ٌدخل المستخدم المعامل الخاص بالعملٌة هنا ٌبدئ البرنامج بدراسة اإلحتماالت حسب المعامل‬
‫المدخل فإذا كان عبارة عن عالمة '‪ٌ '+‬موم البرنامج بجمع العددٌن و إظهار النتٌجة و هكذا مع‬
‫كل اإلحتماالت األخرى‬

‫المثال الثانً برنامج بسٌط للتسجٌل فً المعهد‬


‫ٌموم هذا البرنامج بالطلب من الطالب إدخال إسمه و عمره و نفرض مثال أن المعهد ال ٌمبل‬
‫األعضاء الذٌن ٌفوق عمرهم فإذا كان عمر الطالب ‪ 23‬تحت ‪ٌ 23‬طلب منه البرنامج إختاٌار‬
‫اإلختصاص الذي ٌرٌد التسجٌل فٌه ثم ٌطلب منه المعدل فإذا كان المعدل ممبول و هذا حسب‬
‫اإلختصاص‬
‫كود‪PHP:‬‬
‫"******************* ‪print "*************** Bienvenu‬‬
‫"**************)*****(‪print "************** institut‬‬
‫)'‪name=raw_input(' Nom :‬‬
‫))' ‪age=int(raw_input(' Age :‬‬
‫‪if ( age < 18 or age > 23) or (name=='') :‬‬
‫" ‪print " Erreur invalide information‬‬
‫‪else:‬‬
‫‪print"choisissez une branche svp ! \n 1 :Reseau‬‬ ‫‪\n 2 : Web \n‬‬
‫" ‪3 : Maintenance‬‬
‫)' ‪ch=raw_input('Choix :‬‬
‫‪if ch=='1':‬‬
‫))"‪moy=float(raw_input("entrer votre moyenne :‬‬
‫‪if moy >=13 :‬‬
‫‪print" Felicitations %s votre chois est accepte par l'adm‬‬
‫)‪isitration" %(name‬‬
‫‪else :‬‬
‫‪print" Desole ! vous ne peuvez pas s'inscrire dans cette‬‬
‫"‪branche‬‬
elif ch=='2':
moy=float(raw_input("entrer votre moyenne :"))
if moy >=12.5 & moy<13 :
print" Felicitations %s votre chois est accepté par l'ad
misitration" %(name)
else :
print" Desole ! vous peuvez pas s'inscrire dans cette bra
nche"
elif ch=='3':
moy=float(raw_input("entrer votre moyenne :"))
if moy >=11 & moy<12.5 :
print" Felicitations %s votre chois est accepte par l'ad
misitration" %(name)
else :
print" Desole ! vous peuvez pas s'inscrire dans cette bra
nche"

‫البرنامج بسٌط أوال نأخذ من المستخدم المعلومات‬


PHP:‫كود‬
name=raw_input(' Nom :')
age=int(raw_input(' Age : '))

‫ثم نموم بفحص العمر و اإلسم‬


PHP:‫كود‬
if ( age < 18 or age > 23) or (name==' ') :

(Choix)‫ثم نموم بدراسة الحاالت حسب إختٌار الطالب‬

‫المثال الثالث إكتشاؾ العدد األكبر من ثالثة ارلام‬


PHP:‫كود‬
a=int(raw_input('A :'))
b=int(raw_input('B : '))
c=int(raw_input('C : '))

if(a == b == c):
print"A = B = C"

if (a>b & b>c) :


print" MAX : A"

if a<b & b>c:


print " MAX : B"

elif b<c:
print "MAX : C"

‫أظن أن هذا الكود مفهوم ألنه منطمً لمنا بممارنة كل األعداد مع مراعاة التسلسل فً الممارنة‬

‫المثال الرابع ترتٌب ثالث أعداد حسب لٌمها‬


‫لو طلب منا اآلن أن نرتب األعدا ترتٌبا تصاعدٌا أي ٌموم الستخدم بإدخال ثالثة أعداد فٌموم‬
‫ فٌموم البرنامج‬9 3 6 ‫البرنامج بترتٌبها تصاعدٌا ثم ٌظهرها للمستخدم مثال ٌدخل المستخدم‬
3 6 9 ً‫بترتٌبها على النحو التال‬
‫أول شٌا ٌجب أن نعرؾ كم متؽٌر نحتاجه لعمل هدا البرنامج بالتأكٌد سٌحتاج إلى ثالثة متؽٌرات‬
‫ٌموم بتخزٌن األعداد الثالثة فٌها‬
‫ثانٌا و هو األهم كٌؾ سٌعمل البرنامج?‪.‬‬
‫فالنبدأ بدراسة البرنامج خطوة خطوة‬
‫لكً ٌرتب البرنامج األعداد ٌجب أن ٌموم بتبدٌل مواضعها أي تبدٌل أماكنها مثال فلو كان لدٌنا‬
‫‪a,b,c‬وكان ‪ b>a‬سٌصبح الترتٌب كالتالً‪b,a,c‬‬
‫ولكن المشكل ٌكمن فً كٌفٌة تبدٌل األماكن فلو كتبنا مثال ‪ if(a<b) a=b‬سٌموم البرنامج بإسناد‬
‫لٌمة ‪ b‬إلى ‪ a‬أي أن المٌمة الحمٌمٌة ل ‪ a‬لد حدفت وحلت مكانها لٌمة ‪ b‬فٌصبح عندنا‪b,b,c‬‬
‫لكً نموم بحل هدا المشكل ٌجب أن نضٌؾ متؽٌر رابع نسمٌه المتؽٌر المؤلت ‪temp‬لمادا مؤلت‬
‫ألننا سنحجز فٌه لٌمة المتؽٌرات المراد تبدٌلها مؤلتا‬
‫فبدل ما نكتب ‪ if(a<b) a=b‬وهنا كما للنا لد حدفنا لٌمة‪ a‬تماما‬
‫نكتب‬
‫كود‪PHP:‬‬
‫‪if(a<b):‬‬
‫‪temp=a‬‬
‫‪a=b‬‬
‫‪b=temp‬‬

‫بهدا نكون لد تمكنا من التً هً أصال لٌمة ‪ a‬فً ‪ b‬و هدا ما نرٌد ثم وضعنا لٌمة المتؽٌر‬
‫‪temp‬و الحظو جٌدا أوال وضعنا لٌمة ‪a‬فى المتؽٌر المؤلت ‪ temp‬ثم أسندنا لٌمة ‪ b‬ل ‪ a‬دون‬
‫حدفهما أي منهما تبدٌل لٌم ‪ a‬و ‪b‬‬
‫و ٌكون كود البرنامج كالتالً‬
‫كود‪PHP:‬‬
‫))'‪a=int(raw_input('A :‬‬
‫))' ‪b=int(raw_input('B :‬‬
‫))' ‪c=int(raw_input('C :‬‬
‫‪if a<b :‬‬
‫‪temp=a‬‬
‫‪a=b‬‬
‫‪b=temp‬‬

‫‪if a<c:‬‬
‫‪temp=a‬‬
‫‪a=c‬‬
‫‪c=temp‬‬

‫‪if b<c:‬‬
‫‪temp=c‬‬
‫‪c=b‬‬
‫‪b=temp‬‬

‫‪print " Tri‬‬ ‫‪: ",a,b,c‬‬

‫المثال الخامس إكتشاؾ إشارة حاصل ضرب عددٌن‬

‫كود بسٌط ٌمكننا من إكتشاؾ إشارة حاصل ضرب عددٌن دون إستعمال الدوال‬
‫كود‪PHP:‬‬
‫))'‪a=int(raw_input('A :‬‬
‫))' ‪b=int(raw_input('B :‬‬

‫‪if(a==0 or b==0):‬‬
‫)‪print "Le produit %d * %d est zero " %(a,b‬‬
‫‪elif (a >0 and b >0) or (a< 0 and b< 0) :‬‬
‫)‪print " Le signe du produit %d * %d est positif" % (a,b‬‬

‫‪else:‬‬
‫)‪print "Le signe du produit %d * %d est negatif " % (a,b‬‬

‫الحلمات‬

‫المثال السادس برنامج رفع لوة عدد‬


‫ٌموم هذا البرنامج برفع لوة عدد حسب األس الذي ٌدخله المستخدم‬
‫كود‪PHP:‬‬
‫))'‪a=int(raw_input('A :‬‬
‫))' ‪n=int(raw_input(' n‬‬
‫‪i, res =0, 1‬‬
‫‪while i<n:‬‬
‫‪res*=a‬‬
‫‪i+=1‬‬
‫‪print res‬‬

‫‪ٌa‬عتبر العدد و ‪ٌ n‬عتبر األس بعد ذلن تموم حلمة بضرب العدد ‪ a‬بنفسه و تخزٌن الناتج فً المتؽٌر‪res‬‬

‫المثال السابع رسم مثلث‬


‫ٌموم هذا البرنامج برسم مثلث و ٌعتبر كود البرنامج بسٌط جدا لكنه ٌفٌدن فً أمور عدة‬
‫مثال الطرٌمة البسٌطة لرسم مثلث هً عمل حلمة تموم برسم الرمز * مثال ولكن هذا المثلث‬
‫سٌكون مثلث لابم الحظو الكود‬
‫كود‪PHP:‬‬
‫‪i=0‬‬
‫‪while i<10:‬‬
‫‪print"*"*i‬‬
‫‪i+=1‬‬

‫و سٌكون المثلث على الشكل التالً‬


‫كود‪PHP:‬‬
‫*‬
‫**‬
‫***‬
‫****‬
‫*****‬
‫******‬
‫*******‬
‫********‬
‫*********‬

‫لكننا نرٌد رسم مثلث متساوي السالٌن كهذا‬

‫تبدئ الفكرة من الفراؼات التً لبل * من جهة الٌسار فلو الحظتم جٌدا سترون أنها ترسم مثلث‬
‫لابم مملوب‬
‫إنطاللا من هذه المالحظة سنكتب كود ٌرس مثلث لابم فارغ و فً نفس الولت ٌرسم مثلث‬
‫بواسطة الرمز*‬
‫كود‪PHP:‬‬
‫'* '=‪et‬‬
‫' '=‪es‬‬
‫‪i=0‬‬
‫‪y=10‬‬
‫‪while i<10:‬‬
‫)‪print"%s %s" %(es*y, et*i‬‬
‫‪i+=1‬‬
‫‪y-=1‬‬

‫كما تالحظون ٌحتوي الكود على حلمة دات عدادٌن ‪ i‬و ‪ٌy‬موم العاداد ‪ i‬التصاعدي برسم عالمات‬
‫* و فً نفس الولت ٌموم العداد ‪ y‬التنازلً برسم فراؼات لبل الرمز*‬
‫المثال الثامن رسم مستطٌل‬
‫ٌموم هذا البرنامج برسم مستطٌل ٌموم المستخدم بتحدٌد طوله و عرضه‬
‫كود‪PHP:‬‬
‫'‪a='-‬‬
‫'|'=‪b‬‬
‫‪l=0‬‬
‫))'‪i=int(raw_input('larg :‬‬
‫))' ‪y=int(raw_input('long :‬‬
‫'‪print '+'+ a*i + '+‬‬
‫‪while l< y :‬‬
‫‪print b+ ' '*i+b‬‬
‫‪l+=1‬‬
‫'‪print '+'+a*i+'+‬‬

‫أوال نطلب من المستخدم إدخال الطول و العرض‬


‫كود‪PHP:‬‬
‫))'‪i=int(raw_input('larg :‬‬
‫))' ‪y=int(raw_input('long :‬‬

‫ثم ٌموم البرنامج برسم الشك األول من المستطٌل بواسطة الكتابة التالٌة‬
‫كود‪PHP:‬‬
‫'‪print '+'+ a*i + '+‬‬

‫و ستنتج لنا الرسم التالً‬


‫‪+-------------------------------------+‬‬
‫ثم ٌموم البرنامج برسم الرمز | وٌلٌه فراؼات بحسب عرض المستطٌل و هذا ما تعملة الكتابة‬
‫التالٌة‬
‫كود‪PHP:‬‬
‫‪while l< y :‬‬
‫‪print b+ ' '*i+b‬‬

‫إذ أن الفراؼات تساوي عرض المستطٌل‬


‫و فً األخٌر ٌرسم البرنامج الشك األخٌر للمستطٌل المطابك للشك األول‬

‫]"‪[color="DarkGreen"][size="4‬هذا ما لدٌنا اآلن سنطبك الكثٌر من األمثلة حول الحلمات عندما‬


‫ندرس السالسل الحرفٌة و الموابم أرجوا أن تكون التمارٌن لد أعجبتكم و أنا جاهز ألي سؤال‬

‫تعتبر هذه الخطوة أول خطوة نحو التعمك فً لؽة الباٌثون ألن السالسل الحرفٌة تعتبر األكثر‬
‫إستعماال فً البرمجة و من ٌتمن السالسل الحرفٌة و الموابم و التعامل بها لن ٌجد صعوبة فً‬
‫تطوٌر برامجه وإدخال تمنٌات جدٌدة علٌها و هً واسعة اإلستعمال و لن تجد كود ال ٌحتوي على‬
‫سالسل حرفٌة و تستعمل خاصتا مع بنون المعلومات (لواعد البٌانات) و التواصل عن بعد‬
‫(التطبٌمات الموزعة) و التحكم فً األجهزة عن بعد(برمجة الشبكات ) و التعامل مع الملفات و‬
‫أمو كثٌرة جدا ال ٌسعنا الولت لذكرها اآلن‪.‬‬
‫على كل حال ال تخؾ بأي طرٌمة من الطرق التً سندرسها فً هذا الجزء من الدورة ودون كل‬
‫شٌا جدٌد فً ورلة ألن هذا مهم جدا لن‪.‬‬

‫أول خطوة مع السالسل‪:‬‬

‫كما ٌدل إسمها تعتبر السالسل الحرفٌة مجموعة أو سلسلة من الحروؾ أو األرلام المترابطة‬
‫ببعضها البعض فهً مجموعة من المتؽٌرات المترابطة ببعضها و المحجوزة بمتؽٌر واحد فً‬
‫مكان واحد‪.‬‬

‫مثال‬
‫كود‪PHP:‬‬
‫"‪name="chouaib‬‬
‫"‪age="21 years old‬‬
‫‪print name‬‬
‫‪print age‬‬

‫ٌسمى المتؽٌر ‪ name‬سلسلة أو ‪ string‬ونفس الشٌا ل ‪ age‬و كما موضح فً المثال نموم بكتابة إسم‬
‫المتؽٌر ثم نسند له المحتوى‬

‫و نستطٌع تجزبة السلسلة إلى أجزاء صؽٌرة‬


‫كود‪PHP:‬‬
‫"‪name="chouaib‬‬
‫"‪age="21 years old‬‬
‫‪print name‬‬
‫‪print age‬‬
‫]‪print name[2‬‬
‫]‪print age[5‬‬

‫و لكن ٌعتبر العدد ‪ 0‬عنصر أول عنصر فً السلسلة فلو كتبنا‬


‫كود‪PHP:‬‬
‫]‪print name[0‬‬

‫سٌكون الناتج‪C‬‬
‫و نستطٌع طباعة الحرؾ بالعد العكسً أي بدأ العد من آخر السلسة‬
‫كود‪PHP:‬‬
‫]‪print name[2-‬‬

‫سٌكون الناتج‪i‬‬
‫و نستطٌع التعامل مع السالسل بواسطة المعامالت الرٌاضٌة * ‪ +‬كما هو موضح فً المثال التالً‬
‫كود‪PHP:‬‬
‫"‪name="chouaib‬‬
‫"‪age="21 years old‬‬
‫‪nameandage=name+age‬‬
‫‪print name‬‬
‫‪print age‬‬
‫‪print nameandage‬‬

‫أو بواسطة الكتابة التالٌة‬


‫كود‪PHP:‬‬
‫"‪name="chouaib‬‬
‫‪print name +" age‬‬ ‫" ‪: 21‬‬

‫نستطٌع أٌضا إستعمال عملٌة الضرب لطبع حرؾ عدة مرات‬


‫كود‪PHP:‬‬
‫'‪a='a‬‬
‫'‪b='b‬‬
‫‪print a*10‬‬
‫‪print b*25‬‬
‫‪print a*10+b*25‬‬

‫و نستطٌع تحدٌد عدد األحرؾ التً نرٌد طباعنها من سلسة معٌنة‬


‫كود‪PHP:‬‬
‫"‪forum="institue moad http://moad.alestidafa.com/vb/index.php‬‬
‫]‪print forum[0:8‬‬
‫]‪print forum[9:14‬‬
‫]‪print forum[14:40‬‬

‫بهذه الطرٌمة نتمكن من إنشاء مجال معٌن لطباعة جزء معٌن من السلسلة‬
‫وبنفس الطرٌمة نستطٌع التعامل مع أجزاء السلسلة بواسطة المعامالت الرٌاضٌة‬
‫كود‪PHP:‬‬
‫"‪forum="institue moad http://moad.alestidafa.com/vb/index.php‬‬
‫]‪print forum[0:8]+forum[9:14‬‬

‫و لعمل مساحة بٌن العبارتٌن نضٌؾ إلٌها" "‬


‫كود‪PHP:‬‬
‫"‪forum="institue moad http://moad.alestidafa.com/vb/index.php‬‬
‫]‪print forum[0:8]+ " " + forum[9:14‬‬

‫و لو كانت لدٌنا جملة كبٌرة أو عبارة كاملة نرٌد حجزها فً سلسلة نموم بكتابة """ لبل العبارة‬
‫وننهً العبارة بنفس الكتابة‬
‫كود‪PHP:‬‬
‫"""=‪forum‬‬
‫"‪institue moad http://moad.alestidafa.com/vb/index.php‬‬
‫‪cours of python perl php java and more ..........‬‬
‫"""‬
‫‪print forum‬‬

‫و لكن لو كانت لدٌنا مجموعة من األسماء مثال مختلفة و نرٌد حجزها فً متؽٌر واحد دون الدمج‬
‫بٌنهما هل نستطٌع فعل ذلن ؟‬
‫أنظر المثال التالً‬
‫كود‪PHP:‬‬
‫)"‪name=("chouaib","moad","jarod","somebody","man2008‬‬
‫‪print "name : %s %s %s %s %s " %name‬‬

‫لمد جمعنا عدة أسماء و لمنا بحجزهم فً متؽٌر واحد و العبارة ‪ s%‬تعنً طباعة متؽٌر فً هذا‬
‫المكان و ‪ s‬تعنً ‪ string‬و عند اإلنتهاء نموم بتعرٌؾ المتؽٌر الذي ٌحتوي على مجموعة‬
‫االسماء‪%name‬‬
‫و لو لمنا بطباعة السلسلة ككل دون إستعمال المعامل ‪ %‬سٌموم البرنامج بطباعة المحتوى كامل‬
‫على هذا الشكل‬
‫)'‪('chouaib', 'moad', 'jarod', 'somebody', 'man2008‬‬

‫و لو أردنا طباعة اإلسم األول أو الجزء األول من السلسلة فمط نموم بكتابة‬
‫كود‪PHP:‬‬
‫]‪print name[0‬‬

‫فٌكون الناتج‪chouaib‬‬
‫و نستطٌع أٌضا طباعة المحتوى الذي نرٌد‬
‫كود‪PHP:‬‬
‫]‪print name[0]+ " " + name[1‬‬

‫فٌكون الناتج ‪chouaib moad‬‬

‫أو إضافة عبارات أخرى بٌن مستملة عن السلسلة األم‬


‫كود‪PHP:‬‬
‫‪print name[0]+ " is an algerian‬‬ ‫‪but‬‬ ‫‪" + name[1] + " is an palestini‬‬
‫"‪an‬‬

‫لمعرفت حجم سلسلة أو طولها نستعمل الدالة‪len‬‬


‫كود‪PHP:‬‬
‫)"‪name=("chouaib","moad","jarod","somebody","man2008‬‬
‫)‪c=len(name‬‬
‫‪print c‬‬

‫تموم هذه الدالة بإعطابنا طول الدالة أو طول جزء من الدالة و هذا من روعة لؽة الباٌثون بحٌث‬
‫أنه لو أردنا معرفت طول سلسلة بلؽة السً ٌتوجب علٌنا كتابة كود بثالثة أسطر‬

‫و هذا المثال ٌوضح لنا كٌفٌة معرفة طول جزء من السلسلة‬


‫كود‪PHP:‬‬
‫)"‪name=("chouaib","moad","jarod","somebody","man2008‬‬
‫)]‪c=len(name[1‬‬
‫‪print c‬‬

‫سٌكون الناتج ‪4‬‬


‫و هذه الدالة بالدات سنتخدمها كثٌرا فً المستمبل خاصتا مع الحلمات و هذا مثال ٌبٌن لنا إستعمال‬
‫هذه الدالة مع الحلمات‬
‫كود‪PHP:‬‬
‫)"‪name=("chouaib","moad","jarod","somebody","man2008‬‬
‫‪i=0‬‬
‫)‪c=len(name‬‬
‫‪while i<c:‬‬
‫]‪print name[i‬‬
‫‪i+=1‬‬

‫تموم هذه الحلمة بطباعة كل محتوى السلسة و ذلن بواسطة العبارة‬


‫كود‪PHP:‬‬
‫]‪print name[i‬‬

‫و ‪ i‬هو عداد الحلمة أي أنه سٌطبع كل محتوى الحلمة بشرط أن ٌكون ألل من محتواها‬
‫كود‪PHP:‬‬
‫‪while i<c:‬‬

‫و اآلن سنموم بكتابة نفس البرنامج و لكنه ٌطبع رسالة ٌخبرنا بها أن العضو ‪ somebody‬ؼٌر معروؾ‬
‫كود‪PHP:‬‬
‫)"‪name=("chouaib","moad","jarod","somebody","man2008‬‬
‫‪i=0‬‬
‫)‪c=len(name‬‬
‫‪while i<c:‬‬
‫]‪print name[i‬‬

‫‪if name[i]=="somebody":‬‬
‫"‪print"unknown user‬‬

‫‪i+=1‬‬

‫و لو أردنا التعدٌل ثانٌتا على الكود بحٌث أنه ٌتولؾ هذه المرة عند الوصول إلى اإلسم الؽٌر‬
‫معروؾ سنموم بإدخال العبارة‪break‬‬
‫كود‪PHP:‬‬
‫)"‪name=("chouaib","moad","jarod","somebody","man2008‬‬
‫‪i=0‬‬
‫)‪c=len(name‬‬
‫‪while i<c:‬‬
‫]‪print name[i‬‬

‫‪if name[i]=="somebody":‬‬
‫"‪print"unknown user‬‬
‫;‪break‬‬

‫‪i+=1‬‬

‫عبارة ‪ break‬تجبر الحلمة على الخروج عند تحمك الشرط ‪ .‬إذا سٌموم هذا الكود بطباعة‬
‫الرسالة ثم الخروج من البرنامج‬

‫سنطور اآلن فً الكود للٌال حتى ٌتمكن المستخدم من إدخال إسم ٌرٌد البحث عنه فٌخبره‬
‫البرنامج بوجود اإلسم إن وجده‬
‫كود‪PHP:‬‬
‫)"‪name=("chouaib","moad","jarod","somebody","man2008‬‬
‫)'‪search=raw_input('enter the name :‬‬
‫‪i=0‬‬
‫)‪c=len(name‬‬
‫‪while i<c:‬‬
‫‪if name[i]==search:‬‬
‫" ‪print search," exist in the string‬‬
‫;‪break‬‬
‫‪i=i+1‬‬

‫و لكن هذا الكود الٌطبع شٌا فً حالة عدم وجود اإلسم‪.‬‬

‫اآلن فكرو معً فً طرٌمة تجعل البرنامج ٌخبرنا بعدم وجود اإلسم إن كان هذا اإلسم لٌس محتوى‬
‫فً المجموعة‪.‬‬
‫لد ٌمول البعض منكم أن األمر بسٌط بإستعمال عبارة ‪ else‬وهم على حك و لكن كٌؾ ؟‬

‫مثال لو جربنا الطرٌمة التالٌة‬


‫كود‪PHP:‬‬
‫)"‪name=("chouaib","moad","jarod","somebody","man2008‬‬
‫)'‪search=raw_input('enter the name :‬‬
‫‪i=0‬‬
‫)‪c=len(name‬‬
‫‪while i<c:‬‬
‫‪if name[i]==search:‬‬
‫" ‪print search," exist in the string‬‬
‫;‪break‬‬
‫‪else:‬‬
‫‪print "can't find this name ",search‬‬

‫‪i=i+1‬‬

‫جربوا هذا الكود و ستكتشفون الخطأ بأنفسكم مع أن الكود صحٌح مبة بالمابة و لكنه لٌؤدي‬
‫العمل الذي نرٌد بحٌث أنه ٌموم بطابعة الرسالة عدة مرات عندما ال ٌجد االسم‪.‬‬
‫لماذا ؟ ألن جملة ‪ else‬مكتوبة داخل الحلمة فٌموم البرنامج بالتحمك من الشرط األول‬
‫كود‪PHP:‬‬
‫‪if name[i]==search:‬‬

‫فإن تحمك سٌموم بتنفٌد األمر التالً‬


‫كود‪PHP:‬‬
‫" ‪print search," exist in the string‬‬
‫;‪break‬‬

‫هنا كلو تمام و لكن المشكل ٌبدأ عندما ال ٌتحمك الشرط األول فٌموم البرنامج بالتوجه نحو جملة‬
‫‪else‬لٌطبع العبارة‬
‫كود‪PHP:‬‬
‫‪print "can't find this name ",search‬‬

‫هو ٌموم بطباعتها فعال و لكن المشكل أنه ٌطبعها بعدد المرات التً لم ٌجد اإلسم فً السلسلة(عدم‬
‫تحمك الشرط األول)‬
‫من ٌبحث عن اإلسم األول )‪ (chouaib‬فً السلسلة لن ٌكتشؾ هذا الخطأ و لكن من ٌبحث عن‬
‫اإلسم الثانً و األسماء التً تلٌه سٌكتشؾ الخطا فمثال لو لمنا بالبحث عن إسم )‪(jarod‬‬
‫سٌكون الناتج كالتالً‬

‫‪can't find this name jarod‬‬


‫‪can't find this name jarod‬‬
‫‪jarod exist in the string‬‬

‫فالبرنامج ٌبمى ٌطبع فً رسالة ‪ can't find this name‬فً كل مرة لم ٌتحمك فٌها الشرط‪.‬‬
‫إذا المشكل ٌكمن فً العداد سنموم بالتؽٌر فً الكود للٌال و نجبر البرنامج أن ال ٌطبع رسالة‬
‫‪can't find this name‬حتى ٌكون العداد فً آخر السلسلة (أي أن البحث إنتهى فعال)‬
‫كود‪PHP:‬‬
‫)"‪name=("chouaib","moad","jarod","somebody","man2008‬‬
‫)'‪search=raw_input('enter the name :‬‬
‫‪i=0‬‬
‫)‪c=len(name‬‬
‫‪while i<c:‬‬
‫‪if name[i]==search:‬‬
‫" ‪print search," exist in the string‬‬
‫;‪break‬‬
‫‪else:‬‬
‫‪if i==c-1:‬‬
‫‪print "can't find this name ",search‬‬

‫‪i=i+1‬‬

‫لمدد حللنا المشكل بواسطة هذا الكود‬


‫كود‪PHP:‬‬
‫‪else:‬‬
‫‪if i==c-1:‬‬
‫‪print "can't find this name ",search‬‬
‫‪i=i+1‬‬

‫أي أن رسالة ‪ can't find this name‬لن تظهر حتى ٌكون العداد ألل من طول السلسلة‬
‫بدرجة (أي أنه فً نهاٌتها)‬
‫جربو الكود الجدٌد بنفسكم و حاولو إضافت بعض األشٌاء الجدٌدة علً‬

‫‪nile‬‬

‫مشاهذة مهفه انشخصي‬

‫إرسال رسانت خاصت إنى‪nile‬‬

‫انبحث عن جميع مشاركاث‪nile‬‬

‫أضف ‪ nile‬إنى قائمت األصذقاء‬

‫‪#3‬‬

‫يوو أمس ‪, 10:18 PM‬‬

‫تاريخ انتسجيم‪: Feb 2008‬‬


‫انمشاركاث‪302,1 :‬‬
‫‪nile‬‬
‫االدارة‬

‫الــــــــ ‪Python‬‬ ‫رد‪ :‬دورة فى لغة‬

‫و هذه مجموعة من األمثلة المتعلمة بالسالسل الحرفٌة و التعامل معها تضعنا فً المكان الصحٌح‬
‫لبل البدأ فً الموبم‬

‫لبل أن ننطلك ٌتوجب علٌنا تعرٌؾ الدوال ألننا تكلمنا علٌها كثٌرا دون تعرٌفها‬
‫انشأت الدوال فً مطلع البرمجة اإلجرابٌة و لمد أحدثت طفرة كبٌرة فً مجال البرمجة و لها‬
‫الفضل الكبٌر فً تطوٌر لؽات البرمجة حتى اصبحت كما هً علٌه الٌوم‬
‫و الدالة تموم بجمع عدة أوامر و أعمال معٌنة (إجراءات) لتمدٌم نتٌجة معٌنة فمثال لو أردنا جمع‬
‫عددٌن نكتب‬
‫كود‪PHP:‬‬
‫‪a=int(raw_input(' a:‬‬ ‫))'‬
‫‪b=int(raw_input(' b:‬‬ ‫))'‬
‫) ‪print " %d + %d = %d " %(a, b, a+b‬‬

‫فلو أردنا أن ننشا دالة تموم بجمع عددٌن ٌتوجب علٌنا كتابة هذا الكود داخل تعرٌك الدالة ثم‬
‫نموم بإستدعابها فمط لتعطٌنا النتٌجة‬
‫و لكً ننشا دالة نموم بكتابة العبارة ‪ def‬ثم تلٌها اسم الدالة ثم لوسٌن () ثم النمطتٌن ‪ :‬للداللة‬
‫على أن كل ماٌلً النمطتٌن تابع للدالة‬
‫و ٌصبح البرنامج كالتالً‬
‫كود‪PHP:‬‬
‫‪def add():‬‬
‫‪a=int(raw_input(' a:‬‬ ‫))'‬
‫‪b=int(raw_input(' b:‬‬ ‫))'‬
‫) ‪print " %d + %d = %d " %(a, b, a+b‬‬

‫)(‪add‬‬
‫الحظو جٌدا لمنا بكتابة ‪ def‬حتى ٌعلم المفسر أننا نرٌد تعرٌؾ دالة ثم لمنا بكتابة إسم الدالة‬
‫‪add‬و اإلسم بالطبع إختٌاري تستطٌع تؽٌره و كل ما ٌأتً بعد النمطتٌن ٌعتبر تابع للدالة أو‬
‫بعبارة أخرى ٌعتبر جسم الدالة و األوامر التً ستموم بتنفٌدها هذه الدالة‬
‫فً األخٌر لمنا بإستدعاء الدالة بكتابة إسمها فمط‪.‬‬
‫هذا تعرٌؾ بسٌط عن الدوال و سنعود لها بعد اإلنتهاء من دراسة الموابم بإذن هللا‬

‫نعود اآلن إلى السالسل الحرفٌة‬

‫أول مثال بسٌط جدا سنموم بعكس محتوى سلسلة حرفٌة‬


‫كود‪PHP:‬‬

‫'‪name='chouaib‬‬

‫(‪c=len(name‬‬

‫‪i=c-1‬‬

‫‪while i>=0:‬‬

‫]‪print name[i‬‬

‫‪i=i-1‬‬

‫ٌموم عداد الحلمة بالتمركز على آخر حرؾ فً السلسة ‪ c-1‬و لو كتبنا س سٌحدث خطأ و لن‬
‫ٌعمل البرنامج ألن آخر حرؾ فً أي سلسلة ٌتمركز فً الموضع ‪ c-1‬فالمفسر ٌترن الموضع‬
‫األخٌر لعالمة ‪ /‬و التً تعنً نهاٌة محتوى السلسلة فالجهاز ٌرى هذه السلسة عبارة عن‬
‫‪chouaib / .‬‬

‫و شرط الحلمة أن ٌكون العداد ال ٌمل عن الصفر أي عندما ٌصل العداد إلى موضع الصفر تتولؾ‬
‫الحلمة‪.‬‬

‫بعدها ٌبدأ البرنامج فً النسخ من آخر السلسلة إلى أولها حتى ٌنتفً الشرط‪.‬‬

‫المثال الثانً‬

‫سٌموم هذا بإخذ إسم من المستخدم ثم ٌموم بنسخ عالمة * بٌن كل حرؾ من إسم المستخدم‪.‬‬
‫كود‪PHP:‬‬

‫)' ‪name=raw_input('enter your name :‬‬

‫)‪c=len(name‬‬

‫‪i=0‬‬

‫‪while i<c:‬‬
‫‪print name[i]+'*',‬‬

‫‪i=i+1‬‬

‫ٌموم هذا الكود بنسخ حرؾ من إسم المستخدم ثم ٌضٌؾ له العالمة * و لمد إستعملنا الفاصلة‬
‫لطباعة اإلسم فً سطر واحد‪.‬‬

‫المثال الثالث‬

‫فً المثال التالً ٌموم المستخدم بإدخال إسم ثم ٌحدد ل البرنامج الحرؾ الذي ٌرٌد معرفة عدد‬
‫تكراره فً االسم فٌموم البرنامج بحساب عدد تكرار هذا الحرؾ‬
‫كود‪PHP:‬‬

‫)'‪name=raw_input('enter a name :‬‬

‫)' ‪char=raw_input('enter a character :‬‬

‫)‪c=len(name‬‬

‫‪i, y=0, 0‬‬

‫‪while i<c:‬‬

‫‪if name[i]==char:‬‬

‫‪y=y+1‬‬

‫‪i=i+1‬‬

‫‪print name," contain ",y," :",char‬‬

‫ٌحتوي هذا الكود كما تالحظون على حلمة واحدة وعدادٌن األول إي ٌمكن الحلمة من معاٌنة كل‬
‫محتوى السلسلة و العداد الثانً ٌموم بحساب عدد األحرؾ و هذا بإضالة ‪ 1‬فً كل مرة تجد فٌها‬
‫الحلمة الحرؾ المحدد من طرؾ المستعمل‪ .‬و فً النهاٌة ٌموم البرنامج بنسخ النتابج للمستعمل‪.‬‬

‫مثال الرابع‬
‫ٌموم المثال التالً بنسخ محتوى سلسلة فً سلسلة أخرى فارؼة‬
‫كود‪PHP:‬‬

‫"‪name="my name‬‬

‫""=‪name2‬‬

‫)‪c=len(name‬‬

‫‪i=0‬‬

‫‪while i <c :‬‬


‫]‪name2+= name[i‬‬

‫‪i=i+1‬‬

‫‪print name2‬‬

‫دابما نستعمل الحلمات لكً نتمكن من المرور على كل أجزاء السلسلة ثم نضٌؾ كل حرؾ من‬
‫السلسلة األولى إلى السلسلة الثانٌة(الفارؼة)‬

‫كما نستطٌع عكس اإلسم األول و حفظه فً اإلسم الثانً و ذلن بتؽٌر شرط الحلمة على الشكل‬
‫التالً‬
‫كود‪PHP:‬‬

‫‪i=c-1‬‬

‫‪while i>=0:‬‬

‫]‪name2+= name[i‬‬

‫‪i=i-1‬‬

‫المثال الخامسة‬

‫من المثال السابك نستطٌع عمل برنامج ٌطلب من المستخدم إدخال إسم ثم ٌخبره البرنامج إن كان‬
‫اإلسم ‪ Palindorm‬او ال و اإلسم‪ Palindorme‬هو الذي ال ٌتؽٌر عندما نعكسه‬

‫مثال ‪RADAR OBO SOS‬‬


‫كود‪PHP:‬‬

‫)' ‪name=raw_input('entrer a name‬‬

‫""=‪name2‬‬

‫)‪c=len(name‬‬

‫‪i=c-1‬‬

‫‪while i>=0:‬‬

‫]‪name2=name2+name[i‬‬

‫‪i=i-1‬‬

‫‪if name==name2:‬‬

‫"‪print"palindorme‬‬

‫‪else:‬‬

‫"‪print "non palindorme‬‬


‫سٌموم البرنامج بعكس اإلسم و حفظه فً سلسلة ثانٌة ثم ٌمارن محتواهما فإن تطابما فاإلسم من‬
‫نوع ‪ Palindorme‬و ان لم ٌتطابما فاإلسم لٌس من نوع‪Palindorme .‬‬

‫المثال السادس‬

‫فً هذا المثال سنستعمل سلسلتٌن األولى تموم بحفظ إسم المستخدم و الثانٌة تموم بحفظ كلمة‬
‫المرور الخاصة بالمستعمل‬

‫ثم ٌموم البرنامج بنسخ المحتوى بكتابة اسم المستخدم و كلمة المرور الخاصة به‬
‫كود‪PHP:‬‬

‫)' ‪name=('chouaib','moad','jarod',' somebody‬‬

‫)'‪pas=('123125','85478','99857','88475‬‬

‫)‪c=len(name‬‬

‫)‪b=len(pas‬‬

‫‪i, y=0, 0‬‬

‫‪while i<c and i<b:‬‬

‫"‪print "user :",name[i],‬‬ ‫]‪pass", pas[i‬‬

‫‪i=i+1‬‬

‫لمنا بإنشاء حلمة ذات عدادٌن العداد األول إي ٌموم بتفحص أجزاء سلسلة االسماء و نسخها و‬
‫فً نفس الولت ٌموم العدادا الثانً بفحص كلمات المرور و نسخها بحٌث إذا طبع العداد األول‬
‫اإلسم األول ٌطبع العداد الثانً كلمة المرور الثانٌة و هكذا حتى تنتهً السلسلة‬

‫المثال السابع‬

‫إنطاللا من المثال السابك سنطورفً الكود للٌال بحٌث ٌموم البرنامج بالطلب من المستخدم إدخال‬
‫اإلسم ثم كلمة المرور ثم ٌتحمك البرنامج من صحة المعلومات المدخلة و ٌطبع رسالة للمستخدم‬
‫بنجاح الدخول إذا كانت المعلومات صحٌحة أو رسالة خطأ إذا كان اإلسم أو كلمة المرور خاطبة‬
‫كود‪PHP:‬‬

‫)"‪user=("chouaib","lemdaoui","amir‬‬

‫)"‪pas=("5555","3333","2222‬‬

‫)‪c=len(user‬‬

‫‪i=0‬‬

‫)'‪name=raw_input('entrer votre nom :‬‬

‫)'‪psw=raw_input('entrer notre pass :‬‬


‫‪while i<c:‬‬

‫‪if user[i]==name and pas[i]==psw :‬‬

‫" ‪print "registration ok‬‬

‫‪break‬‬

‫‪else :‬‬

‫‪if i==c:‬‬

‫" ‪print "registration failed‬‬

‫‪i+=1‬‬

‫المثال للثامن‬

‫سنموم فً هذا المثال بإستدعاء مكتبة ‪ string‬حتى نتمكن من اإلستفادة من خصابصها‬

‫سٌموم هذا المثال بالطلب من المستخدم إدخال إسمه ثم ٌحول البرنامج الحرؾ األول من إسم‬
‫المستخدم إلى حرؾ كبٌر و ٌطبع له الناتج‬
‫كود‪PHP:‬‬

‫‪import string‬‬

‫)'‪name=raw_input('entrer your name pls :‬‬

‫)‪i=len(name‬‬

‫]‪name1=string.upper(name[0])+name[1:i‬‬

‫‪print "hellow "+ name1‬‬

‫فً السطر األول لمنا بإستدعاء المكتبة و هً مكتبة تضم الكثٌر من الدوال التً تساعدنا على‬
‫التعامل مع السالسل و لمنا بحجز إسم المستخدم فً المتؽٌر ‪ name‬و فً السطر الرابع لمنا‬
‫بإستعمال دالة ‪ upper‬التً تموم بتحوٌل الحروؾ من ‪ Min‬إلى ‪ Maj‬و لمد لمنا بتحوٌل الحرؾ‬
‫األول فمط ]‪ name[0‬ثم أضفنا إلٌه بالً الحروؾ دون تؽٌٌر‪.‬‬

‫و هذه بعض الدوال الخاصة بالتعامل مع السالسل و ستساعدنا كثٌرا فً المستمبل لدى أرجوا من‬
‫الجمٌع فهمها و سنتطرق لها بالتمارٌن إن شاء هللا‪.‬‬
‫**للبحث عن مكان كلمة معٌنة داخل سلسة نموم بإستعمال الدالة‪find‬‬
‫كود‪PHP:‬‬

‫" ‪name="my name is Chouaib‬‬

‫)'‪print name.find('is‬‬

‫تموم هذه الدالة بنسخ موضع تواجد الكلمة المحددة‪.‬‬

‫**للفصل بٌن عناصر السلسلة بعنصر محدد نموم بإستعمال دالة‪join‬‬


‫كود‪PHP:‬‬

‫'‪Dir='Mes ********s','Python ******er‬‬

‫)‪print 'C :' + '\\'.join(Dir‬‬

‫سٌكون الناتج‬
‫كود‪PHP:‬‬
‫‪C :Mes ********sPython ******er‬‬

‫أو كما فً المثال التالً بحٌث نستعمل الدالة ‪ join‬للفصل بٌن العناصر بكلمة‪or‬‬
‫كود‪PHP:‬‬

‫'‪name='Mohamed','Amine','Samy‬‬

‫)‪print ' or '.join(name‬‬

‫سٌكون الناتج‬
‫كود‪PHP:‬‬
‫‪Mohamed or Amine or Samy‬‬

‫و نستطٌع إستعمال الطرٌمة التالٌة‬


‫كود‪PHP:‬‬

‫'‪name='Mohamed','Amine','Samy‬‬

‫' ‪sep= ' or‬‬

‫)‪print sep.join(name‬‬
‫و عكس هذه الدالة هً دالة ‪ split‬بحٌث أن دالة ‪ split‬تموم بتمسٌم سلسلة حسب العنصر الذي‬
‫نحدده لها ثم تموم بتحوٌل هذه السلسلة إلى لابمة‬

‫ال حظوا المثال التالً‬


‫كود‪PHP:‬‬

‫'‪name='Mohamed or Amine or Samy‬‬

‫)'‪print name.split('or‬‬

‫]‪[/size‬س‪ٛ‬كٌٕ انُاذج]"‪[size="4‬‬

‫]'‪['Mohamed ', ' Amine ', ' Samy‬‬

‫كما أننا نستطٌع إستعمال هذه الدالة لتحوٌل سلسلة إلى لابمة‬
‫كود‪PHP:‬‬

‫' ‪user='user1 user2 user3 user4‬‬

‫)(‪print user.split‬‬

‫سٌكون الناتج‬
‫كود‪PHP:‬‬

‫]'‪['user1', 'user2', 'user3', 'user4‬‬

‫**و إلستبدال كلمة داخل سلسلة بكلمة أخرى نستعمل الدالة‪replace‬‬


‫كود‪PHP:‬‬

‫"‪name="Mohamed Amine Samy‬‬

‫)'‪print name.replace('Samy','Amar‬‬

‫هذه بعض األمثلة عن التعامل مع السالسل الحرفٌة على كل حال سنخصص لها بعض المشارٌع‬
‫البسٌطة حتى نفهمها جٌدا و لكن بعد دراسة الموابم‪ list‬و الموامٌس‬
‫سٌكون درسنا المادم بإذن هللا الموامٌس و التعامل معها‬

‫و هذه مجموعة من األمثلة المتعلمة بالسالسل الحرفٌة و التعامل معها تضعنا فً المكان الصحٌح‬
‫لبل البدأ فً الموبم‬

‫لبل أن ننطلك ٌتوجب علٌنا تعرٌؾ الدوال ألننا تكلمنا علٌها كثٌرا دون تعرٌفها‬
‫انشأت الدوال فً مطلع البرمجة اإلجرابٌة و لمد أحدثت طفرة كبٌرة فً مجال البرمجة و لها‬
‫الفضل الكبٌر فً تطوٌر لؽات البرمجة حتى اصبحت كما هً علٌه الٌوم‬
‫و الدالة تموم بجمع عدة أوامر و أعمال معٌنة (إجراءات) لتمدٌم نتٌجة معٌنة فمثال لو أردنا جمع‬
‫عددٌن نكتب‬
‫كود‪PHP:‬‬
‫‪a=int(raw_input(' a:‬‬ ‫))'‬
‫‪b=int(raw_input(' b:‬‬ ‫))'‬
‫) ‪print " %d + %d = %d " %(a, b, a+b‬‬

‫فلو أردنا أن ننشا دالة تموم بجمع عددٌن ٌتوجب علٌنا كتابة هذا الكود داخل تعرٌك الدالة ثم‬
‫نموم بإستدعابها فمط لتعطٌنا النتٌجة‬
‫و لكً ننشا دالة نموم بكتابة العبارة ‪ def‬ثم تلٌها اسم الدالة ثم لوسٌن () ثم النمطتٌن ‪ :‬للداللة‬
‫على أن كل ماٌلً النمطتٌن تابع للدالة‬
‫و ٌصبح البرنامج كالتالً‬
‫كود‪PHP:‬‬
‫‪def add():‬‬
‫‪a=int(raw_input(' a:‬‬ ‫))'‬
‫‪b=int(raw_input(' b:‬‬ ‫))'‬
‫) ‪print " %d + %d = %d " %(a, b, a+b‬‬

‫)(‪add‬‬

‫الحظو جٌدا لمنا بكتابة ‪ def‬حتى ٌعلم المفسر أننا نرٌد تعرٌؾ دالة ثم لمنا بكتابة إسم الدالة‬
‫‪add‬و اإلسم بالطبع إختٌاري تستطٌع تؽٌره و كل ما ٌأتً بعد النمطتٌن ٌعتبر تابع للدالة أو‬
‫بعبارة أخرى ٌعتبر جسم الدالة و األوامر التً ستموم بتنفٌدها هذه الدالة‬
‫فً األخٌر لمنا بإستدعاء الدالة بكتابة إسمها فمط‪.‬‬
‫هذا تعرٌؾ بسٌط عن الدوال و سنعود لها بعد اإلنتهاء من دراسة الموابم بإذن هللا‬

‫نعود اآلن إلى السالسل الحرفٌة‬

‫أول مثال بسٌط جدا سنموم بعكس محتوى سلسلة حرفٌة‬


‫كود‪PHP:‬‬

‫'‪name='chouaib‬‬

‫(‪c=len(name‬‬

‫‪i=c-1‬‬

‫‪while i>=0:‬‬

‫]‪print name[i‬‬

‫‪i=i-1‬‬

‫ٌموم عداد الحلمة بالتمركز على آخر حرؾ فً السلسة ‪ c-1‬و لو كتبنا س سٌحدث خطأ و لن‬
‫ٌعمل البرنامج ألن آخر حرؾ فً أي سلسلة ٌتمركز فً الموضع ‪ c-1‬فالمفسر ٌترن الموضع‬
‫األخٌر لعالمة ‪ /‬و التً تعنً نهاٌة محتوى السلسلة فالجهاز ٌرى هذه السلسة عبارة عن‬
‫‪chouaib / .‬‬

‫و شرط الحلمة أن ٌكون العداد ال ٌمل عن الصفر أي عندما ٌصل العداد إلى موضع الصفر تتولؾ‬
‫الحلمة‪.‬‬

‫بعدها ٌبدأ البرنامج فً النسخ من آخر السلسلة إلى أولها حتى ٌنتفً الشرط‪.‬‬

‫المثال الثانً‬

‫سٌموم هذا بإخذ إسم من المستخدم ثم ٌموم بنسخ عالمة * بٌن كل حرؾ من إسم المستخدم‪.‬‬
‫كود‪PHP:‬‬

‫)' ‪name=raw_input('enter your name :‬‬

‫)‪c=len(name‬‬

‫‪i=0‬‬

‫‪while i<c:‬‬

‫‪print name[i]+'*',‬‬

‫‪i=i+1‬‬

‫ٌموم هذا الكود بنسخ حرؾ من إسم المستخدم ثم ٌضٌؾ له العالمة * و لمد إستعملنا الفاصلة‬
‫لطباعة اإلسم فً سطر واحد‪.‬‬

‫المثال الثالث‬

‫فً المثال التالً ٌموم المستخدم بإدخال إسم ثم ٌحدد ل البرنامج الحرؾ الذي ٌرٌد معرفة عدد‬
‫تكراره فً االسم فٌموم البرنامج بحساب عدد تكرار هذا الحرؾ‬
‫كود‪PHP:‬‬

‫)'‪name=raw_input('enter a name :‬‬

‫)' ‪char=raw_input('enter a character :‬‬

‫)‪c=len(name‬‬

‫‪i, y=0, 0‬‬

‫‪while i<c:‬‬

‫‪if name[i]==char:‬‬

‫‪y=y+1‬‬

‫‪i=i+1‬‬

‫‪print name," contain ",y," :",char‬‬


‫ٌحتوي هذا الكود كما تالحظون على حلمة واحدة وعدادٌن األول إي ٌمكن الحلمة من معاٌنة كل‬
‫محتوى السلسلة و العداد الثانً ٌموم بحساب عدد األحرؾ و هذا بإضالة ‪ 1‬فً كل مرة تجد فٌها‬
‫الحلمة الحرؾ المحدد من طرؾ المستعمل‪ .‬و فً النهاٌة ٌموم البرنامج بنسخ النتابج للمستعمل‪.‬‬

‫مثال الرابع‬
‫ٌموم المثال التالً بنسخ محتوى سلسلة فً سلسلة أخرى فارؼة‬
‫كود‪PHP:‬‬

‫"‪name="my name‬‬

‫""=‪name2‬‬

‫)‪c=len(name‬‬

‫‪i=0‬‬

‫‪while i <c :‬‬

‫]‪name2+= name[i‬‬

‫‪i=i+1‬‬

‫‪print name2‬‬

‫دابما نستعمل الحلمات لكً نتمكن من المرور على كل أجزاء السلسلة ثم نضٌؾ كل حرؾ من‬
‫السلسلة األولى إلى السلسلة الثانٌة(الفارؼة)‬

‫كما نستطٌع عكس اإلسم األول و حفظه فً اإلسم الثانً و ذلن بتؽٌر شرط الحلمة على الشكل‬
‫التالً‬
‫كود‪PHP:‬‬

‫‪i=c-1‬‬

‫‪while i>=0:‬‬

‫]‪name2+= name[i‬‬

‫‪i=i-1‬‬

‫المثال الخامسة‬

‫من المثال السابك نستطٌع عمل برنامج ٌطلب من المستخدم إدخال إسم ثم ٌخبره البرنامج إن كان‬
‫اإلسم ‪ Palindorm‬او ال و اإلسم‪ Palindorme‬هو الذي ال ٌتؽٌر عندما نعكسه‬

‫مثال ‪RADAR OBO SOS‬‬


‫كود‪PHP:‬‬
‫)' ‪name=raw_input('entrer a name‬‬

‫""=‪name2‬‬

‫)‪c=len(name‬‬

‫‪i=c-1‬‬

‫‪while i>=0:‬‬

‫]‪name2=name2+name[i‬‬

‫‪i=i-1‬‬

‫‪if name==name2:‬‬

‫"‪print"palindorme‬‬

‫‪else:‬‬

‫"‪print "non palindorme‬‬

‫سٌموم البرنامج بعكس اإلسم و حفظه فً سلسلة ثانٌة ثم ٌمارن محتواهما فإن تطابما فاإلسم من‬
‫نوع ‪ Palindorme‬و ان لم ٌتطابما فاإلسم لٌس من نوع‪Palindorme .‬‬

‫المثال السادس‬

‫فً هذا المثال سنستعمل سلسلتٌن األولى تموم بحفظ إسم المستخدم و الثانٌة تموم بحفظ كلمة‬
‫المرور الخاصة بالمستعمل‬

‫ثم ٌموم البرنامج بنسخ المحتوى بكتابة اسم المستخدم و كلمة المرور الخاصة به‬
‫كود‪PHP:‬‬

‫)' ‪name=('chouaib','moad','jarod',' somebody‬‬

‫)'‪pas=('123125','85478','99857','88475‬‬

‫)‪c=len(name‬‬

‫)‪b=len(pas‬‬

‫‪i, y=0, 0‬‬

‫‪while i<c and i<b:‬‬

‫"‪print "user :",name[i],‬‬ ‫]‪pass", pas[i‬‬

‫‪i=i+1‬‬

‫لمنا بإنشاء حلمة ذات عدادٌن العداد األول إي ٌموم بتفحص أجزاء سلسلة االسماء و نسخها و‬
‫فً نفس الولت ٌموم العدادا الثانً بفحص كلمات المرور و نسخها بحٌث إذا طبع العداد األول‬
‫اإلسم األول ٌطبع العداد الثانً كلمة المرور الثانٌة و هكذا حتى تنتهً السلسلة‬

‫المثال السابع‬

‫إنطاللا من المثال السابك سنطورفً الكود للٌال بحٌث ٌموم البرنامج بالطلب من المستخدم إدخال‬
‫اإلسم ثم كلمة المرور ثم ٌتحمك البرنامج من صحة المعلومات المدخلة و ٌطبع رسالة للمستخدم‬
‫بنجاح الدخول إذا كانت المعلومات صحٌحة أو رسالة خطأ إذا كان اإلسم أو كلمة المرور خاطبة‬
‫كود‪PHP:‬‬

‫)"‪user=("chouaib","lemdaoui","amir‬‬

‫)"‪pas=("5555","3333","2222‬‬

‫)‪c=len(user‬‬

‫‪i=0‬‬

‫)'‪name=raw_input('entrer votre nom :‬‬

‫)'‪psw=raw_input('entrer notre pass :‬‬

‫‪while i<c:‬‬

‫‪if user[i]==name and pas[i]==psw :‬‬

‫" ‪print "registration ok‬‬

‫‪break‬‬

‫‪else :‬‬

‫‪if i==c:‬‬

‫" ‪print "registration failed‬‬

‫‪i+=1‬‬

‫المثال للثامن‬

‫سنموم فً هذا المثال بإستدعاء مكتبة ‪ string‬حتى نتمكن من اإلستفادة من خصابصها‬

‫سٌموم هذا المثال بالطلب من المستخدم إدخال إسمه ثم ٌحول البرنامج الحرؾ األول من إسم‬
‫المستخدم إلى حرؾ كبٌر و ٌطبع له الناتج‬
‫كود‪PHP:‬‬
‫‪import string‬‬

‫)'‪name=raw_input('entrer your name pls :‬‬

‫)‪i=len(name‬‬

‫]‪name1=string.upper(name[0])+name[1:i‬‬

‫‪print "hellow "+ name1‬‬

‫فً السطر األول لمنا بإستدعاء المكتبة و هً مكتبة تضم الكثٌر من الدوال التً تساعدنا على‬
‫التعامل مع السالسل و لمنا بحجز إسم المستخدم فً المتؽٌر ‪ name‬و فً السطر الرابع لمنا‬
‫بإستعمال دالة ‪ upper‬التً تموم بتحوٌل الحروؾ من ‪ Min‬إلى ‪ Maj‬و لمد لمنا بتحوٌل الحرؾ‬
‫األول فمط ]‪ name[0‬ثم أضفنا إلٌه بالً الحروؾ دون تؽٌٌر‪.‬‬

‫و هذه بعض الدوال الخاصة بالتعامل مع السالسل و ستساعدنا كثٌرا فً المستمبل لدى أرجوا من‬
‫الجمٌع فهمها و سنتطرق لها بالتمارٌن إن شاء هللا‪.‬‬

‫**للبحث عن مكان كلمة معٌنة داخل سلسة نموم بإستعمال الدالة‪find‬‬


‫كود‪PHP:‬‬

‫" ‪name="my name is Chouaib‬‬

‫)'‪print name.find('is‬‬

‫تموم هذه الدالة بنسخ موضع تواجد الكلمة المحددة‪.‬‬

‫**للفصل بٌن عناصر السلسلة بعنصر محدد نموم بإستعمال دالة‪join‬‬


‫كود‪PHP:‬‬

‫'‪Dir='Mes ********s','Python ******er‬‬

‫)‪print 'C :' + '\\'.join(Dir‬‬

‫سٌكون الناتج‬
‫كود‪PHP:‬‬
‫‪C :Mes ********sPython ******er‬‬
‫أو كما فً المثال التالً بحٌث نستعمل الدالة ‪ join‬للفصل بٌن العناصر بكلمة‪or‬‬
‫كود‪PHP:‬‬

‫'‪name='Mohamed','Amine','Samy‬‬

‫)‪print ' or '.join(name‬‬

‫سٌكون الناتج‬
‫كود‪PHP:‬‬
‫‪Mohamed or Amine or Samy‬‬

‫و نستطٌع إستعمال الطرٌمة التالٌة‬


‫كود‪PHP:‬‬

‫'‪name='Mohamed','Amine','Samy‬‬

‫' ‪sep= ' or‬‬

‫)‪print sep.join(name‬‬

‫و عكس هذه الدالة هً دالة ‪ split‬بحٌث أن دالة ‪ split‬تموم بتمسٌم سلسلة حسب العنصر الذي‬
‫نحدده لها ثم تموم بتحوٌل هذه السلسلة إلى لابمة‬

‫ال حظوا المثال التالً‬


‫كود‪PHP:‬‬

‫'‪name='Mohamed or Amine or Samy‬‬

‫)'‪print name.split('or‬‬

‫]‪[/size‬س‪ٛ‬كٌٕ انُاذج]"‪[size="4‬‬

‫]'‪['Mohamed ', ' Amine ', ' Samy‬‬

‫كما أننا نستطٌع إستعمال هذه الدالة لتحوٌل سلسلة إلى لابمة‬
‫كود‪PHP:‬‬

‫' ‪user='user1 user2 user3 user4‬‬

‫)(‪print user.split‬‬

‫سٌكون الناتج‬
‫كود‪PHP:‬‬

‫]'‪['user1', 'user2', 'user3', 'user4‬‬


‫**و إلستبدال كلمة داخل سلسلة بكلمة أخرى نستعمل الدالة‪replace‬‬
‫كود‪PHP:‬‬

‫"‪name="Mohamed Amine Samy‬‬

‫)'‪print name.replace('Samy','Amar‬‬

‫هذه بعض األمثلة عن التعامل مع السالسل الحرفٌة على كل حال سنخصص لها بعض المشارٌع‬
‫البسٌطة حتى نفهمها جٌدا و لكن بعد دراسة الموابم‪ list‬و الموامٌس‬
‫سٌكون درسنا المادم بإذن هللا الموامٌس و التعامل معها‬

‫لدٌنا الٌوم ثالث تمارٌن شاملة بإذن هللا تعطٌنا نظرة بسٌطة عن التعامل مع كل ما درسناه سابما و تمهدنا‬
‫لدراسة أمور أكثر تمدما فً الدروس المادمة و أرٌد التنبٌه على اإلكثار من األمثلة و التعدٌل علٌها و تجرٌب‬
‫كل ماراٌناه من دوال و تطبٌمها ألن البرمجة ال تتعلم إال بالتطبٌك أما الحفظ فلن ٌفٌدن فً شٌا إذا أخً‬
‫المارئ نصٌحة لم بإضافة أشٌاء جدٌدة على االمثلة التً فً الدورة و ؼٌر بعض األشٌاء علٌها واكتب‬
‫مالحظاتن علٌها ألن هذا األمر مهم جدا‬

‫التمرٌن األول‬
‫فكرة هذا الترٌن تتمثل فً إنشاء لاعدة بٌنات لحفظ المعلومات و ٌمثل هذه الماعدة لاموس نموم بإنشابه و‬
‫نفرض مثال أن هذه الماعدة تستعمل لحفظ معلومات خاصة بالطالب ٌستعملها األستاذ لحفظ إسم الطالب و‬
‫النمطة المتحصل علٌها‪.‬‬

‫سنموم بإنشاء بعض الدوال التً تساعد األستاذ على عمله و ٌحتوي هذا الكود على أربع دوال‬

‫الدالة )(‪ get_name‬تموم بأخذ اإلسم و النمطة و حفظها داخل الماموس (لاعدة البٌانات)‬
‫الدالة )(‪del_name‬تموم بحذؾ بٌانات طالب معٌن ٌموم بتحدٌده األستاذ‬
‫الدالة )(‪show_dico‬تموم بإظهار كل المعلومات المحجوزرة داخل الماعدة‬
‫الدالة )(‪ search_name‬تموم بالبحث داخل الماعدة عن طالب معٌن و إظها البٌانات الخاصة به‬

‫إذن فالكود ممسم إلى أربع دوال لكل دالة عمل معٌن تموم به و عند اإلنتهاء من برمجة هذه الدوال نموم‬
‫بإستدعابها بإسمها فمط‬

‫الكود‬

‫أوال نموم بتعرٌؾ المتؽٌرات األساسٌة للبرنامج و التً ستستعملها كل الدوال‬


‫كود‪PHP:‬‬
‫‪import string‬‬
‫}{=‪database‬‬
‫‪alpha=string.letters‬‬
‫‪digi=string.digits‬‬

‫إستدعٌنا مكتبة ‪ string‬لكً نستفٌد من مزاٌها ثم لمنا بإنشاء لاموس جدٌد إسمه ‪ٌ database‬موم بحجز‬
‫البٌانات المدخلة من طرؾ األستاذ ثم لمنا بتعرٌؾ متؽٌرٌن ‪ alpha‬و ‪ digi‬بحٌث أن ‪ٌ alpha‬حتوي على‬
‫كل الحروؾ الفرنسٌة فلمد استعملنا دالة ‪ letters‬التً تنتمً لمكتبة ‪ string‬و تموم هذه الدالة بإسناد كل‬
‫الحروؾ األبجدٌة للمتؽٌر ‪alpha‬نفس الشٌا بالنسبة ‪ digi‬بحٌث أن الدالة ‪ digits‬تموم بإسناد كل األرلام‬
‫لهذا المتؽٌر و سنرى الفابدة المرجوة من هذا العمل‬

‫أوال الدالة)(‪get_name‬‬
‫كود‪PHP:‬‬
‫‪def get_name():‬‬
‫‪i=0‬‬
‫))"‪nb=int(raw_input("number of student :‬‬
‫‪while i<nb :‬‬
‫)"‪name=raw_input(" name :‬‬
‫)"‪note=raw_input(" note :‬‬
‫‪if (name[0] not in alpha) or (note[0] not‬‬ ‫‪in digi):‬‬
‫"‪print " erreur invalid name or note‬‬
‫‪continue‬‬
‫‪else:‬‬
‫}‪info={name : note‬‬
‫)‪database.update(info‬‬
‫‪i+=1‬‬

‫إسم الدالة ؼٌر مهم بحٌث أنن تستطٌع تؽٌر كما تشاء‪.‬‬
‫أوال عرفنا العداد ‪ i‬و أسندنا له لٌمة الصفر ثم طلبنا من المستخدم إدخال عدد الطالب ‪ nb‬أو عدد البٌانات‬
‫التً ٌرٌد إدخالها لكً نموم بعمل حلمة ٌتكرر عملها حسب عدد البٌانات‬
‫و انظرو بعد ذلن ٌبدئ عمل الحلمة بحٌث ان شرط الحلمة أن ٌبمى العداد ألل من عدد الطالب‬
‫بعد ذلن ٌطلب البرنامج من المستخدم إدخال إسم الطالب و النمطة المتحصل علٌها و هنا تأتً فابدة المتؽٌر‬
‫‪alpha‬و ‪ digi‬أنظرو جٌدا إلى الجملة الشرطٌة‬
‫كود‪PHP:‬‬
‫‪if (name[0] not in alpha) and (note[0] not‬‬ ‫‪in digi):‬‬

‫لمنا بإختبار اإلسم و النمطة بحٌث لو أدخل المستخدم إسم الطالب وكان أول حروفه رلم سٌطبع البرنامج‬
‫رسالة خطأ للمستخدم ألنه من ؼٌر المعمول أن ٌكون إسم طالب ٌبدئ برلم و نفس الشٌا بالنسبة للنمطة‬
‫بحٌث لو أدخل المستخدم بدل النمطة حرؾ سٌموم البرنامج بإرسال رسالة خطا و هنا عند حدوث الخطأ لن‬
‫ٌتولؾ البرنامج او باألحرى لن تتولؾ الحلمة بل ستعٌد الطلب من المستخدم وهذا بواسطة العبارة‬
‫كود‪PHP:‬‬
‫‪continue‬‬

‫أي استمر بإعادة هذا المسم من الحلمة حتى تكون المدخالت صحٌحة و لو أردنا مثال أن تتولؾ الحلمة تماما و‬
‫ٌتولؾ البرنامج عند حدوث خطأ فً المدخالت نموم بإستبدال عبارة ‪continue‬ب عبارة‪break‬‬
‫كود‪PHP:‬‬
‫‪else:‬‬
‫}‪info={name : note‬‬
‫)‪database.update(info‬‬
‫‪i+=1‬‬

‫هنا إذا كانت المدخالت صحٌحة ٌموم المتؽٌر ‪info‬بحجز اإلسم و النمطة و ٌكون اإلسم و النمطة مترابطان مع‬
‫بعضهما البعض بعد ذلن نحجز هذه المعلومات داخل الماموس بواسطة الدالة ‪update‬‬
‫و هكذا ستستمر هذه الحلمة حتى ٌبلػ العداد إي رلم الطالب‪.‬‬
‫ثانٌا الدالة)(‪del_name‬‬
‫كود‪PHP:‬‬
‫‪def del_name():‬‬
‫)"‪del_n=raw_input(" name of student :‬‬
‫‪if del_n in database :‬‬
‫"‪print " delte " + database.pop(del_n)+ "...............‬‬
‫‪else:‬‬
‫"‪print" unknowable student‬‬

‫كما للنا سابما تموم هذه الدالة بحذؾ بٌانات طالب معٌن ٌحٌث أنها تطلب من المستخدم إدخال إسم الطالب‬
‫المراد حذفه ثم تموم بالبحث داخل الماموس إن كان هذا اإلسم موجود فعال داخل الماموس فإن وجد ستموم‬
‫بحذفه بواسطة الدالة‪pop‬‬
‫و إن لم ٌوجد سٌموم البرنامج بتنبٌه المستخدم أن بٌانات الطالب ؼٌر متوفرة داخل الماعدة‬

‫ثالثا الدالة)(‪show_dico‬‬
‫كود‪PHP:‬‬
‫‪def show_dico():‬‬
‫‪for a,b in database.items():‬‬
‫‪print "name " + a + " : " +‬‬ ‫‪"note " + b‬‬

‫لمنا بإستعمال حلمة ‪ for‬فً هذه الدالة و لمد لمنا بتمسٌم الماموس إلى ثنابٌات (حولناه إلى لابمة )ثم تموم‬
‫الدالة بطباعة اإلسم و المتمثل بالمتؽٌر ‪ a‬و العالمة المتمثلة بالمتؽٌر ‪b‬‬

‫رابعا الدالة)(‪search_name‬‬
‫كود‪PHP:‬‬
‫‪def search_name():‬‬
‫)" ‪name=raw_input("name of student :‬‬
‫‪if name in database:‬‬
‫)‪print "result :" + database.get(name‬‬
‫‪else:‬‬
‫"‪print"unknowable student‬‬

‫تموم هذه الدالة بالبحث عن بٌانات طالب معٌن و هذا بواسطة العبارة‬
‫كود‪PHP:‬‬
‫‪if name in database:‬‬

‫فلو وجد هذا اإلسم سٌموم البرنامج بطباعة إسم و نمطة الطالب للمستخدم و إن لم ٌوجد سٌموم البرنامج‬
‫بتنبٌه المستخدم بأن اإلسم ؼٌر معروؾ داخل الماعدة‪.‬‬

‫فً هذه المرحلة أنهٌنا برمجة الدوال و ما بمً إال استدعابها بواسطة اسمها فمط‬

‫فمثال نكتب‬
‫)(‪get_name‬‬
‫سٌموم البرنامج باستدعاء هذه الدالة و ستموم بتنفٌد عملها و لو كتبنا بعدها الدالة الثانٌة‬
‫)(‪del_name‬‬
‫ستموم هً األخرى بتنفٌد عملها بعد الدالة األولى حسب الترتٌب‬
‫و تستطٌع أخً المارئ بعمل برنامج ربٌسً بعد هذه الدوال فإذا كان المستخدم ٌرٌد إدخال بٌنات تموم‬
‫باستدعاء الدالة )(‪ get_name‬وإذا أراد البحث عن البٌانات تموم باستدعاء الدالة )(‪ search_name‬و‬
‫هكذا‬
‫وتستطٌع عمل البحة للمستخدم تسهل علٌه اإلختٌار‬
‫مثال‬
‫كود‪PHP:‬‬
‫"‪print " (1): add name \n (2): search \n (3): delte \n (4): show‬‬

‫‪choic=raw_input(' Choic‬‬ ‫)'‪:‬‬


‫‪if choic=='1':‬‬
‫)(‪get_name‬‬
‫‪elif choic=='2':‬‬
‫)(‪search_name‬‬
‫‪elif choic=='3':‬‬
‫)(‪del_name‬‬
‫‪elif choic=='4':‬‬
‫)(‪show_dico‬‬

‫ٌكتب هذا الكود بعد اإلنتهاء من أكواد الدوال‬

‫نكون هنا لد انهٌنا المثال األول و فً الحمٌمة سنعود لهذا المثال بالذات عند دراسة الملفات ألن عمل هذا‬
‫المثال مرتبط بالملفات‪.‬‬

‫بمً لدٌنا تمرٌنٌن اثنٌن سنتعلم من خاللهما كٌفٌة عمل مكتبة و استدعاء الدوال من خاللها و سنطبك مثال‬
‫على هذا الكود الذي درسناه‪.‬‬

‫‪nile‬‬

‫مشاهذة مهفه انشخصي‬

‫إرسال رسانت خاصت إنى‪nile‬‬

‫انبحث عن جميع مشاركاث‪nile‬‬

‫أضف ‪ nile‬إنى قائمت األصذقاء‬

‫‪#4‬‬

‫يوو أمس ‪, 10:44 PM‬‬

‫تاريخ انتسجيم‪: Feb 2008‬‬


‫انمشاركاث‪302,1 :‬‬
‫‪nile‬‬
‫االدارة‬

‫الــــــــ ‪Python‬‬ ‫رد‪ :‬دورة فى لغة‬

‫طرٌمة عمل مكتبة و استدعابها‬

‫لم بكتابة الكود الخاص بالدوال على المفسر ثم اعطه اسما مثال ‪ student‬و لم بحفظه فً أي‬
‫مكان بصٌؽة ‪ .py‬أي أن الملؾ ٌصبح ‪ student.py‬و بعد ذلن لم بنسخ هذا الملؾ و الصمه‬
‫داخل ملؾ ‪ Lib‬الذي تجده داخل مجلد ‪ python25‬و ٌحتوي مجلد ‪ Lib‬على كل المكاتب التً‬
‫ٌستعملها المفسر و كل ملؾ تضعه داخل هذا المجلد سٌعتبره المفسر مكتبة‬
‫بعد ذلن افتح المفسر ثانٌتا و لم باستدعاء هذه المكتبة التً انشبتها بواسطة العبارة‬

‫كود‪PHP:‬‬
‫‪Import student‬‬

‫ثم اعد كتابة الكود الذي رأٌناه باألعلى الخاص بالبرنامج الربٌسً‬

‫كود‪PHP:‬‬
‫‪import student‬‬
‫‪print " (1): add name \n (2): search \n (3): delte \n (4): show \(5):‬‬
‫"‪Quit‬‬

‫)'‪choic=raw_input(' Choic :‬‬


‫‪while choic!='5':‬‬
‫‪if choic=='1':‬‬
‫)(‪student.get_name‬‬
‫‪elif choic=='2':‬‬
‫)(‪student.search_name‬‬
‫‪elif choic=='3':‬‬
‫)(‪student.del_name‬‬
‫‪elif choic=='4':‬‬
‫)(‪student.show_dico‬‬
‫)'‪choic=raw_input(' Choic :‬‬

‫و لمد بالتعدٌل علٌه بحٌث انه سٌبمى ٌنتظر أوامر المستخدم حتى ٌطلب هذا األخٌر الخروج من‬
‫البرنامج و ذلن بإدخال رلم ‪5‬‬

‫و أبشر ٌا أخً ألنن صرت تعرؾ كٌؾ تنشا مكتبة و تزٌد فً لؽة الباٌثون أشٌاء جدٌدة‬

‫‪nile‬‬

‫مشاهذة مهفه انشخصي‬

‫إرسال رسانت خاصت إنى‪nile‬‬

‫انبحث عن جميع مشاركاث‪nile‬‬

‫أضف ‪ nile‬إنى قائمت األصذقاء‬

‫‪#5‬‬

‫يوو أمس ‪, 10:56 PM‬‬

‫تاريخ انتسجيم‪: Feb 2008‬‬


‫انمشاركاث‪302,1 :‬‬
‫‪nile‬‬
‫االدارة‬

‫الــــــــ ‪Python‬‬ ‫رد‪ :‬دورة فى لغة‬

‫]التمرٌن الثانً‬

‫فكرة هذا التمرٌن تكمن فً برمجة اربع أوامر ‪ ftp‬ثم التعامل مع هذه األوامر‬
‫فموم بإنشاء لابمة تلعب دور السٌرفر بحٌث سٌحجز البرنامج الملفات التً بعتها العمٌل لهذا‬
‫السٌرفر و تمثل هذه األوامر أربع دوال و هً‬

‫)(‪open_con‬‬
‫كود‪PHP:‬‬
‫‪def open_con():‬‬
‫)'‪add=raw_input('TO :‬‬
‫‪if add[0:2]in 'www' and add[-3] in 'com':‬‬
‫)‪print "Conneecter a %s" %(add‬‬
‫‪else:‬‬
‫"‪print "address invalide‬‬

‫تموم هذه الدالة بفتح اإلتصال مع السٌرفر‬

‫نموم أوال بالطلب من المستخدم إدخال عنوان الجهاز أو المولع الذي ٌرٌد اإلتصال به و حجزنا‬
‫هذا العنوان داخل المتؽٌر ‪ add‬ثم نموم بإختبار هذا العنوان بواسطة جملة شرطٌة‬
‫كود‪PHP:‬‬
‫‪if add[0:2]in 'www' and add[-3] in 'com':‬‬

‫كود‪PHP:‬‬
‫‪َٓ ٔ com‬ا‪ٚ‬رّ ْ‪ www ٙ‬فإرا كاَد تذا‪ٚ‬ح انعُٕاٌ ْ‪ٙ‬‬
‫فٓزا ‪ٚ‬عُ‪ ٙ‬أٌ انعُٕاٌ صذ‪ٛ‬خ فهٕ ذالدظٕا يع انعثاسج ج‪ٛ‬ذا سرشٌٔ أَُ‬
‫ا قطعُا انعُٕاٌ إنٗ قسً‪ ٍٛ‬انقسى األٔل ‪ٚ‬ذرٕ٘ عهٗ انثالز دشٔف األٔن‬
‫ٖ يٍ انعُٕاٌ‬

‫كود‪PHP:‬‬
‫]‪add[0:2‬‬

‫و المسم الثانً ٌحتوي على الثالث حروؾ األخٌرة من العنوان‬


‫كود‪PHP:‬‬
‫]‪add[-3‬‬

‫و دابما أأكد على معالجة مدخالت المستخدم فٌجب علٌن أخً المارئ أن تعتاد على هذه الطرق‬
‫الن البرنامج لو تمبل كل ما ٌدخله المستخدم ستكون العوالب وخٌمة لدى ضع فً بالن دابما كل‬
‫اإلحتماالت الممكنة الولوع و عالجها كلها حتى ٌكون برنامجن متكامل و منطمً‬
‫بعد التحمك من العنوان نموم بطبع رسالة للمستخدم تعلمه أن اإلتصال نجح و لو حدث خطأ فً‬
‫اإلتصال كإدخال عنوان خاطا سٌموم البرنامج بطباعة رسالة خطا للمستخدم‬
‫)‪mkdir(host‬‬

‫كود‪PHP:‬‬
‫‪def mkdir(host):‬‬
‫)" ‪nf=raw_input("nom de fichier‬‬
‫‪if nf not in host:‬‬
‫)‪host.append(nf‬‬
‫‪else:‬‬
‫"‪print" le fichier est d?ja exist dans le repertoire local‬‬

‫األمر ‪ mkdir‬تجده فً لٌنٌكس و ‪ ftp‬و هو عبارة عن أمر ٌموم بإنشاء مجلد جدٌد و هذه هً‬
‫وضٌفته فً هذا البرنامج بحٌث أن هذه الدالة تموم بالطلب من المستخدم بإدخال إسم الملؾ الذي‬
‫ٌرٌد إنشابه و حجزنا إسم الملؾ فً المتؽٌر ‪ nf‬ثم نموم بالتحمك من عدم وجود الملؾ داخل‬
‫السٌرفر‬
‫كود‪PHP:‬‬
‫‪if nf not in host:‬‬

‫فإذا تحمك الشرط تموم الدالة بإنشاء عنصر جدٌد داخل المابمة بواسطة الدالة ‪ uppend‬أما‬
‫عن كان العنصر متواجد أصال داخل المابمة سٌموم البرنامج بتنبٌه المستخدم بأن الملؾ متواجد‬
‫أصال داخل المجلد‬
‫و نالحظ أن الدالة تحتوي بٌن الموسٌن الخاصٌن بها على كلمة ‪ host‬و التً سنعوضها فً‬
‫الكود الربٌسً ب إسم المابمة فتموم الدالة بتعوٌض ‪ host‬ب إسم المابمة و فً الحمٌمة تعتبر‬
‫‪host‬تعدٌل‪ parameter‬خاص بالدالة ‪ mkdir‬و سندرس هذه األمور فً المرحلة المادمة‬

‫)‪rmdir(host‬‬
‫كود‪PHP:‬‬
‫‪def rmdir(host):‬‬
‫)" ‪nf=raw_input("nom de fichier‬‬
‫‪if nf in host:‬‬
‫)‪host.remove(nf‬‬
‫‪else:‬‬
‫‪print" le fichier n'exist pas‬‬ ‫"‪dans le repertoire local‬‬

‫عكس الدالة السابمة تماما تموم هذه الدالة بحذؾ ملؾ من المجلد الربٌسً و لكن بعد التحمك من‬
‫وجوده فلو وجد هذا العنصر ستموم الدالة بحذفه بواسطة الدالة ‪ remove‬و إن كان ؼٌر‬
‫موجود داخل المابمة سٌنبه البرنامج المستخدم ان الملؾ ؼٌر موجود داخل السٌرفر‬

‫)‪dir_rep(host‬‬
‫كود‪PHP:‬‬
‫‪def dir_rep(host):‬‬
‫‪print host‬‬

‫عمل هذه الدالة بسٌط جدا بحٌث أنها تموم بطبع محتواٌات المجلد‬

‫البرنامج الربٌس‬
‫لم بحفظ هذا الملؾ داخل المجلد ‪ Lib‬بإسم ‪ ftp‬ثم لم بفتح البرنامج و استدعً هذا الملؾ و كما‬
‫للنا سابما سٌعتبر البرنامج هذا الملؾ على أنه مكتبة‬
‫كود‪PHP:‬‬
‫‪import ftp‬‬
‫][=‪serveur‬‬

‫)'‪cmd=raw_input('Command :‬‬
‫‪while cmd !='bye':‬‬

‫‪if cmd=='open':‬‬
‫)(‪ftp.open_con‬‬

‫‪elif cmd=='mkdir':‬‬
‫)‪ftp.mkdir(serveur‬‬

‫‪elif cmd=='rmdir':‬‬
‫)‪ftp.rmdir(serveur‬‬

‫‪elif cmd=='dir':‬‬
‫)‪ftp.dir_rep(serveur‬‬

‫)'‪cmd=raw_input('Command :‬‬

‫لمنا بإنشاء لابمة جدٌدة ‪ serveur‬و التً ستلعب دور السٌرفر ‪ serveur‬بعد ذلن سٌطلب‬
‫البرنامج من المستخدم إدخال األمر الذي ٌرٌده و سٌبمى هكذا حتى ٌدخل البرنامج األمر ‪ bye‬و‬
‫الذي ٌعنً ‪exit‬‬

‫و ال حظوا جٌدا عند استدعا أي دالة نموم بإدراج اسم المابمة ‪ serveur‬بٌن لوسٌن فتموم‬
‫الدالة بتعوٌض هذا األخٌر فً مكان ‪ host‬اي أن كل الوضابؾ التً اسندناها ل ‪ host‬ستحل‬
‫مكانها المابمة‪serveur‬‬

‫هذا كل شٌا بالنسبة لهذا المثال و سنعود له أٌضا فً الدروس المتمدمة بإذن هللا و سٌكون فً‬
‫تلن المرحلة عبارة عن برنامج ‪ ftp‬حمٌمً‬

‫بمً لنا مثال أخٌر لبل أن ننطلك فً مرحلة جدٌدة فمن لدٌه سؤال أو استفسار حول كل مارأٌناه‬
‫سابما ال ٌتردد بطرحه‬

‫تم بحمد هللا‬

‫‪nile‬‬

‫مشاهذة مهفه انشخصي‬

‫إرسال رسانت خاصت إنى‪nile‬‬

‫انبحث عن جميع مشاركاث‪nile‬‬

‫أضف ‪ nile‬إنى قائمت األصذقاء‬


‫‪#6‬‬

‫يوو أمس ‪, 11:00 PM‬‬

‫تاريخ انتسجيم‪: Feb 2008‬‬


‫انمشاركاث‪302,1 :‬‬
‫‪nile‬‬
‫االدارة‬

‫الــــــــ ‪Python‬‬ ‫رد‪ :‬دورة فى لغة‬

‫أخً الكرٌم الصور التً وضعتها لتوضٌح فمط و هذا المثال هو نفسه التمٌرن األول الذي عملناه (مشاركة رلم‬
‫‪ )40‬هو نفسه التمرٌن الموجود على الصورة و معن حك أخً الكرٌم أنا لم أنتبه على هذا لبل وضع الصور‬
‫على كل حال انت اتبع الصور‬
‫لم بفتح البرنامج و لم بكتابة كل الدوال التً ربٌناها فً التمرٌن األول ثم احفظ الملؾ داخل المجلد ‪ Lib‬ثم‬
‫افتح البرنامج ثانٌتا و اكتب الكود الربٌسً الذي تجده تحت الصور]‪[/size‬‬
‫كود‪PHP:‬‬
‫‪import student‬‬
‫‪print " (1): add name \n (2): search \n (3): delte \n (4): show \(5):‬‬
‫"‪Quit‬‬

‫)'‪choic=raw_input(' Choic :‬‬


‫‪while choic!='5':‬‬
‫‪if choic=='1':‬‬
‫)(‪student.get_name‬‬
‫‪elif choic=='2':‬‬
‫)(‪student.search_name‬‬
‫‪elif choic=='3':‬‬
‫)(‪student.del_name‬‬
‫‪elif choic=='4':‬‬
‫)(‪student.show_dico‬‬
‫)'‪choic=raw_input(' Choic :‬‬

‫اما ما ٌخص التمارٌن و التمٌم فأنا أعلم هذا و سنتحدث حول هذا الموضوع بعد نهاٌة هذه‬
‫المرحلة انت اآلن ماعلٌن إال فهم األمثلة جٌدا و حاول التؽٌر على هذه األمثلة و اضافة اشٌاء‬
‫جدٌدة علٌها‬
‫و أي التراح ‪ ,‬سؤال ‪ ,‬استفسار ‪,‬أنا فً الخدمة‬

‫‪nile‬‬

‫مشاهذة مهفه انشخصي‬

‫إرسال رسانت خاصت إنى‪nile‬‬

‫انبحث عن جميع مشاركاث‪nile‬‬

‫أضف ‪ nile‬إنى قائمت األصذقاء‬

‫‪#7‬‬

‫يوو أمس ‪, 11:02 PM‬‬

‫تاريخ انتسجيم‪: Feb 2008‬‬


‫انمشاركاث‪302,1 :‬‬
‫‪nile‬‬
‫االدارة‬

‫الــــــــ ‪Python‬‬ ‫رد‪ :‬دورة فى لغة‬

‫التمرٌن الثالث‬

‫هو تمرٌن بسٌط ال ٌحتوي على شفرات طوٌلة و لكنه سٌعلمنا كٌفٌة التحكم فً المدخالت و‬
‫تحوٌلها من صٌؽة إلى أخرى و توجٌهها إلى آلداء الخدمة التً نرٌدها‬
‫التمرٌن عبارة عن لعبة لؽوٌة نمو بإدخال كلمة مثال ‪ Python‬ثم ٌطلب البرنامج من المستخدم‬
‫ادخال حرؾ فإذا كان الحرؾ ٌنتمً للكلمة سٌظهر مكان الحرؾ و البالً مخفً و هكذا ٌبمى‬
‫المستخدم ٌخمن و ٌجرب الحروؾ حتى تكتمل الكلمة‬
‫مثال‬
‫لو ادخل المستخدم حرؾ ‪ t‬سٌنسخ البرنامج الصٌؽة التالٌة‬
‫***‪**t‬‬
‫ثم ٌعٌد الكرة فلو ادخل حرؾ ‪ p‬تصبح الصٌؽة‬
‫***‪P*t‬‬
‫كما للت المثال بسٌط و لكنه ٌفٌدنا جدا فً التعامل مع الكلمات و التالعب بها ألنن أخً المارئ‬
‫ستجد نفسن امام مشاكل ؼرٌبة جدا فً المستمبل تتطلب منن معرفة جٌدة بتمنٌات التعامل مع‬
‫الدوال و تسٌرها حسب طلبن‬
‫شرح البرنامج‬
‫سنحتاج أوال لتعرٌؾ المتؽٌر الذي ٌحجز الكلمة المدخلة من طرفنا و سنسمٌه ‪word‬‬
‫عندما ٌدخل المستخدم الكلمة ستكون عبارة عن سلسلة ‪ string‬أي ستكون بالصٌؽة التالٌة‬
‫‪python‬سٌتوجب علٌنا تمسٌمها و تحوٌلها إلى لابمة ‪ list‬على الصٌؽى التالٌة‬
‫]’‪[‘p’,’y’,’t’,’h’,’o’,’n‬حتى نتمكن من التعامل معها و سنسمً المتؽٌر الذي ٌحجز هذه‬
‫الصٌؽة ‪ word_split‬و سنعرفه على انه لابمة فارؼة‬
‫][=‪Word_split‬‬
‫سنحتاج اٌضا لمابمة تحتوي على نجوم "*" بعدد حروؾ الكلمة و سنسمٌها ‪ etoile‬بحٌث هً‬
‫المابمة المستكلفة بطباعة النتابج و كما للت ٌجب أن ٌكون عدد النجوم بنفس عدد حروؾ الكلمة‬
‫مثال ]’‪ [‘p’,’y’,’t’,’h’,’o’,’n‬سٌمابلها]’*’‪[‘*’,’*’,’*’,’*’,’*’,‬‬
‫اآلن نفرض أننا ادخلنا الكلمة لكً نموم بتحوٌلها إلى لابمة ٌجب ان ندخل علٌها بعض التعدٌالت‬
‫لدى ٌتوجب علٌنا تعرٌؾ متؽٌر آخر ٌلعب دور الواسطة بٌنهما و سنسمٌه ‪ tampon‬أي المتؽٌر‬
‫المؤلت‬
‫مثال‬
‫سندخل كلمة‪python‬‬
‫ستكون هذه الكلمة عبارة عن ‪ string‬أي» ‪« pytohn‬‬
‫ٌجب ان نحولها لمابمة و لتحوٌلها ٌجب ادخال عنصر وسٌط بٌن احرؾ الكلمة ثم نمسمها‬
‫بواسطته‬
‫كٌؾ‬
‫سنعمل حلمة تضٌؾ بٌن كل حرؾ من حروؾ هذه الكلمة عالمة | فتصبح الكلمة على الشكل‬
‫التالً‬
‫» ’‪« ‘p|y|t|h|o|n‬‬
‫ثم نموم بتحوٌلها إلى لابمة و ٌكون التمسٌم على أساس هذه العالمة و ٌكون التمسٌم بواسطة دالة‬
‫‪split‬التً رأٌناها سابما‬
‫)'|'(‪word_split= tampon.split‬‬
‫كل هذا األمر ٌعتبر تهٌبة للبرنامج ثم ٌأتً المسم الربٌسً‬
‫إذا نلخص‬
‫ندخل كلمة ٌكون نوعها ‪string‬‬
‫نأخذ هذه الكلمة و نضٌؾ عالمة | بٌن حروفها‬
‫ننشا لابمة تحتوي على عالمات نجوم بعدد هذه المابمة‬
‫نحول الكلمة إلى لابمة‬
‫و نبدء فً التعامل مع هذه المابمة‬

‫كود البرنامج‬
‫كود‪PHP:‬‬
‫)' ‪word=raw_input(' word :‬‬
‫][ ‪word_split, etoile=[],‬‬
‫''=‪tampon‬‬
‫‪i, l, y=0, 0, 0‬‬

‫)‪c=len(word‬‬

‫‪while y<c:‬‬
‫)'*'(‪etoile.append‬‬
‫‪y+=1‬‬

‫‪while i<c:‬‬
‫"|"‪tampon+=word[i]+‬‬
‫‪i+=1‬‬

‫)'|'(‪word_split= tampon.split‬‬

‫‪while l<c+3:‬‬
‫)"‪car=raw_input(" char :‬‬
‫‪if car in word_split and car not in etoile :‬‬
‫)‪ind=word_split.index(car‬‬
‫)‪etoile.insert(ind,car‬‬
‫)]‪etoile.remove(etoile[c‬‬
‫‪print etoile‬‬
‫‪if etoile[0:c]==word_split[0:c]:‬‬
‫"*******‪print "***** YoU WiN‬‬
‫‪break‬‬

‫‪l+=1‬‬

‫شرح الكود‬

‫أوال لمنا بطلب الكلمة ‪ word‬ثم لمنا بتعرٌؾ الموابم ‪ word_split‬التً ستحجز الكلمة بعد‬
‫تمسٌمها و المابمة ‪ etoile‬التً سننشا بداخلها عالمات * بنفس عدد الكلمة‬
‫ثم عرفنا المتؽٌر ‪ tampon‬و الذي للنا انه متؽٌر وسٌط بٌن الكلمة ‪ word‬و‪word_split‬‬
‫ثم عرفنا ثالثة عدادات التً سنعتمد علٌها فً الحلمات‬
‫أوال نموم بحساب عدد احرؾ الكلمة المدخلة بواسطة الدالة ‪len‬‬
‫كود‪PHP:‬‬
‫)‪c=len(word‬‬

‫ثم نعمل حلمة تموم بإضافة "*" فً المابمة ‪ٌ etoile‬عدد حروؾ الكلمة ‪word‬‬
‫كود‪PHP:‬‬
‫‪while y<c:‬‬
‫)'*'(‪etoile.append‬‬
‫‪y+=1‬‬

‫ثم نموم بإضافة عالمة | بٌن احرؾ الكلمة ‪ word‬كما بٌنا سابما‬
‫كود‪PHP:‬‬
‫‪while i<c:‬‬
‫"|"‪tampon+=word[i]+‬‬
‫‪i+=1‬‬

‫هنا فً هذه المرحلة من الكود لدٌنا المابمة ‪ etoile‬تحتوي على [‘*’‪ ]’*’,’*’,’*’,‬بنفس حروؾ‬
‫الكلمة و المتؽٌر ‪ٌ tampon‬حتوي على الكلمة ‪ word‬و لكن ممسمة بواسطة عالمة | كما رأٌنا‬
‫فً الممدمة» ’‪« ‘p|y|t|h|o|n‬‬
‫فً هذه المرحلة نستطٌع تحوٌل المتؽٌر ‪ word‬إلى لابمة بواسطة الدالة‪split‬‬
‫كود‪PHP:‬‬
‫)'|'(‪word_split= tampon.split‬‬

‫اآلن انتهٌنا من تهٌبة المتؽٌرات و جاء دور المسم الربٌسً‬


‫أوال نعمل حلمة تكون نهاٌتها أكبر من عدد الحروؾ ب ‪ 3‬دورات حتى نعطً للمستخدم فرصة‬
‫كود‪PHP:‬‬
‫‪while l<c+3:‬‬

‫ثم نطلب من المستخدم إدخال حرؾ‬


‫كود‪PHP:‬‬
‫‪car=raw_input(" char‬‬ ‫)"‪:‬‬

‫ثم ٌأتً الشرط األساسً‬


‫كود‪PHP:‬‬
‫‪if car in word_split and car not in etoile :‬‬

‫نموم بدراسة الحرؾ المدخل فإذا كان ٌنتمً للكلمة و ال ٌوجد فً المابمة ‪ etoile‬أي ان البرنامج‬
‫لم ٌضعه فً ‪ etoile‬من لبل سٌموم البرنامج بتنفٌد أربع خطوات‬
‫الخطوة األولى تكمن فً معرفة مكان تواجد هذا الحرؾ داخل المابمة‪word_split‬‬
‫كود‪PHP:‬‬
‫)‪ind=word_split.index(car‬‬

‫و هذا بواسطة بواسطة الدالة ‪ Index‬و نحجز الرلم الممثل لهذا المكان فً المتؽٌر‪ind‬‬
‫الخطوة الثانٌة نموم بإدخال هذا الحرؾ داخل المابمة ‪ etoile‬مع مراعات المكان‬
‫كود‪PHP:‬‬
‫)‪etoile.insert(ind,car‬‬

‫الحظو جٌدا لمنا بإدخال المتؽٌر ‪ char‬داخل ‪ etoile‬و مكان إدخاله متوافك مع ‪ ind‬أي انه‬
‫سٌثبت فً نفس مكان الكلمة األصلٌة‬
‫لكن لو تذكرو حٌن راٌنا الدالة ‪ insert‬من لبل و لو تعاملتم بها سترون انها تضٌؾ عنصر جدٌد‬
‫للمابمة و ال تستبدل هذا العنصر كالدالة ‪ replace‬أي ان المابمة ‪ etoile‬ستزٌد بدرجة كلما‬
‫ادخلنا عنصر جدٌد و ال نستطٌع استعمال الدالة ‪ replace‬ألنها ال تتعامل مع الموابم‬
‫هنا ٌواجهنا مشكل و الخطوة الثالثة تعالج هذا المشكل‬
‫الخطوة الثالثة تموم هذه الخطوة بحذؾ العنصر األخٌر من المابمة ‪ etoile‬حتى نتخلص من‬
‫مشكل ازدٌاد حجم المابمة مع كل عنصر جدٌد‬
‫كود‪PHP:‬‬
‫)]‪etoile.remove(etoile[c‬‬

‫استخدمنا الدالة ‪ remove‬إلزالة العنصر األخٌر المبٌن فً الصٌؽة‬


‫]‪etoile[c‬بحٌث اننا رأٌنا أن المتؽٌر ‪ٌ c‬مثل آخر عنصر للمابمة‬
‫الخطوة الرابعة تموم بطابعة المابمة‪etoile‬‬
‫‪print etoile‬‬
‫و فً األخٌر نموم بإختبار ‪ etoile‬و ‪ word_split‬فإذا كانا متساوٌٌن فهذا ٌعنً ان المستخدم‬
‫لد نجح فً اكمال كل الكلمة فنطبع له رسالة تخبره بأنه فاز ثم نخرج من الحلمة بواسطة‪break‬‬
‫كود‪PHP:‬‬
‫‪if etoile[0:c]==word_split[0:c]:‬‬
‫"*******‪print "***** YoU WiN‬‬
‫‪break‬‬

‫و إذا لم تتساوى المابمتٌن نموم بزٌادة العداد و تعاد نفس الخطوات السابمة‬
‫‪I+=1‬‬

‫لد ٌموا لابل منا أن هذا الرنامج جمٌل ألنو افادنا فً بعض األمو و لكن كلعبة فلٌس له أي معنا‬
‫ألننا نحن من ادخل الكلمة فنحن على علم مسبك بها أي أن عنصر التخمٌن معدوم فً هذه اللعبة‬
‫و هذا كالم صحٌح‪.‬‬
‫و لو أردنا اضافة عنصر التخمٌن على البرنامج ٌتوجب علٌنا استدعاء مكتبة ‪ random‬و هً‬
‫مكتبة تحتوي على الكثٌر من الدوال التً تساعد على التعامل مع األرلام و ما ٌهمنا من هذه‬
‫المكتبة هو دالة ‪ randrage‬بحٌث أن هذه الدالة تموم باختٌار اعداد بصفة عشوابٌة‬
‫مثال لو كتبنا‬
‫)‪random.ranrage(10‬‬
‫ستموم الدالة باختٌار عدد عشوابً محصور بٌن المجال )‪(0-10‬‬
‫و لإلستعانة بهذه الدالة نموم بالتعدٌل على المسم االول من الكود فمط‬
‫كود‪PHP:‬‬
‫‪import random‬‬
‫]'‪words=['cat','dog','watch','house‬‬
‫)‪r=random.randrange(3‬‬
‫]‪word=words[r‬‬
‫][ ‪word_split, etoile=[],‬‬
‫''=‪tampon‬‬
‫‪i, l, y=0, 0, 0‬‬

‫بحٌث اننا انشبنا لابمة تحتوي على العدٌد من الكلمات‬


‫ثم انشبنا المتؽٌر ‪ r‬الذي ستسند له لٌمة عشوابٌة من ‪ 0‬إلى ‪ 3‬و هنا ٌجب اإلنتباه ألن العدد‬
‫األلصى ٌحب أن ٌكون مساوي لعدد الكلمات‬
‫بعد ذلن ٌأخذ النتؽٌر ‪ word‬الكلمة المختارة من المابمة ‪ words‬و بالً الكود ٌبمى على حاله‬
‫دون تؽٌر‬

‫و هنا نكون لد انتهٌنا من التمرٌن األخٌر فً هذه المرحلة و حاول فهم هذا التمرٌن جٌدا أخً‬
‫المارئ ألنه ٌحتوي على فوابد كثٌرة ستحتاجها فً المراحل المادمة‪.‬‬

‫أحٌطكم علما أنً جمعت كل ما راٌناه فً ملؾ ‪ pdf‬و بمً ٌحتاج لبعض التعدٌل فمط و سأضع‬
‫رابط التحمٌل الخاص بهذا الملؾ ؼدا بإذن هللا كما أنً سأضع بعض التمارٌن التمٌمٌة‬

‫تم بحمد هللا‪.‬‬

‫‪nile‬‬

‫مشاهذة مهفه انشخصي‬

‫إرسال رسانت خاصت إنى‪nile‬‬

‫انبحث عن جميع مشاركاث‪nile‬‬

‫أضف ‪ nile‬إنى قائمت األصذقاء‬

‫‪#8‬‬

‫يوو أمس ‪, 11:03 PM‬‬

‫تاريخ انتسجيم‪: Feb 2008‬‬


‫انمشاركاث‪302,1 :‬‬
‫‪nile‬‬
‫االدارة‬

‫الــــــــ ‪Python‬‬ ‫رد‪ :‬دورة فى لغة‬

‫أوال هذا رابط تحمٌل هذا الجزء من الدورة‬

‫‪http://www.divshare.com/download/4068028-8b9‬‬

‫و لمد اخترت لكم بعض التمارٌن البسٌطة تنفٌدا لرؼبة أخونا ‪MUSLIM23‬‬

‫تمارٌن‬
‫‪1-‬اطلب من المستخدم ان ٌدخل النمطة التً تحصل علٌها ‪ N‬و بناء على هذه النمطة ترسله رسالة تنبؤه‬
‫بدرجة العالمة‬
‫مثال‬
‫‪N >= 80 % A‬‬
‫‪80 % > N >= 60 % B‬‬
‫‪60 % > N >= 50 % C‬‬
‫‪50 % > N >= 40 % D‬‬
‫‪N < 40 % E‬‬

‫‪2-‬اكتب كود لبرنامج ٌموم بتحوٌل العملة إلى الدوالر بحٌث ان المستخدم ٌدخل كمٌة المبلػ و معامل التحوٌل‬
‫فٌموم البرنامج بتحوٌل هذا المبلػ على الدوالر و ٌخرج الناتج للمستخدم‬
‫‪3-‬عدل على هذا البرنامج بحٌث انه ٌطلب من المستخدم ادخال رمز العملة و معامل التحوٌل فٌنسخ البرنامج‬
‫النتابج على الشكل التالً‬
‫= ‪12345658$ Da 123123446‬‬
‫‪-4‬‬
‫نبمى مع نفس البرنامج لم بتطوٌره بحٌث ٌصبح البرنامج ٌعرؾ معامل التحوٌل وما على المستخدم إال ادخال‬
‫رمز عملته و المبلػ‬
‫مثال ٌطلب البرنامج من المستخدم ادخال المبلػ ثم ٌطلب منه ادخال رمز عملته (لاير مثال) فٌموم البرنامج‬
‫بالتحوٌل مباشرتا دون طلب معاما التحوٌل‪.‬‬

‫‪5-‬الحظ المابمة التالٌة‬


‫]'‪['Mohamed, 'Amine', 'Samy', 'Ahmed', ‘Adibe', ‘Omar‬‬

‫لم بكتابة برنامج ٌنسخ كل إسم من هذه المابمة و ٌنسخ امامه عدد احرؾ اإلسم‬

‫‪6-‬عدل على هذا البرنامج بحٌث ان البرنامج ال ٌسمح باألسماء التً ٌفوق عدد احرفها ‪ 8‬فإن وجد اسم ٌفوق‬
‫عدد احرفه هذا الرلم ٌموم البرنامج بحذفه من المابمة‬

‫‪7-‬اكتب برنامج تسجٌل الطلبة حٌث ان المستخدم ٌدخل اسم الطالب و تارٌخ تسجٌل ثم اضؾ إلى هذا‬
‫البرنامج خصابص البحث و الحذؾ‬

‫‪8-‬هذا التمرٌن طرح فً مسابمة خاصة بمولع الخوارزمٌات العربً ونص هذا التمرٌن كا التالً‬

‫عند ارسال اي رسالة لصٌرة ‪ SMS‬فانت ملزم بعدم كتابةاكثر من ‪ 160‬حرؾ لذا فمن الملزم علٌن ؼالٌا‬
‫االختصار‪.‬‬

‫سوؾ ٌتم اعطابن ‪ text‬و هو نص الرسالة و ٌجب ان تترجمها الى لؽة ‪ SMS‬طبعا للمواعد التالٌة‪:‬‬

‫‪1.‬حذؾ جمٌع عالمات التنمٌط '?'‪('.',',',‬و‪'!').‬‬

‫‪2.‬ارجاع األحرؾ الكبٌرة الى احرؾ صؽٌرة‪.‬‬

‫‪3.‬تؽٌٌر جمٌع الكلمات '‪ 'and‬ال‪'&'.‬‬

‫‪4.‬تؽٌٌر جمٌع الكلمات '‪ 'ate‬الى '‪'.8‬‬

‫‪5.‬تؽٌٌر جمٌع الكلمات '‪ 'at‬الى‪'@'.‬‬

‫‪6.‬تؽٌٌر جمٌع الكلمات '‪ 'you‬الى‪'U'.‬‬

‫مثال على ذلن‪:‬‬

‫"?‪"I HATE rats, and you‬سوؾ تصبح‪"i h8 r@s &U".‬‬

‫فٌا جماعة أرونا شطارتكم فهذا المشكل سهل نوعا ما و سنثبت لهم اننا تعلمنا مبادئ لؽة الباٌثون فمط و‬
‫استطعنا حل هذه الخوارزمٌة ‪:smailes40:‬‬
‫ٌجب علٌن طلب من المستخدم بإدخال الرسالة‬
‫ثم تموم بإنشاء لابمة تحتوي على الكلمات الممنوعة‬
‫و لابمة تحتوي على اإلختصارات‬
‫ثم تعمل حلمة تفحص الرسالة و تستبدل كل كلمة باإلختصار المناسب لها‬

‫على كل حال سنحل هذا التمرٌن مع بعضنا البعض بإذن هللا لكن حاولوا انتم ثم نرى مع بعضنا الحل‬

‫و اود ان اذكركم اخوانً الكرام انه ٌجب اإلكثار من التطبٌمات لكل ما راٌناه فً هذا الجزء حاولو التؽٌر فً‬
‫األمثلة التً رأٌناها و إضافة أشٌاء جدٌدة علٌها حاولو إستعمال كل الدوال التً راٌناها من لبل و استؽاللها‬
‫فً حل المشاكل حتى وإن لم ٌنجح الكود الذي كتبته حتى و ان كان البرنامج الٌعمل حاول فمط و ابحث عن‬
‫سبب المشكل و ابحث عن حل له صدلنً ستستفاد كثٌرا]‪[/size‬‬

‫‪nile‬‬

‫مشاهذة مهفه انشخصي‬

‫إرسال رسانت خاصت إنى‪nile‬‬

‫انبحث عن جميع مشاركاث‪nile‬‬

‫أضف ‪ nile‬إنى قائمت األصذقاء‬

‫‪#9‬‬

‫يوو أمس ‪, 11:05 PM‬‬

‫تاريخ انتسجيم‪: Feb 2008‬‬


‫انمشاركاث‪302,1 :‬‬
‫‪nile‬‬
‫االدارة‬

‫الــــــــ ‪Python‬‬ ‫رد‪ :‬دورة فى لغة‬

‫بخصوص السؤال الثانى‬


‫‪{3- -‬عدل على هذا البرنامج بحٌث انه ٌطلب من المستخدم ادخال رمز العملة و معامل التحوٌل فٌنسخ‬
‫البرنامج النتابج على الشكل التالً‬
‫كود‪PHP:‬‬
‫}= ‪12345658$ Da 123123446‬‬

‫)'‪tc=raw_input('Enter the type of your Currency :‬‬


‫))' ‪cr=float(raw_input('Enter the amount :‬‬
‫))' ‪op=float(raw_input('Enter the operator :‬‬

‫‪if cr>0 and op !=0:‬‬


‫‪rslt=cr*op‬‬
‫‪print tc,cr,"="," $",rslt‬‬

‫__________________________‬
‫بالنسبة للسؤال الرابع‬

‫نبمى مع نفس البرنامج لم بتطوٌره بحٌث ٌصبح البرنامج ٌعرؾ معامل التحوٌل وما على المستخدم إال ادخال‬
‫رمز عملته و المبلػ‬
‫مثال ٌطلب البرنامج من المستخدم ادخال المبلػ ثم ٌطلب منه ادخال رمز عملته (لاير مثال) فٌموم البرنامج‬
‫بالتحوٌل مباشرتا دون طلب معاما التحوٌل‪.‬‬
‫كود‪PHP:‬‬
‫]'‪cr=['US$', 'DENAR','EU','YEN','RYAL','DERHM','STRLENY‬‬
print " Choose one of : \n 1- %s"%(cr[0]), "\n 2-",(cr[1]),"\n 3-
",(cr[2]),"\n 4-",(cr[3]),"\n 5-",(cr[4]),"\n 6-",(cr[5]),"\n 7-
",(cr[6])
tcr=int(raw_input('Enter the number of Currency name : '))
if tcr==1:
cram=float(raw_input( 'Enter the amount '))
if cram!=0 :
rslt=cram*5.7
print cram," = ",cr[0],rslt
elif tcr==2:
cram=float(raw_input( 'Enter the amount '))

if cram!=0 :
rslt=cram*20
print "Pound",cram, " = ",cr[1],rslt

elif tcr==3:
cram=float(raw_input( 'Enter the amount '))

if cram!=0 :
rslt=cram*8.75
print "L.E.",cram, " = ",cr[2],rslt
elif tcr==4:
cram=float(raw_input( 'Enter the amount '))

if cram!=0 :
rslt=cram*6
print "L.E.",cram, " = ",cr[3],rslt

elif tcr==5:
cram=float(raw_input( 'Enter the amount '))

if cram!=0 :
rslt=cram*1.7
print "L.E.",cram, " = ",cr[4],rslt

elif tcr==6:
cram=float(raw_input( 'Enter the amount '))

if cram!=0 :
rslt=cram*4
print "L.E.",cram, " = ",cr[5],rslt

elif tcr==7:
cram=float(raw_input( 'Enter the amount '))

if cram!=0 :
rslt=cram*10
print "L.E.",cram, " = ",cr[6],rslt

ً‫لبل ان ننطلك فً الجزء الثان‬


‫هذه بعض األفكار لحل الخوارزمٌة المطروحة فً التمارٌن‬

[/size]‫اوال لحذؾ الحروؾ الؽٌر مرؼوب تستطٌع استعمال طرٌمة مشابهة لهاته‬
PHP:‫كود‬
point=['!',':','@']
‫""=‪text‬‬
‫)'‪text=raw_input(' test :‬‬
‫""=‪sms‬‬
‫)‪c=len(text‬‬
‫‪i=0‬‬
‫‪while i<c:‬‬
‫‪if text[i]in point:‬‬
‫)''‪sms=text.replace(text[i],‬‬
‫‪i+=1‬‬

‫‪print sms‬‬

‫تستطٌع ادراج هذا الكود فً دالة و تسمٌها مثال )(‪ remove_char‬و تموم باستدعابه مرة او‬
‫اثنبن حتى تتمكن الدالة من حذؾ كل الحروؾ الؽٌر مرؼوب بها‬

‫و لتصؽٌر حروؾ الرسالة نستعمل الدالة‪lower‬‬


‫مثال‬
‫كود‪PHP:‬‬
‫"‪message=" dergr fADS ZD fbfg hbZEEZ‬‬
‫)(‪sms=message.lower‬‬
‫‪print sms‬‬

‫و لألختصارات توجد عدة طرق من بٌنها‬


‫كود‪PHP:‬‬
‫]'‪trans=['&','8','@','u‬‬
‫'‪message='you and me at 10pm‬‬
‫)]‪sms=message.replace('you',trans[3‬‬
‫‪print sms‬‬

‫المطلوب منن تجد طرٌمة ٌموم بها البرنامج باستبدال جمٌع الكلمات مرة واحدة‬

‫المهم هذه بعض األفكار المساعدة و ٌبمى علٌكم التعدٌل علٌها و توجٌهها لكً تؤدي العمل‬
‫المطلوب‪.‬‬

‫‪nile‬‬

‫مشاهذة مهفه انشخصي‬

‫إرسال رسانت خاصت إنى‪nile‬‬

‫انبحث عن جميع مشاركاث‪nile‬‬

‫أضف ‪ nile‬إنى قائمت األصذقاء‬

‫‪#10‬‬

‫يوو أمس ‪, 11:10 PM‬‬


‫تاريخ انتسجيم‪: Feb 2008‬‬
‫انمشاركاث‪302,1 :‬‬
‫‪nile‬‬
‫االدارة‬

‫الــــــــ ‪Python‬‬ ‫رد‪ :‬دورة فى لغة‬

‫الجزء الثانً من الدورة‬


‫سننطلك بإذن هللا فً الجزء الثانً من الدورة و سنبتدئ فً هذا الجزء بدراسة الدوال بصورة‬
‫معممة كما اننا سنرى كٌفٌة التحكم فً األخطاء و تنظٌم األكواد و اشٌاء اخرى جمٌلة تحسن من‬
‫اسلوبنا فً البرمجة و تكون أول خطوة لنا نحو اإلحتراؾ‪.‬‬

‫الدوال‬
‫تكلمنا سابما عن الدوال و رأٌنا انها تساعدنا فً تنظٌم اكواد البرنامج خاصتا الطوٌلة منها بحٌث‬
‫اننا نمسم كود البرنامج على عدة السام ثم نموم ببرمجة كل لسم على حدى بحٌث ان هذا المسم‬
‫ٌكون داخل دالة و بعد اإلنتهاء نموم باستدعاء الدوال و ترتٌبها حسب البرنامج كما رأٌنا فً‬
‫التمرٌن األول (مشاركة ‪ )40‬حٌث لمنا ببرمجة اربع دوال لكل دالة عمل معٌن تموم به و فً‬
‫الكود الربٌسً نموم باستدعاء هذه الدوال حسب الرؼبة بل رأٌنا اننا نستطٌع حفظ هذه الدوال و‬
‫استدعابها متى تدعوا الحاجة و هنا ٌتبٌن لنا ان الدوال لها فابدة كبٌرة جدا بحٌث انها تسهل علٌنا‬
‫العمل كما انها تختزل الولت فً كتابة األكواد بحٌث انن تموم ببرمجة الدوال التً ترى انن‬
‫تحتاجها دابما ثم تحفظها فً ملؾ و تستدعٌها فً أي مرة تحتاجها‪.‬‬
‫و ل الدوال فابدة اخرى تتجلى فً المساعدة على اكتشاؾ األخطاء افرض مثال انن كتبت برنامج‬
‫ٌحتوي على ‪ 200‬سطر و حدث خطا فً هذا البرنامج كٌؾ ستجد مصدر الخطأ سٌكون هذا‬
‫كاتلبحث عن ابرة فً لومة لش فلو استعملت الدوال فً الكود لن ٌتطلب اكتشاؾ الخطأ و لتا‬
‫كبٌرا ألنن تذهب مباشرتا الى الدالة التً ال تؤدي عملها و تموم بتعدٌلها‪.‬‬

‫وٌوجد نوعان من الدوال‬


‫الدوال الفارؼة (اإلجرابات )‪ procedure‬هذه الدوال ا وان صح التعبٌر اإلجرابات تموم بعمل‬
‫معٌن دون شرط ان تعطً نتٌجة معٌنة أي انها ال تعود على لٌمة معٌنة‬
‫مثال‬
‫كود‪PHP:‬‬
‫‪def add():‬‬
‫)' ‪a=raw_input(' A :‬‬
‫)'‪b=raw_input(' B :‬‬
‫‪print "res : ",a+b‬‬

‫"***************"‪print‬‬
‫)(‪add‬‬

‫كما نالحظ الدالة تموم بجمع عددٌن ٌدخلهما المستخدم و مع ذلن تسمى هذه الدالة اجراء ألنها ال‬
‫تعود بمٌمة معٌنة أي انها مجرد عدة اجرابات متسلسلة‬
‫الدوال)‪(function‬‬
‫الدوال التً سنتكلم عنها اآلن تعتبر الدوال الحمٌمٌة و هً التً تأخذ لٌم و تموم بإجراء تعدٌالت‬
‫علٌها ثم تعود لنا بنتٌجة أي ان الدالة فً األخٌر تعود بمٌمة معٌنة عكس اإلجراءات التً ال تعود‬
‫بمٌمة‬
‫الحظوا نفس المثال السابك و لكن هذه المرة سنطبمه داخل دالة حمٌمة‬

‫كود‪PHP:‬‬
‫‪def add(x,y):‬‬
‫‪return x+y‬‬
‫"***************"‪print‬‬
‫))' ‪a=int(raw_input(' A :‬‬
‫))'‪b=int(raw_input(' B :‬‬
‫)‪print add(a,b‬‬

‫الفرق األول ٌكمن فً تعرٌؾ الدالة فً المرة األولى كتبنا )(‪ def add‬بحٌث ان األلواس بمٌة‬
‫خالٌة و نسمً ما بٌن األلواس بالتعدٌالت الخاصة بالدالة‪parameter‬‬
‫و ٌكون جسم الدالة كالتالً‬

‫كود‪PHP:‬‬
‫‪def function-name( parameter-list ):‬‬
‫‪statements‬‬

‫اوال نموم باختٌار اسم الدالة (ٌجب ان ٌكون اإلسم ؼٌر محجوز من طرؾ اللؽة)‬
‫ثم نضع التعدٌالت التً نرٌدها (حسب عمل الدالة)‬
‫بعد ذلن نموم ببكتابة جسم الدالة و فً األخٌر ستعطٌنا الدالة النتابج المرجوة و فً هذه المرحلة‬
‫ستكونم لٌٌمة الدالة مساوٌة لمٌمة النتٌجة التً تعود علٌها‬
‫نعود للمثال السابك‬

‫اوال اعطٌنا اسما للدالة ‪ add‬ثم ادرجنا متؽٌرٌن ‪ x,y‬الذٌن ٌعتبران ‪ parameter‬للدالة ‪add‬‬
‫و هنا الدالة ستعود على لٌمة ‪ x+y‬أي ان الدالة ستحجز لٌمة جمع ‪ x‬مع‪y‬‬
‫و عند استدعاء الدالة نموم بتعوٌض ‪ x,y‬بالمتؽٌرات التً ادخلها المستخدم هنا ستموم الدالة‬
‫‪add‬بتعوٌض ‪ a,b‬مكان ‪ x,y‬أي ان الدالة ‪ add‬تصبح على الشكل التالً‬
‫كود‪PHP:‬‬
‫‪def add(a,b):‬‬
‫‪return a+b‬‬

‫و الدالة ‪ return‬كما ٌدل اسمها تجبر الدالة على الحجز ناتج الجمع و لهذا نمول ان الدالة ‪add‬‬
‫تعود بمٌمة الجمع‬
‫مثال آخر‬
‫كود‪PHP:‬‬
‫‪def count_name(name):‬‬
‫‪c=0‬‬
‫)‪c=len(name‬‬
‫‪return c‬‬

‫)' ‪user=raw_input('Name :‬‬


‫)‪print count_name(user‬‬
‫تموم الدالة ‪ count_name‬بحساب عدد احرؾ اسم او عبارة‬
‫استعملنا البارامتر ‪ name‬الذي سٌعوض عند استدعاء الدالة و لمنا بحساب عدد احرؾ ‪name‬‬
‫كأنه متؽٌر حمٌمً و فً النهاٌة تعود الدالة بمٌمة ‪ c‬الذي ٌحتوي على عدد حروؾ البارامتر‬
‫و عند االستدعاء نعوض البارامتر بالمتؽٌر الذي نرٌد و ستموم الدالة بحساب عدد احرؾ المتؽٌر‬
‫و طباعة عدد أحرفه‬
‫و البارامتر ٌستطٌع ان ٌكون واحد او اثنٌن او ثالثة او اكثر حسب الحاجة و ٌجب علٌنا الحذر‬
‫عند التعامل معه الن مجموعة البارمترات ٌجب ان تلبً رؼبات الدالة أي تشمل كل ما تحتاجه‬
‫الدالة لكً تؤدي عملها على اكمل وجه‬

‫ال حظوا المثال التالً‬


‫كود‪PHP:‬‬
‫‪def max_value(a,b,c):‬‬
‫‪mx=a‬‬
‫‪if b>mx:‬‬
‫‪mx=b‬‬
‫‪if c>mx:‬‬
‫‪mx=c‬‬
‫‪return mx‬‬
‫))' ‪w=int(raw_input(' A :‬‬
‫))' ‪y=int(raw_input(' B :‬‬
‫))' ‪z=int(raw_input(' C :‬‬

‫"******************‪print "************** result‬‬


‫‪print " the maximam value is : ",max_value(w,y,z‬‬

‫نفس الترتٌب نموم بتسمٌة الدالة ثم نعطٌها البارامترات التً تحتاجها أو باألحرى التً نحتاجها‬
‫نحن‬
‫ثم نموم بكتابة الكود عادي جدا كأننا نتعامل مع متؽٌرات حمٌمٌة‬
‫و فً النهاٌة تعود الدالة على النتٌجة المرجوة وهً هنا تتمثل فً أكبر لٌمة من بٌن ثالث لٌم‬
‫و عند استدعاء الدالة نعوض البارامترات بالمتؽٌرات التً ادخلها المستخدم ثم نموم بطبعه‬
‫النتٌجة معتمدٌن على المٌمة التً تحتوٌها الدالة (التً تعود إلٌها‪).‬‬

‫اظن ان فكرة الدوال بدبت تتضح للٌال و نضع تلخٌص لما راٌناه‬
‫اإلجراء عبارة عن دالة فارؼة أي انها ال تعود على لٌمة معٌنة‬
‫الدالة تأخذ بارامتلرات و تعود على نتٌجة معٌنة‬
‫و نستطٌع ان نتعامل مع الدالة كأي متؽٌر آخر عكس اإلجراءات‬
‫مثال‬

‫كود‪PHP:‬‬
‫‪def add(x,y):‬‬
‫‪return x+y‬‬
‫"***************"‪print‬‬
‫))' ‪a=int(raw_input(' A :‬‬
‫))'‪b=int(raw_input(' B :‬‬
‫)‪print add(a,b‬‬
‫‪print add(a,b)*2‬‬

‫ال حظوا لمد لمنا بضرب الدالة فً ‪ 2‬ألن الدالة فً هذه المرحلة تعبر عن المٌمة التً تحتوٌها‬
‫كما أننا نستطٌع التعامل معها ببالً المعامالت الرٌاضٌة و حتى فً الجمل الشرطٌة‬
‫كود‪PHP:‬‬
‫‪def add(x,y):‬‬
‫‪return x+y‬‬
‫"***************"‪print‬‬
‫))' ‪a=int(raw_input(' A :‬‬
‫))'‪b=int(raw_input(' B :‬‬
‫)‪print add(a,b‬‬
‫‪if add(a,b)>20:‬‬
‫"‪print " the result of A + B is bigger than 20‬‬

‫كما اننا نستطٌع ان نسند لٌمة الدالة للمتؽٌر آخر‬


‫كود‪PHP:‬‬
‫)‪y=add(a,b‬‬

‫و لهذا تجد ان استعمال الدوال شابع جدا حتى مع امكانٌة استعمال البرمجة الموجهة ‪ oop‬الن‬
‫الدوال بسٌطة ممارنتا مع …‪ class method‬كما انها تتٌح لنا عدة امكانٌات و لؽة الباٌثون‬
‫كما ذكرت سابما تتٌح لن البرمجة بالنمطٌن معا على حسب اختٌارن‪.‬‬

‫]"‪[size="4"][color="DarkGreen‬طبعا هذه ممدمة بسٌطة عن الدوال و مدخل سرٌع لهذا المسم‬


‫الهام من البرمجة مازلنا نواصل مع الدوال فً الدروس المادمة بإذن هللا‪.‬‬

‫‪nile‬‬

‫مشاهذة مهفه انشخصي‬

‫إرسال رسانت خاصت إنى‪nile‬‬

‫انبحث عن جميع مشاركاث‪nile‬‬

‫أضف ‪ nile‬إنى قائمت األصذقاء‬

‫‪#11‬‬

‫يوو أمس ‪, 11:14 PM‬‬

‫تاريخ انتسجيم‪: Feb 2008‬‬


‫انمشاركاث‪302,1 :‬‬
‫‪nile‬‬
‫االدارة‬

‫الــــــــ ‪Python‬‬ ‫رد‪ :‬دورة فى لغة‬

‫نواصل مع الدوال و هذه المرة سنتحدث عن المتؽٌرات فً الدوال و الموضوع مهم جدا لدى ارجوا منكم‬
‫اخوانً الكرام التركٌز جٌدا‪.‬‬

‫عند استعمال الدوال ٌتؽٌر استعمال المتؽٌرات بالطرٌمة التً اعتدنا علٌها ألن المتؽٌرات تنمسم إلى لسمٌن‬
‫المتؽٌرات الكلٌة ‪ global variable‬و تعرؾ هذه المتؽٌرات فً الكود الربٌسً و تستطٌع أي دالة‬
‫استعمالها ألنها متؽٌرات كلٌة تابعة للبرنامج ككل‬
‫مثال]‪[/size‬‬
‫كود‪PHP:‬‬
‫‪x=2‬‬
‫‪def a():‬‬
‫‪print x‬‬
‫)(‪a‬‬

‫كما نالحظ عرفنا المتؽٌر ‪ x‬فً الكود الربٌسً و لمد استعملنا هذا المتؽٌر داخل الدالة ‪ a‬دون‬
‫مشاكل ألن المتؽٌر ‪ x‬متاح لكل الدوال المكتوبة داخل كود البرنامج‬
‫المتؽٌرات الداخلٌة ‪ local variable‬تسمى هذه الدوال بالدوال الداخلٌة ألنها تعرؾ داخل دالة‬
‫و لٌس فً الكود الربٌسً و تستطٌع الدالة التً عرؾ المتؽٌر داخلها استعمال هذا المتؽٌر بكل‬
‫حرٌة و لكن الدوال األخرى ال تستطٌع استعمال هذا المتؽٌر ألنه تابع للدالة التً عرؾ داخلها‬

‫مثال‬
‫كود‪PHP:‬‬
‫‪def a():‬‬
‫‪x=22‬‬
‫‪print x‬‬
‫‪def b():‬‬
‫‪print x*2‬‬
‫)(‪a‬‬
‫)(‪b‬‬

‫عند تنفٌد هذا الكود سٌرسل المفسر رسالة خطأ كالتالً‬

‫‪Exeptions.Name.Error :global name ‘X’ is not defined‬‬

‫و معنى الرسالة ان المتؽٌر ‪ X‬ؼٌر معروؾ و سبب لنا هذا الخطأ الدالة ‪ b‬ألننا استعملنا المتؽٌر‬
‫‪x‬داخلها و لٌس لها الصالحٌة باستعمال هذا المتؽٌر ألنه تابع للدالة ‪ a‬و هذه هً المتؽٌرات‬
‫الداخلٌة‪local‬‬
‫إذا نلخص‬
‫تنمسم المتؽٌرات إلى لسمٌن المتؽٌرات ذات النوع ‪ global‬و هً التً تعرؾ فً الكود الربٌسً‬
‫و تستطٌع أي دالة استعمالها و المسم الثانً ٌعتبر هً المتؽٌرات ذات النوع ‪ local‬و هً‬
‫المتؽٌرات التً تعرؾ داخل الدوال و ال تستطٌع الدوال األخرى استعمالها ألنها تبمى تابعة للدالة‬
‫التً عرفت داخلها‬

‫اآلن نركز للٌال‬


‫نحن لما نعرؾ متؽٌر فً الكود الربٌسً و ننشا دالة لطعا ستستطٌع هذه الدالة التعامل مع هذا‬
‫المتؽٌر و لكن هل تستطٌع التؽٌر فً محتواة ؟؟‬
‫ال حظوا المثال التالً‬
‫كود‪PHP:‬‬
‫‪def a():‬‬

‫‪print x*3‬‬
‫‪x=2‬‬
‫)(‪a‬‬
‫‪print x‬‬
‫انظروا مع ناتج هذا الكود سٌطبعه البرنامج فً المرة األولى ‪ 6‬و هذا هو الجزء التابع للدالة و‬
‫فً المرة الثانٌة ٌطبع ‪2‬‬
‫لماذا ؟؟‬
‫من المفروض ان ٌطبع ‪ 6‬و فً المرة الثانٌة ‪ 6‬ألننا نتعامل مع متؽٌر واحد أي ان الدالة ‪ a‬لد‬
‫ؼٌرت محتوى المتؽٌر ‪ x‬فلماذا ٌعود ألصله فً المرة الثانٌة ؟؟ !!‬
‫هنا نستنتج ان الدالة ال تستطٌع تؽٌر محتوى المتؽٌر حتى و ان كان متؽٌر ‪ global‬سٌحدث‬
‫التؽٌر داخل الدالة فمط ثم ٌعود ألصله‬
‫مثال آخر‬
‫كود‪PHP:‬‬
‫‪def a():‬‬

‫‪print x*3‬‬

‫‪def b():‬‬
‫‪print x*9‬‬
‫‪x=2‬‬
‫)(‪a‬‬
‫)(‪b‬‬
‫‪print x‬‬

‫الحظوا كل دالة استطاعة التعامل مع المتؽٌر ‪ x‬و استطاعة تؽٌر محتواه و لكن بصفة مؤلتة فمط‬
‫او باألحر استطاعة التؽٌر علٌه داخل صالحٌاتها فمط اما خارج حدود الدالة سٌعود المتؽٌر ألصله‬
‫و هً المٌمة ‪2‬‬
‫نلخص مرة أخرى‬
‫تستطٌع الدالة التعامل مع المتؽٌر ‪ global‬بكل حرٌة و لكنها ال تستطٌع تؽٌر لٌمته بصورة‬
‫نهابٌة و انما تستطٌع التؽٌر فً لٌمته داخل صالحٌتها فمط ثم ٌعود المتؽٌر إلى لٌمته األصلٌة و‬
‫هً التً عرؾ بها فً الكود الربٌسً‪.‬‬
‫اآلن ماذا لو احتجنا لتؽٌر لٌمة المتؽٌر داخل دالة كٌؾ سنعطً الصالحٌة لهذه الدالة لتؽٌر لٌمة‬
‫المتؽٌر بصورة نهابٌة ؟؟‬
‫هنا ٌتوجب علٌنا استعمال العبارة ‪ global‬داخل الدالة لكً نبٌن للمفسر ان هذه الدالة لها‬
‫الصالحٌات الكاملة فً تؽٌر محتوى المتؽٌر‬
‫مثال‬
‫كود‪PHP:‬‬
‫‪def a():‬‬
‫‪global x‬‬
‫‪print" global x in function a()",x‬‬
‫‪x*=10‬‬
‫‪print"global x*10 in function a()",x‬‬

‫‪x=7‬‬
‫‪print "global x in code of programme before fun a()",x‬‬
‫)(‪a‬‬
‫‪print "global x in code of programme after fun a()",x‬‬

‫]"‪[size="4‬ال حظو جٌدا‬


‫اوال طبعنا رسالة تبٌن لٌمة ‪ x‬لبل استدعاء الدالة‪a() =========>7‬‬
‫ثانٌا طبعنا رسالة تبٌن ‪ x‬داخل الدالة ‪ a‬لكن لبل التؽٌر ‪<========= x7‬‬
‫ثالثا طبعنا رسالة تبٌن ‪ x‬داخل الدالة ‪ a‬بعد التؽٌر‪70<============x‬‬
‫رابعا طبعنا رسالة تبٌن ‪ x‬خارج الدالة( ‪ a‬فً الكود الربٌسً )بعد استدعاء الدالة‪a x=====>70‬‬
‫و هنا نكون لد تعلمنا كٌؾ نؽٌر فً لٌمة المتؽٌر الربٌسً داخل الدالة بصورة نهابٌة‬

‫مالحظة‪:‬‬
‫لٌس بالضرورة تؽٌر لٌمة المتؽٌر داخل الدالة بصورة نهابٌة فً كل مرة و انما عند الحاجة فمط أي اذا كانت‬
‫تحتاج تؽٌر لٌمة المتؽٌر داخل الدالة بصورة نهابٌة فاستعمل العبارة ‪ global‬اما اذا كنت ال تحتاج هذا التؽٌر‬
‫النهابً فاستعمل الطرٌمة التً رأٌناها سابما‬
‫أي لن الخٌار فً استعمل هذه الطرق حسب الحاجة‪.‬‬

‫و هنا الخبرة و الممارسة تلعب دور فً اختٌار نمط العمل و ستكتسب هذه الخبرة من كتابة الكثٌر من األكواد‬
‫ألن مهمة كتابة كود خالً من الثؽرات تبدئ من اختٌار المتؽٌرات و تحدٌد انواعها و التعامل بهذه المتؽٌرا‬
‫بواسطة الدوال‬

‫]"‪[color="DarkGreen‬مازلنا مع الدوال و سندرس فً المرة المادمة بإذن هللا بعض الطرق الرابعة‬
‫للتعامل مع الدوال و لبل هذا ٌجب علٌن اخً المارئ فهم هذا الدرس جٌدا ألن الدوال تعتبر من اهم النماط و‬
‫طرٌمة فهمن لها ستؤثر على كل مشوارن المستمبلً‪.‬‬

‫مثال شامل ٌوضح لنا المتؽٌرات بصورة احسن‬


‫كود‪PHP:‬‬
‫‪def a():‬‬
‫‪x = 25‬‬
‫"‪print "\nlocal x in a is", x, "after entering a‬‬
‫‪x += 1‬‬
‫"‪print "local x in a is", x, "before exiting a‬‬

‫‪def b():‬‬
‫‪global x‬‬
‫"‪print "\nglobal x is", x, "on entering b‬‬
‫‪x *= 10‬‬
‫"‪print "global x is", x, "on exiting b‬‬
‫‪print "global x is", x‬‬

‫‪x = 7‬‬
‫‪print "global x is", x‬‬
‫)(‪a‬‬
‫)(‪b‬‬
‫)(‪a‬‬
‫)(‪b‬‬
‫‪print "\nglobal x is", x‬‬

‫استعملنا فً هذا المثال دالتٌن‬


‫الدالة ‪ a‬و الدالة ‪b‬‬
‫عرفنا متؽٌرٌن و المتؽٌرٌن لهما نفس اإلسم ‪x‬‬
‫المتؽٌر األول تابع للدالة )(‪a‬‬
‫كود‪PHP:‬‬
‫‪def a():‬‬
‫‪x = 25‬‬
‫"‪print "\nlocal x in a is", x, "after entering a‬‬
‫‪x += 1‬‬
‫"‪print "local x in a is", x, "before exiting a‬‬

‫ٌبتدئ بمٌمة ‪ 25‬ثم ٌضاؾ لهذه المٌمة ‪1‬‬


‫و طبعا سٌكون ناتج الطباعة ‪ 25‬فً المرة األولى و ‪ 26‬فً المرة الثانٌة‬

‫المتؽٌر الثانً متؽٌر ‪ X‬أٌضا لكنه من نوع ‪ global‬و ٌبتدئ بمٌمة ‪7‬‬
‫كود‪PHP:‬‬
‫‪x = 7‬‬

‫الدالة )(‪ b‬تستعمل المتؽٌر ‪ x‬الخاص بالكود الربٌسً )‪ (global‬الذي‬


‫ٌبتدئ بمٌمة ‪ 7‬كما ذكرنا سابما و تموم هذه الدالة بضرب المتؽٌر فً ‪10‬‬

‫و ناتج الطباعة سٌكون ‪ 7‬فً المرة األولى و ‪ 70‬للمرة الثانٌة و الثالثة‬

‫و فً الكود الربٌسً استدعٌنا الدوال وفك الترتٌب التالً‬


‫كود‪PHP:‬‬
‫‪print "global x is", x‬‬
‫)(‪a‬‬
‫)(‪b‬‬
‫)(‪a‬‬
‫)(‪b‬‬
‫‪print "\nglobal x is", x‬‬

‫فً المرة األولى سٌطبع ‪ 7‬عادي‬


‫فً المرة الثانٌة سٌكبع ‪ 25‬و ‪ 26‬ألننا استدعٌنا الدالة )(‪ a‬التً ال‬
‫تتعامل مع المتؽٌر الربٌسً بل تستعمل متؽٌر خاص بها و بالرؼم من ان‬
‫اإلسم متشابه )‪ (X‬فالمتؽٌر ٌعتبر ان ‪ x‬التابعة ل )(‪ a‬مختلفة عن ‪x‬‬
‫التابعة للدالة )(‪ b‬و الكود الربٌسً‬

‫فً المرة الثانٌة سٌطبع‬


‫‪7‬و ‪ 70‬ثم ‪ 70‬و هنا نكون لد عدلنا على المتؽٌر الربٌسً ‪x global‬‬
‫و لم تبمً لٌمته ‪ 7‬بل تحولت إلى ‪70‬‬

‫فً المرة الثالثة ٌطبع ‪ 25‬ثم ‪ 26‬و هذا ٌأكد لنا مرة أخرى ان المفسر‬
‫ٌفرق بٌن ‪ x‬التابعة ل )(‪ a‬و ‪ x‬الربٌسٌة‬

‫فً المرة االخٌرة ال ٌطبع ‪ 70 70 7‬لماذا ؟؟‬


‫ألننا للنا أن المتؽٌر ‪ x‬لد تؽٌرت لٌمته تماما و اصبحت ‪ 70‬بدل ‪7‬‬
‫أي انه فً هذه المرة سٌطبع ‪700 700 70‬‬

‫ارجوا ان ٌكون هذا الشرح البسٌط لد لرب األمور إلٌكم و أجاب على‬
‫بعض تساؤالتكم‬

‫‪nile‬‬

‫مشاهذة مهفه انشخصي‬

‫إرسال رسانت خاصت إنى‪nile‬‬

‫انبحث عن جميع مشاركاث‪nile‬‬

‫أضف ‪ nile‬إنى قائمت األصذقاء‬

‫‪#12‬‬

‫يوو أمس ‪, 11:20 PM‬‬

‫تاريخ انتسجيم‪: Feb 2008‬‬


‫انمشاركاث‪302,1 :‬‬
‫‪nile‬‬
‫االدارة‬

‫الــــــــ ‪Python‬‬ ‫رد‪ :‬دورة فى لغة‬

‫تسٌر األخطاء‬
‫تعتبر األخطاء فً البرمجة من أكبر األخطار التً تهدد البرنامج سواء من الجهة األمنٌة‬
‫(الثؽرات) أو من جهة الفعالٌة (السرعة و الثبات)‬
‫كما أن األخطاء تسبب اإلحباط للمبرمج و تنمص من فعالٌته و تركٌزه أثناء كتابة الكود و هذا ما‬
‫ٌؤدي إلى انخفاض مستوى انتاجٌة المبرمج و تهدر ولته و جهده‬
‫و المبرمج المتمكن هو الذي ٌستطٌع كتابة أكواد بألل عدد من األخطاء‬
‫و المبرمج المحترؾ هو الذي ٌستطٌع كتابة أكواد دون أخطاء تمرٌبا و ٌستطٌع أن ٌكتشؾ‬
‫األخطاء بنوعٌها (سنتكلم عن األنواع) من النظرة األولى للكود‬
‫و فً الحمٌمة ٌعتبر هذا المبرمج من صنؾ المطورٌن و لمد تكلمت فً الممال عن الفرق بٌن‬
‫المبرمج و المطور‬
‫و تنمسم األخطاء فً البرمجة إلى نوعٌن‬
‫األخطاء الكتابٌة ‪ :‬و هً األخطاء الكتابٌة فً الكود كنسٌان حرؾ أو كتابة عبارة مجهولة ال‬
‫تحتوٌها اللؽة مثال فً العوض ان نكتب ‪ else‬كتبنا ‪ elqe‬أو نسٌان النمطتٌن بعد عبارة ‪if ...‬‬
‫الخ‬
‫و هذا النوع من األخطاء هو األسهل فً اإلكتشاؾ ألنن بمجرد ان تنفد البرنامج سٌحدد لن‬
‫المفسر مكان الخطا فتموم بتصلٌحه‬
‫األخطاء المنطمٌة ‪ :‬كما ٌدل اسمها تعتبر هذه األخطاء منطمٌة أي ان الكود أو جزء منه ؼٌر‬
‫منطمً ترى الكود ٌنفد بدون مشاكل لكن ال ٌموم هذا الكود بعمله‬
‫و ال ٌعطٌنا النتابج المرجوة منه‬
‫مثال‬
‫كود‪PHP:‬‬
‫)'‪age=raw_input('enter your age :‬‬
‫‪if age>18:‬‬
‫'‪print' OK.........‬‬
‫‪else:‬‬
‫'‪print'NO...............‬‬

‫نفذوا هذا الكود عندكم سٌشتؽل دون مشاكل لكن ال ٌعطٌنا النتابج المرؼوبة ألنه ٌموم بطبع‬
‫الرسالة األولى بالرؼم اننا ادخلنا عدد ألل من ‪18‬‬
‫هذا احسن مثال عن األخطاء المنطمٌة‪.‬‬
‫الكود من الناحٌة الكتابٌة صحٌح لكن من الناحٌة المنطمٌة ؼٌر صحٌح‬
‫ألنن المتؽٌر ‪ age‬من النوع الحرفً و فً عبارة الشرط تعاملنا معه على أنه متؽٌر عددي‬
‫و لتصحٌح هذا الخطا ٌجب ان نحدد للمفسر أن المتؽٌر ‪ age‬متؽٌر عددي و ذلن بإضافة ‪int‬‬
‫فتصبح العبارة كالتالً‬
‫كود‪PHP:‬‬
‫))'‪age=int(raw_input('enter your age :‬‬

‫تعتبر األخطاء المنطمٌة األصعب على اإلطالق ألنه ٌصعب علٌنا اكتشافها و تتطلب لراءة الكود و‬
‫تحلٌله من األول إلى اآلخر‪.‬‬
‫و أرٌد أن أنوه أن إكتشاؾ األخطاء المنطمٌة ٌتطلب خبرة و ممارسة كبٌرة فً البرمجة و المدرة‬
‫على تحلٌل الكود و فهم كٌفٌة عمله منطمٌا أي انن لكً تكتشؾ األخطاء المنطمٌة ٌجب علٌن‬
‫التعامل مع هذه األخطاء بنفس نوعٌتها و ٌلزمن لهذا تحلٌل الكود و فهم طرٌمة عمله و هذا كما‬
‫للت ٌتطلب بعض الشٌا من الخبرة‬
‫توجد الكثٌر من الطرق للتملٌص من األخطاء المنطمٌة و الحد من خطورتها من هذه الطرق‬
‫•تنظٌم الكود و تمسٌمه إلى دوال بحٌث ان كل عمل معٌن تتكفل به دالة و هذا سٌفٌدنا بثالث‬
‫أمور‬
‫تنظٌم الكود‬
‫إكتشاؾ األخطاء المنطمٌة بسهولة و ذلن باإلتجاه مباشرتا للدالة التً ال تعمل جٌدا دون البحث‬
‫فً كافة الكود‬
‫اإلستفادة من الدوال فً اكواد أخرى و ذلن بحفظها على هٌبة مكتبة كما رأٌنا سابما‬
‫•استعمال طرٌمة تسٌر األخطاء‪try-except‬‬
‫تعتبر هذه الطرٌمة من أهم الطرق لتفادي األخطاء و تنظٌم الكود و هً ما ٌهمنا اآلن‬
‫شرح الطرٌمة‬
‫نحن كما سنرى بإذن هللا فً البرامج المستمبلٌة سٌتؽٌر شكل الكود تماما بحٌث انه ٌصبح ممسم‬
‫لعدة ألسام مثال ممسم لعدة دوال (او كالس ‪ class‬او ثرٌد )‪ thread‬و كل لسم او جزء مرتبط‬
‫باألجزاء األخرى بحٌث ان مخرجات جزء معٌن او باألحرى نتابجه تصب فً مدخالت جزء آخر‬
‫فلو فشل جزء من الكود سٌنهار البرنامج كامال و هذه تعتبر كارثة بأتم معنى الكلمة ألن الخطا‬
‫الواحد ٌمضً على البرنامج ككل‬
‫و كما للت المشارٌع المتوسطة او الضخمة تكون دابما ممسمة و ما ٌهمنا نحن ان ٌبمى‬
‫مشروعنا ٌعمل و ٌمدم النتابج للمستخدم حتى لو حدث خطا معٌن و لو حدث خطا ٌطبع‬
‫البرنامج للمستخدم سبب الخطا و ال ٌتولؾ عن العمل دون ابالغ المستخدم عن السبب ألنه لو‬
‫فعل هذا سٌعتبر برنامج ردٌا و سٌعتبر عمل مبتدبٌن و نحن بإذن هللا ال نرٌد ان نبرمج اكواد‬
‫مبتدبٌن‬

‫‪try-except‬‬
‫هً عبارة او عدة عبارات كما سنرى مهمتها تمسٌم الكود إلى عدة ألسام‬
‫لسم ٌموم بتنفٌد األوامر فً حالة عدم وجود مشاكل‬
‫و لسم آخر ٌموم بتنفٌد أوامر أخرى فً حالة وجود خطا و هنا بٌت المصٌد لن ٌتولؾ البرنامج‬
‫عند حدوث خلل بل سٌنفد المسم الثانً‬

‫و لبل أن ننطلك فً دراسة هذه التمنٌة ٌتوجب علٌنا تمسٌم األخطاء بطرٌمة أكثر تعمما‬
‫النوع األول – األسماء المجهولة‪- NameError‬‬
‫ٌحدث هذا الخطا عندما تكتب اسم لمتؽٌر ؼٌر معرؾ من لبل فعندما ٌصل المفسر لهذا اإلسم‬
‫ٌطبع رسالة خطا تنبؤن بأن هذا اإلسم مجهول‬
‫مثال نفرض أن اسم هذا المتؽٌر‪value‬‬
‫ستكون رسالة الخطا كالتالً‬
‫كود‪PHP:‬‬
‫‪Traceback (innermost last):‬‬
‫? ‪File "<stdin>", line 1, in‬‬
‫‪NameError: name 'value' is not defined‬‬

‫النوع الثانً –التمسٌم على الصفر‪- ZeroDivisionError‬‬


‫ٌحدث هذا الخطا عند تمسٌم عدد على الصفر و لد ٌرى البعض أنه خطا مستحٌل أن نمع فٌه‬
‫ألن الكل ٌعلم أنه ال ٌوجد عدد ٌمسم على الصفر لكنه ممكن الحدوث فً للب البرنامج فمثال لو‬
‫تطلب منا عمل حلمة و العدد الممسم علٌه ٌنمص بدرجة كل مرة فهنا ممكن ان ننسى هذا الخطا‬
‫رسالة الخطا‬
‫كود‪PHP:‬‬
‫‪Traceback (innermost last):‬‬
‫? ‪File "<stdin>", line 1, in‬‬
‫‪ZeroDivisionError: integer division or modulo by zero‬‬

‫النوع الثالث – األخطاء الكتابٌة‪- SyntaxError‬‬


‫كما رأٌناها سابما هً أخطاء تحدث عند الخطا فً كتابة عبارة معٌنة‬
‫رسالة الخطا‬
‫كود‪PHP:‬‬
‫‪SyntaxError: invalid syntax‬‬

‫النوع الرابع –أخطاء الفهرس‪- IndexError‬‬


‫تحدث هذه األخطاء عند التعامل مع السالسل أو الموابم و ٌحدث خطا فً تحدٌد الفهرس او رتبة‬
‫العنصر مثال تكون عندنا سلسلة تحتوي على ‪ 5‬عناصر و نحدد العنصر رلم ‪9‬‬
‫رسالة الخطا‬
‫كود‪PHP:‬‬
‫‪Traceback (innermost last):‬‬
‫? ‪File "<stdin>", line 1, in‬‬
‫‪IndexError: list index out of range‬‬

‫النوع الخامس‪-‬أخطاء عناصر الموامٌس‪- KeyError‬‬


‫هذا النوع من األخطاء متعلك بالموامٌس و ٌحدث هذا النوع عند تحدٌد عنصر ؼٌر موجود‬
‫بالماموس‬
‫مثال‬
‫كود‪PHP:‬‬
‫}‪aDict = {'host': 'earth', 'port': 80‬‬
‫]'‪print aDict['server‬‬

‫رسالة الخطا‬
‫كود‪PHP:‬‬
‫‪Traceback (innermost last):‬‬
‫? ‪File "<stdin>", line 1, in‬‬
‫‪KeyError: server‬‬

‫النوع السادس‪-‬أخطاء المدخالت و المخرجات‪- IOError‬‬


‫هذا النوع من األخطاء شابع كثٌرا و ٌحدث عندما ٌوجد خلل فً مدخالت المستخدم أو فً التعامل‬
‫مع الملفات و لواعد البٌانات‬
‫فمثال لو طلبنا من المستخدم ادخال عدد و ادخل حرؾ او طلبنا من المفسر فتح ملؾ و هذا الملؾ‬
‫ال ٌوجد بالجهاز او طلبنا منه حجز بٌنات و ال ٌوجد اتصال مع لاعدة البٌانات‪.....‬‬
‫طبعا لكل حالة من هذه الحاالت رسالة معٌنة لكنها تشترن ب ‪ IOError‬فكلما تجد هذه العبارة‬
‫اعلم ان الخطا ٌكمن فً المدخالت او المخرجات‬
‫و هذا مثال ٌوضح ذلن بحٌث اننا طلبنا من المفسر فتح ملؾ ؼٌر موجود أصال بالجهاز‬
‫رسالة الخطا‬
‫كود‪PHP:‬‬
‫)"‪f = open("blah‬‬
‫‪Traceback (innermost last):‬‬
‫? ‪File "<stdin>", line 1, in‬‬
‫'‪IOError: [Errno 2] No such file or directory: 'blah‬‬

‫النوع السابع‪ -‬اخطاء اسناد الكالس‪- AttributeError‬‬


‫هذا النوع من األخطاء مرتبط بالبرمجة الموجهة بحٌث انه ٌحدث عندما نسند لكالس مٌثود ؼٌر‬
‫معرفة أو ؼٌر موجودة أصال‪.‬‬
‫سنرى هذا مستمبال‬
‫رسالة الخطا‬
‫كود‪PHP:‬‬
‫‪Traceback (innermost last):‬‬
‫? ‪File "<stdin>", line 1, in‬‬
‫‪AttributeError‬‬
‫هنا نكون لد بٌنا كل انواع األخطاء البرمجٌة و ٌفٌدنا هذا فً معرفة سبب الخطا و تحدٌد مكانه‬
‫كما سٌفٌدنا أٌضا معرفة نوع الخطا فً اختٌار الرسالة المثلى للخطا كما سنرى‪.‬‬

‫استعمال‪try-exept‬‬

‫كما للنا سابما تفٌدنا هذه العبارة أو الطرٌمة فً تسٌر األخطاء و تجنب فشل تنفٌد البرنامج عند‬
‫حدوث خطا و تفٌدنا أٌضا فً ابالغ المستخدم بنوع الخطا و اسباب حدوثه‬
‫و كما نالحظ أن هذه العبارة تنمسم إلى لسمٌن‬
‫كود‪PHP:‬‬
‫‪try :‬‬
‫ُْا َضع انكٕد أٔ األٔايش انر‪ ٙ‬سرُفذ ف‪ ٙ‬انذانح انعاد‪ٚ‬ح أ٘ إرا نى‬
‫‪ٚ‬ذذز خطئ‬

‫كود‪PHP:‬‬
‫‪execpt : Exception[, reason]:‬‬
‫ُْا َضع األٔايش انر‪ ٙ‬سرُفذ عُذ دذٔز خهم ف‪ ٙ‬انرُف‪ٛ‬ذ ٔ َسرط‪ٛ‬ع كزن‬
‫ك ٔضع سسانح نرُث‪ ّٛ‬انًسرخذو تانخطئ ٔ سثة دذٔثّ‬

‫مثال‬
‫كود‪PHP:‬‬
‫}'‪name={'user1':'ab256','user2':'9857oki','user3':'8fgd5ft‬‬
‫)'‪search=raw_input('enter the name :‬‬
‫)‪name.pop(search‬‬

‫هذا الكود ٌموم بحذؾ إسم من الماموس جربوا هذا الكود عندكم و ادخلو اسم ال ٌوجد فً‬
‫الماموس‬
‫ماالذي سٌحدث؟؟‬
‫سٌتولؾ البرنامج تماما و ٌطبع لنا المفسر رسالة خطا‪.‬‬
‫طٌب نحن اآلن لمنا بكتابة هذا الكود و سنموم بتصحٌح الخطا لكن لو كان هذا الكود جزء من‬
‫كود كبٌر لمشروع و حدث هذا الخطا‪.‬‬
‫ستكون النتابج وخٌمة جدا ألن البرنامج سٌتولؾ عن العمل و سٌتولؾ النظام أو ٌبطا لدلابك‪.‬‬
‫إذا سنستؽل الطرٌمة التً رأٌناها بحٌث إذا حدث خطا لن ٌتولؾ البرنامج بل ٌطبع لنا رسالة‬
‫تنبؤنا بسبب الخطا‬
‫كود‪PHP:‬‬
‫}'‪name={'user1':'ab256','user2':'9857oki','user3':'8fgd5ft‬‬
‫)'‪search=raw_input('enter the name :‬‬
‫‪try:‬‬
‫)‪name.pop(search‬‬
‫‪except Exception,e:‬‬
‫‪print e‬‬

‫نفس البرنامج ولكننا أدخلنا علٌه عبارة ‪try-except‬‬


‫داخل عبارة ‪ try‬لمنا بوضع األوامر التً ستنفد فً حالة وجود اإلسم داخل الماموس‪.‬‬
‫داخل عبارة ‪ except‬أضفنا أمامها كلمة ‪ Exception‬و التً تعنً سبب الخطا ثم فاصلة و‬
‫تلٌها ‪ e‬و هذا األخٌر سٌحجز داخله عبارة تبٌن سبب الخطا أي نستطٌع أن نعتبره متؽٌر ٌحجز‬
‫داخله الرسالة التً سٌرسلها النظام فً حالة وجود خطا‬
‫طبعا نستطٌع استبدال ‪ e‬بأي حرؾ آخر و لكن المتعارؾ علٌه فً كل لؽاة البرمجة استعمال‬
‫حرؾ ‪e‬‬
‫‪e‬هذا سٌحجز لنا سبب الخطا و نستطٌع التصرؾ فً الرسالة كما نرٌد‬
‫مثال‬
‫كود‪PHP:‬‬
‫‪except Exception,e:‬‬
‫‪print "Error Invalid entry‬‬ ‫‪!",e‬‬

‫و ماٌهمنا أن البرنامج سٌواصل العمل مهما أدخل المستخدم‬


‫مثال ثانً‬
‫سٌبٌن لنا هذا المثال فابدة عبارة ‪ try-except‬أكثر‬
‫لدٌنا دالة محجوزة للؽة الباٌثون اسمها )(‪ float‬تموم بتحوٌل األعداد من صٌؽتها األصلٌة إلى‬
‫صٌؽة ‪float‬‬
‫مثال جربوا لدٌكم‬
‫كود‪PHP:‬‬
‫)‪print float(54158‬‬

‫طٌب لو أدخلنا بدل األعداد أحرؾ سٌحدث خطا وهذا طبٌعً‬


‫كود‪PHP:‬‬
‫)‪print float('qsdzs‬‬

‫و ستكون رسالة الخطا كالتالً‬


‫كود‪PHP:‬‬
‫‪Message‬‬ ‫‪File Name‬‬ ‫‪Line‬‬ ‫‪Position‬‬
‫‪Traceback‬‬
‫>‪<module‬‬ ‫>‪<Module1‬‬ ‫‪1‬‬
‫‪exceptions.NameError: name 'qsdzs' is not defined‬‬

‫طٌب انا للت أن حدوث الخطا فً هذه الحالة طبٌعً جدا ألن هذه الدالة مخصصة لألعداد و لٌس‬
‫لألحرؾ لكن الذي لٌس طبٌعً لنا هو تولؾ البرنامج عن العمل و دابما ألول ضعوا فً حسبانكم‬
‫المشارٌع الكبٌرة خطا بسٌط كهذا سٌسبب لنا كارثة‬
‫طٌب سنتعامل مع إمكانٌة حدوث هذا الخطا بواسطة‪try-except‬‬
‫سنعمل دالة اسمها ‪ float1‬تموم بنفس عمل األولى لكنها أأمن من األولى‬
‫كود‪PHP:‬‬
‫‪def float1(obj):‬‬
‫‪try:‬‬
‫)‪retval = float(obj‬‬
‫‪except :‬‬
‫"‪message = "could not convert non-number to float‬‬
‫‪return message‬‬

‫)'‪print float1('uu‬‬

‫نستطٌع أٌضا أن نحدد أو نتولع نوع الخطا الممكن الولوع لكً نساعد المفسر على طباعة‬
‫الرسالة المناسبة‬
ValueError‫فً حالتنا هذه نوع الخطا متعلك بالمتؽٌر و تسمى هذه األخطاء بـ‬
ً‫و نموم بتعدٌل المسم الثانً من الكود فٌصح كالتال‬
PHP:‫كود‬
except ValueError :
message = "could not convert non-number to float"
return message

except ‫استعمال أكثر من‬

‫إذا كان لدٌنا تولع بحدوث أكثر من خطا فً لسم معٌن من الكود نستطٌع أن نعالج هذا الوضع‬
ً‫ على النحو التال‬except ‫بإدراج أكثر من عبارة‬
PHP:‫كود‬
except Exception1[, reason1]:
suite_for_exception_Exception1
except Exception2[, reason2]:
suite_for_exception_Exception2
:

ً‫فٌصبح الكود كالتال‬


PHP:‫كود‬
def float1(obj):
try:
retval = float(obj)
except ValueError:
retval = 'could not convert non-number to float'
except TypeError:
retval = 'object type cannot be converted to float'
return retval

print float1('a')

ً‫كما أننا نستطٌع ان نجمع عدة احتماالت فً عبارة واحدة على النحو التال‬
PHP:‫كود‬
except (Exception1, Exception2)[, reason]:
suite_for_Exception1_and_Exception2

ً‫فٌصبح الكود على النوح التال‬


PHP:‫كود‬
def float1(obj):
try:
retval = float(obj)
except (ValueError, TypeError):
retval = 'argument must be a number or numeric string'
return retval

print float1(())
print float1('rr')
print float1([])

‫طٌب اآلن لو أردنا أن نكتفً من عناء كتابة رسابل األخطاء أو إن أردنا أن تكون رسابل األخطاء‬
‫ذات صٌؽة احترافٌة أي تكون كالتً ٌطبعها لنا المفسر عند حدوث خطا هنا ٌتوجب علٌنا‬
‫استعمال الطرٌمة التالٌة‬
‫‪-‬نبمى مع نفس المثال‪-‬‬
‫كود‪PHP:‬‬
‫‪def float1(object):‬‬
‫‪try:‬‬
‫)‪message = float(object‬‬
‫‪except (ValueError, TypeError), diag:‬‬
‫)‪message= str(diag‬‬
‫‪return message‬‬

‫)‪print float1(22‬‬
‫)'‪print float1('rr‬‬

‫كما نالحظ بمً المثال على حاله و لكننا اضفنا علٌه العبارة التالٌة‬
‫كود‪PHP:‬‬
‫)‪message= str(diag‬‬

‫هنا طلبنا من المفسر أن ٌحول لنا الخطا إلى صٌؽة )‪ string(str‬حتى نتمكن من طباعته‬
‫للمستخدم‬
‫طبعا لٌست هذه الطرٌمة مفٌدة دابما ألنه لو كان لدٌنا برنامج ٌتعامل مع مستخدمٌن عادٌٌن‬
‫ٌتوجب علٌنا عمل رسابل سهلة و مفهومة لهم و لو كان برنامجنا ٌتعامل مع مستخدمٌن‬
‫محترفٌن هنا ستكون هذه الطرٌمة هً المثلى‬

‫نتولؾ عند هذا الحد سنواصل ما تبمى من هذا الدرس فً الدرس الممبل بإذن هللا‬

‫تم بحمد هللا‬

‫تعطٌنا لؽة الباٌثون الخٌار باستعمال عبارة ‪ else‬مع عبارة ‪ try-except‬إذا تطلبت الحاجة لذلن‬
‫و ٌكون جسم التشكٌلة كالتالً‬
‫كود‪PHP:‬‬
‫‪try:‬‬
‫‪A‬‬
‫‪except MyException:‬‬
‫‪B‬‬
‫‪else:‬‬
‫‪C‬‬

‫فنبتدئ بعبارة ‪ try‬و اذا حدث خطا ٌنتمل المفسر لتنفٌد أوامر عبارة ‪except‬‬
‫وهنا نضع مالحظة‬
‫ّ‬
‫عبارة ‪ else‬فً هذه الحالة ستنفد إال إذا نجحت عبارة ‪ try‬أي ان المفسر لم ٌواجه أي خطا‬
‫كود‪PHP:‬‬
‫‪try:‬‬
‫ْزِ انشسانح سرطثع إرا نى ‪ٚ‬ذذز خطئ » ‪print‬‬
‫‪except MyException:‬‬
‫» ‪print‬‬
‫» إرا دذز خطئ ٔ نى ذطثع انشسانح األٔنٗ ْزِ انشسانح ْ‪ ٙ‬انر‪ ٙ‬سرطثع‬
‫‪else:‬‬
‫» ‪print‬‬
‫ْزِ انشسانح سرطثع عُذ َجاح انًفسش ف‪ ٙ‬طثاعح انشسانح األٔنٗ‬ ‫»‬

‫مثال‬
‫كود‪PHP:‬‬
‫))'‪x=int(raw_input('Entrer votre age‬‬
‫‪try:‬‬
‫‪c=x+8‬‬
‫‪print c‬‬
‫‪except Exception, e:‬‬
‫‪print "Error",e‬‬
‫‪else:‬‬
‫"‪print"operation terminer avec sucsses‬‬

‫إذا فً هذا المثال إذا نجح الكود ستطبع رسالة ‪ else‬و التً ستنبا المستخدم بنجاح العملٌة‬
‫سنعود لهذا المثال بعد للٌل‬
‫عبارة‪finally‬‬
‫دابما نبمى مع ابداعات هذه اللؽة الرابعة‬
‫تتٌح لنا لؽة باٌثون استعمال عبارة أخرى و هً عبارة ‪ finally‬و توضع هذه العبارة آخر التشكٌلة الهرم‬
‫على الشكل التالً‬
‫كود‪PHP:‬‬
‫‪try:‬‬
‫‪A‬‬
‫‪except MyException:‬‬
‫‪B‬‬
‫‪else:‬‬
‫‪C‬‬
‫‪finally:‬‬
‫‪D‬‬

‫و عمل هذه العبارة أن المفسر ٌنفد أوامرها مهما حدث سواء نجح المفسر فً تنفٌد الكود أم لم ٌنجح‬
‫كود‪PHP:‬‬
‫‪try:‬‬
‫ْزِ انشسانح سرطثع إرا نى ‪ٚ‬ذذز خطئ » ‪print‬‬
‫‪except MyException:‬‬
‫» ‪print‬‬
‫» إرا دذز خطئ ٔ نى ذطثع انشسانح األٔنٗ ْزِ انشسانح ْ‪ ٙ‬انر‪ ٙ‬سرطثع‬
‫‪else:‬‬
‫» ‪print‬‬
‫ْزِ انشسانح سرطثع عُذ َجاح انًفسش ف‪ ٙ‬طثاعح انشسانح األٔنٗ‬ ‫»‬
‫‪finally:‬‬

‫» ‪Print‬‬
‫يًٓا ‪ٚ‬ذذز ف‪ ٙ‬انذاالخ األٔنٗ سرطثع ْزِ انشسانح سٕاء َجخ انثشَايج‬
‫»أو نى ‪ُٚ‬جخ‬

‫مالحظة‪:‬‬
‫استعمال عبارة ‪ else‬او عبارة ‪ finally‬اختٌاري و لٌس اجباري و هذا ٌرجع إلحتٌاجات المبرمج إلتمام‬
‫الكود أو ٌرجع لخصوصٌات الكود و الحالة فكل حالة لها خصوصٌات تتمٌز بها فهنا انت أخً المارئ الذي‬
‫تختار بٌن هذه العبارات و الطرق ما ٌناسب برنامجن‪.‬‬

‫طٌب نرجع اآلن للمثال السابك‬


‫اعد تنفٌد ذلن المثال و أدخل حرؾ بدل عدد ؟‬
‫سٌتولؾ البرنامج‪.‬‬
‫و نحن مللنا من هذا األسلوب البدابً ألنه لو اخطا المستخدم و أدخل حرؾ أو لم ٌفهم جٌدا ما طلبه منه‬
‫البرنامج فأدخل اسمه سٌتولؾ البرنامج بسبب هذا الخطا البسٌط‪.‬‬
‫و بما أننا درسنا طرق تسٌر األخطاء سنعدل علٌه للٌال حتى نعطٌه صفة البمة‬
‫كود‪PHP:‬‬
‫‪try:‬‬
‫‪try:‬‬
‫))' ‪x=int(raw_input('Entrer votre age :‬‬
‫‪c=x+8‬‬
‫‪except Exception,e:‬‬
‫‪print "Error ",e‬‬
‫‪except Exception,e:‬‬
‫‪print"Error ",e‬‬

‫استعملنا عبارة ‪ try‬داخل عبارة ‪ try‬أخرى و هذا امر عادي ألننا كما للت نستعمل هذه العبارات بما ٌناسب‬
‫الحالة التً نحن بصددها‪.‬‬
‫إذا ‪ try‬الثانٌة تموم بمعالجة مدخالت المستخدم فإذا كانت صحٌحة اضٌفة لها ‪ 8‬أما ان حذث خطا سٌنتمل‬
‫المفسر لعبارة ‪ except‬و التً بدورها ستطبع للمستخدم سبب الخطا‬
‫و فً هذه الحالة لن ٌتولؾ البرنامج مها حدث و هذا الذي ٌهمنا‪.‬‬

‫هذا كل شٌا بالنسبة لتسٌر األخطاء فً الولت الراهن مازالت بعض األمور لم ندرسها و لكننا سنراها فً‬
‫التطبٌمات بإذن هللا و كل مرة نصل لشٌا جدٌد سنتولؾ لشرحه ألنً وجدت صعوبة فً وضع األمثلة‬
‫المناسبة لهذا الموضوع فكل األمثلة الخاصة بتٌسر األخطاء تكون متمدمة جدا‪.‬‬
‫ما أطلبه منكم اآلن هو استٌعاب األشٌاء التً رأٌناها فً هذا المحور لٌس بالضرورة فهمها و تطبٌمها و إنما‬
‫اخذ صورة صحٌحة عنها ألن معالجة األخطاء موضوع كبٌر جدا و ٌتطلب الخبرة و الممارسة أكثر من‬
‫الدراسة‪.‬‬

‫سنعود بإذن هللا للدوال فً الدرس الممبل لكً ننهٌها سنتعلم بعض األمور الجدٌدة ثم ننتمل مباشرتا للملفات‬
‫تم بحمد هللا‬

‫]‪[/size‬‬

‫‪nile‬‬

‫مشاهذة مهفه انشخصي‬

‫إرسال رسانت خاصت إنى‪nile‬‬

‫انبحث عن جميع مشاركاث‪nile‬‬

‫أضف ‪ nile‬إنى قائمت األصذقاء‬

‫‪#13‬‬

‫يوو أمس ‪, 11:23 PM‬‬

‫تاريخ انتسجيم‪: Feb 2008‬‬


‫انمشاركاث‪302,1 :‬‬
‫‪nile‬‬
‫االدارة‬
‫الــــــــ ‪Python‬‬ ‫رد‪ :‬دورة فى لغة‬

‫نعود للدوال‬
‫سنحاول فً هذا الدرس أن نطور فً أسلوبنا فً الكاتبة حتى ال نواجه صعوبات فً الدروس المادمة و‬
‫سنحاول أٌضا أن نتعلم كٌفٌة تنظٌم الكود ألن المشارٌع المستمبلٌة ال تخلو من الدوال بحٌث ان المشروع‬
‫المتوسط ٌحتوي على أكثر من ‪ 10‬دوال حتى ولو درسنا البرمجة الموجهة و‬
‫استعملنا الكالس سنبمى نحتاج للدوال‬
‫فلو وضعنا فً حسبننا كثرة الدوال فً الكود و ضؾ لذالن تعدد مهام البرنامج بحٌث أن كل دالة تموم بعمل‬
‫معٌن و كل دالة تعتمد على نتابج دالة أخرى و هذه األخٌرة تمدم نتابجها لدالة أخرى و هكذا‪.....‬‬
‫و هنا ٌتوجب علٌنا التعامل مع هذه التشكٌلة بحذر شدٌد كما ٌتوجب علٌنا تنظٌم الكود بحٌث لو فتحنا الكود‬
‫مرة أخرى ٌسهل علٌنا فهم محتواه او لو لرء الكود مبر مج آخر ٌستطٌع فهم هذا الكود‬

‫كما أننا ذكرنا سابما أن تنظٌم الكود و تمسٌمه إلى عدة دوال ٌسهل علٌنا اكتشاؾ األخطاء و تصحٌحها و‬
‫ٌسهل علٌنا أٌضا التطوٌر فً هذا الكود مستمبال‪.‬‬

‫لعمل برنامج منظم و آمن نسبٌا ٌتوجب علٌنا أن نضع فً حسباننا عدة معاٌر منها‬

‫أوال أن ٌستدعً الكود أكثر من مكتبة أو على األلل مكتبة واحدة‬


‫أن ٌكون الكود ممسم إلى دوال حسب مهامه‬
‫أن ٌكون الكود الربٌسً مكتوب داخل دالة تسمى دالة‪main‬‬
‫أن نستعمل فٌه طرق تسٌر األخطاء‬
‫أن ٌكون الكود مدعم بعبارات لشرح مهمة كل لسم‬
‫أن تحتوي كل دالة على جملة تبٌن مهمتها و إن كانت هذه الدالة مطورة نضع الرلم التسلسلً لهذه الدالة‬
‫‪version‬‬

‫هذه هً أهم المعاٌٌر لعمل مشروع آمن و منظم من جهة و ٌكون ذو نكهة احترافٌة من جهة أخرى أي أنن‬
‫اخري المارئ لو احترمت هذه المعاٌٌر تستطٌع أن تطرح مشروعن على النت بفخر‬
‫تبمى معاٌٌر أخرى لم أذكرها اآلن من أهمها رخصة المشروع و سنتولؾ عندها فً المراحل المستمبلٌة‪.‬‬
‫اآلن سنشرح النماط المذكورة بسرعة‬
‫أستندعاء المكاتب ‪:‬ال ٌخفى علٌكم اخوانً المراء أن المشروع الذي ال ٌستدعً مكتبة أو أكثر ٌعتبر مشروع‬
‫ردٌا ألن المكاتب وجدت لكً تعٌن المبرمج و تختصر علٌه الولت كما أنها وجدت إلنشاء برامج تحتوي على‬
‫أعمال ال تستطٌع اللؽة المٌام بها كابرمجة الشبكات (اإلتصاالت المربٌة السمعٌة) أو التعامل مع برامج عالمٌة‬
‫مشهورة او استؽالل موارد النظام و اللتحكم به و استعمال بروتوكوالت الشبكات ‪...‬الخ‬
‫فنحن كطالب للؽة الباٌثون سٌأتً الولت الذي سننهً فٌه دراسة هذه اللؽة بإذن هللا م الذي سنفعله فً ذلن‬
‫الولت ؟؟تبمى تبرمج برامج بسٌطة ال‬
‫أطلك العنان لخٌالن و ابحث عن مكاتب جدٌدة و حاول أن تستؽلها فً برامجن ألن المكاتب انشبت لهذا السبب‬

‫ثانٌا تمسٌم الكود ‪ :‬ذكرنا سابما الفابدة من تمسٌم الكود لعدة الدوال و سنطبك بعض األمثلة فً هذا الدرس و‬
‫ارٌد أن انوه لفابدة أخرى من استعمال الدوال تتجلى فً استؽاللها فً برامج و مشارٌع أخرى فأنت نثال عندما‬
‫تستعمل أكثر من دالة و مع مرور الولت سٌتضح أسلوبن و ستستطٌع أن تمٌز أكثر األعمال التً تموم بها و‬
‫تحتاجها (حسب نوعٌت عملن) هنا ماعلٌن سوى حفظ هذه الدوال و استدعابها كلما دعت الحاجة فتختصر‬
‫على نفسن الجهد و الولت‬
‫النماط المتبمٌة سنبتدئ بها الدرس‬

‫أوال معلومات الدالة‬

‫فً الحاالت المتمدمة و عندما ٌكون ٌحتوي على العدٌد من الدوال و إذا كانت الدالة تحتوي على الكثٌر من‬
‫السطور أو كان عملها معمد نوعا ما ٌستحسن أن نضٌؾ لها بعض السطور التً تبٌن عملها و دورها فً‬
‫الكود و ٌكون ذلن على الشكل التالً‬
‫كود‪PHP:‬‬
‫‪def a():‬‬
‫‪return a+a‬‬
‫‪a.__doc__='function a() added‬‬ ‫‪a to a‬‬ ‫'‬

‫__‪print a.__doc‬‬

‫كما نالحظ لمنا بإضافة معلومات عن الدالة‪a‬‬


‫و ذلن بواسطة العبارة‬
‫__‪a.__doc‬‬
‫و لكً تتحصل على السطر الذي ٌسبك اسم الدالة و السطر الذي ٌلً اإلسم ماعلٌن إال الضؽط على رلم ‪8‬‬
‫العلوي مرتبن‬

‫و كل ما ٌكتب بٌن خطٌن فً لؽة الباٌثون ٌعتبر ب ّناء للكالس ‪constructeur‬‬


‫و سنشرح طرٌمة عمله عندما نصل لمحور البرمجة الموجهة‬
‫و نستطٌع أن نعرؾ مهام الدالة بطرٌمة أخرى‬
‫كود‪PHP:‬‬
‫‪def a():‬‬
‫‪'function a() added‬‬ ‫‪a to a‬‬ ‫'‬
‫‪return a+a‬‬
‫__‪print a.__doc‬‬

‫و كال الطرٌمتٌن تعطٌنا نفس النتابج و إذا أردت ان تمرء المعلومات الخاصة بالدالة ماعلٌن إلى طباعة األمر‬
‫__‪__doc‬بعد اسم الدالة‬
‫كود‪PHP:‬‬
‫__‪print name of function.__doc‬‬

‫تمكنن هذه الطرٌمة من وضع كل المعلومات التً تحتاجها انت أو أي مبرمج آخر بحٌث أن هذا األخٌر ٌستطٌع‬
‫فهم الدالة و طرٌمة عملها بسهولة عند لراءة التعرٌفات التً لمت بإضافتها انت‪.‬‬
‫و اذا كنت بصدد تطوٌر برنامج فحتما ستطور الدوال الخاصة به و تضٌؾ علٌها بعض الخصابص ففً‬
‫هذه الحالة ٌتوجب علٌن اضافة الرلم التسلسلً للنسخة الدالة و ذلن بواسطة السطر التالً‬
‫كود‪PHP:‬‬
‫‪def a():‬‬
‫‪'function a() added‬‬ ‫‪a to a‬‬ ‫'‬
‫‪return a+a‬‬

‫'‪a.__version__='1.0‬‬

‫__‪print a.__doc‬‬
‫__‪print a.__version‬‬

‫طبعا نحن فً هذه المرحلة لن نستعمل هذه األمور كثٌرا و لكنً أردت أن أذكرها من باب األمانة العلمٌة و من‬
‫الباب التذكٌر حتى إذا وصلنا إلٌها لن نحتاج لتكرار شرحها‬
‫كما أنه ٌتوجب علٌن أخً المارئ أن تعود نفسن على إضافة هذه األمور على أكوادن حتى تطفً علٌها صفة‬
‫احترافٌة‬
‫و ٌتوجب علٌنا اٌضا من اآلن فصاعدا إضافة سطور‬
‫تعرٌفٌة لبل كل دالة أو لبل كل مهمة فً الكود و ذلن بإضافة لبل بداٌة السطر عالمة‪#‬‬
‫كود‪PHP:‬‬
‫‪def a():‬‬
‫‪#début de la fonction‬‬
‫‪'function a() added a to a‬‬ ‫'‬
‫‪return a+a‬‬
‫‪#fin de la fonction‬‬
‫'‪a.__version__='1.0‬‬

‫__‪print a.__doc‬‬
‫__‪print a.__version‬‬

‫إذا راٌنا لحد اآلن ثالث طرق تساعدنا فً توضٌح عمل الدوال و اضافة معلومات خاصة بهذه الدوال‬

‫إما عن طرٌك'*************'=__‪name function.__doc‬‬


‫أو عن طرٌك وضع هذه نفس السطور أعلى الدالة بٌن عالمتٌن''‬

‫كما رأٌنا الطرٌمة الثالثة و هً صالحة لكافة الكود و لٌس فمط للدوال و هً وضع عالمة ‪ #‬لبل السطر الذي‬
‫ترٌد وضعه و رأٌنا أٌضا كٌفٌة وضع الرلم التسلسلً لنسخة الدالة‬

‫ثانٌا تنظٌم الدوال‬

‫للنا لبل للٌل أنه ٌتوجب علٌنا تنظٌم الكود و تمسٌمه لعدة الدوال و كتابة الكود الربٌسً داخل دالة تسمى‬
‫‪main‬‬
‫بحٌث أن كل لؽات البرمجة تستعمل هذه الطرٌمة‬

‫فٌكون جسم الكود كالتالً‬

‫إستدعاء المكتبة األولى‬


‫أستدعاء المكتبة الثانٌة‬
‫استدعاء ‪.....‬المكتبة ‪....‬الخ‬

‫هنا إذا اردت التوضٌح ٌمكنن وضع اسم البرنامج و تارٌخ كتابة الكود و اسم الكاتب أو اسم المنظمة او‬
‫المؤسسة التً كتبت الكود‬
‫كما ٌمكنن وضع إٌمٌلن الشخصً و كل هذا ٌأتً لبله عالمة‪#‬‬

‫فً هذا المسم ٌبدئ جسم الكود بحٌث أن كل الدوال التً ٌحتوٌها الكود تكتب تحت بعضها البعض‬

‫الدالة األولى‬
‫الدالة الثانٌة‬
‫الدالة الثالثة‬
‫الدالة‪....‬الخ‬

‫و عند اإلنتهاء من كتابة الدوال ٌأتً المسم الربٌسً للكود و الذي كنا نكتبه من لبل فً الفراغ أي ال تحتوٌه‬
‫أي دالة لكن من اآلن فصاعدا سنكتب هذا الجزء داخل الدالة الربٌسٌة التً تسمى‪main‬‬

‫الدالة‪main‬‬
‫هنا نضع جسم الكود‬

‫و فً األخٌر نستدعً الدالة الربٌسٌة و ٌنفذ البرنامج‬


‫باختصار ٌكون جسم الكود كالتالً‬
‫كود‪PHP:‬‬
‫‪import xxx‬‬
‫‪from xxxxx import yyyyyy‬‬
‫‪# name of programme xxxxxxxxxxxx‬‬
‫‪#writen by xxxxxxxxxxxxxxx‬‬
‫‪# date xx/xx/xx/‬‬
‫‪# Email xx@xxx.com‬‬
‫‪# site of xxxxx‬‬ ‫‪www.xxxxxxx.com‬‬

‫‪def function1():‬‬
‫‪xxxxxxxxxxxxxxxxx‬‬
‫‪def function2():‬‬
‫‪xxxxxxxxxxxxxxxxx‬‬
‫‪def function3():‬‬
‫‪xxxxxxxxxxxxxxxxx‬‬

‫‪def main():‬‬
‫‪xxxxxxxxxxxxxxxxxx‬‬
‫‪xxxxxxxxxxxxxxxxxx‬‬
‫‪xxxxxxxxxxxxxxxxxx‬‬

‫‪if __name__ == '__main__':‬‬


‫)(‪main‬‬

‫باإلضافة أن هذه الطرٌمة هً المعمول بها عالمٌا ستفٌدنا أٌضا فً تنظٌم الكود و تجنب البحث المطول عن‬
‫األخطاء كما أنها تساعد فً زٌادة التركٌز أثناء كتابة أو لراءة الكود‬
‫و اآلن سنموم بكتابة كود بسٌط نطبك فٌه كل ماراٌناه‬

‫هو عبارة عن برنامج ٌمثل لعبة لألوالد الصؽار ٌموم بعرض عملٌة على الشاشة ثم ٌطلب منن نتٌجة العملٌة‬
‫فإذا كان الجواب صحٌح ٌمر للعملٌة أخرى و إذا كان الجواب خاطا ٌعٌد نفس العملٌة مرتبن فإن لم ٌتمكن‬
‫الطفل من اإلجابة ٌظهر له البرنامج الجواب الصحٌح ثو ٌعٌد علٌه نفس السؤال‬

‫أوال استدعاء المكاتب‬


‫سنحتاج لمكتبتٌن‬
‫األولى اسمها ‪operatort‬‬
‫و تحتوي هذه المكتبة على العدٌد من المعامالت الرٌاضٌة‬
‫و المكتبة الثانٌة سبك و تعاملنا معها و هً مكتبة‪random‬‬

‫كود البرنامج‬
‫كود‪PHP:‬‬
‫‪from operator import add, sub‬‬
‫‪from random import randint, choice‬‬

‫}‪ops = {'+': add, '-': sub‬‬


‫‪MAXTRIES = 2‬‬

‫‪def doprob():‬‬
‫)'‪op = choice('+-‬‬
‫])‪nums = [randint(1,10) for i in range(2‬‬
‫)‪nums.sort(reverse=True‬‬
‫)‪ans = ops[op] (*nums‬‬
‫)]‪pr = '%d %s %d = ' % (nums[0], op, nums[1‬‬
‫‪oops = 0‬‬
‫‪while True:‬‬
‫‪try:‬‬
‫‪if int(raw_input(pr)) == ans:‬‬
‫'‪print 'correct‬‬
‫‪break‬‬
‫‪if oops == MAXTRIES:‬‬
‫)‪print 'answer\n%s%d'%(pr, ans‬‬
‫‪else:‬‬
‫'‪print 'incorrect... try again‬‬
‫‪oops += 1‬‬
‫‪except (KeyboardInterrupt,‬‬
‫‪EOFError, ValueError):‬‬
‫'‪print 'invalid input... try again‬‬

‫‪def main():‬‬
‫‪while True:‬‬
‫)(‪doprob‬‬
‫‪try:‬‬
‫)(‪opt = raw_input('Again? [y]').lower‬‬
‫‪if opt and opt[0] == 'n' :‬‬
‫‪break‬‬
‫‪except (KeyboardInterrupt, EOFError):‬‬
‫‪break‬‬

‫‪if __name__ == '__main__':‬‬


‫)(‪main‬‬

‫شرح البرنامج‬
‫كود‪PHP:‬‬
‫‪from operator import add, sub‬‬
‫‪from random import randint, choice‬‬

‫أوال لمنا باستدعا المكتبتٌن كالعادة و الجدٌد هنا أننا لم نستدعً كل المكتبة بل استدعٌنا دالتٌن من كل مكتبة‬
‫و هذا بواسطة العبارة‪from‬‬

‫أي من المكتبة ****استدعً***** و****‬


‫و تفٌدنا هذه المٌزة فً التخفٌؾ على المفسر و تسرٌع البرنامج‬
‫‪add‬و ‪sub‬معامالن األول ٌعنً الحمع و الثانً ٌعنً الطرح وهما مرادفان ل‪ +‬و‪-‬‬

‫و الدالة ‪ randint‬تعمل نفس عمل ‪ random‬و لكن اإلختالؾ بٌنهما ان هذه الدالة التً استدعٌناها تتعامل‬
‫مع األعداد فمط من نوع‪int‬‬

‫‪ٌchoice‬ساعدنا فً التعرؾ على اختٌار المستخدم دون استعمال الجمل الشرطٌة كما اعتدنا فهذه الدالة‬
‫تتكل بالتعرؾ على إختٌار المستخدم و التعامل معه‬
‫كود‪PHP:‬‬
‫}‪ops = {'+': add, '-': sub‬‬
‫‪MAXTRIES = 2‬‬

‫لمنا بانشاء لاموس ٌسند لكل معامل العالمة المطابمة له ألن المستخدم لن ٌدخل عبارة ‪ add‬بل سٌدخل‬
‫عالمة ‪ +‬و‬
‫ولهذا لمنا بانشاء الماموس‪ops‬‬
‫لكً ٌنشا لنا عاللة بٌن النعامل المستدعً من المكتبة و العالمة التً ادخلها المستخدم‬
‫كود‪PHP:‬‬
‫‪MAXTRIES = 2‬‬

‫ٌعبر هذا المتؽٌر عن عدد المحاوالت الخاطبة المسموح بها لبا اظهار اإلجابة الصحٌحة للمستخدم‬

‫هذا المسم األول من الكود لمنا فٌه باستدعاء المكاتب التً نحتاجها كما عرفنا‬
‫المتؽٌرات األساسٌة التً ٌحتاجها البرنامج و تستطٌع أخً المارئ أن تضٌؾ هنا تعرٌؾ للكود مثال أن تكتب‬
‫كود‪PHP:‬‬
‫‪#Randomly chooses numbers and an arithmetic function,‬‬
‫‪#displays the question, and verifies the results.Shows answer after t‬‬
‫‪hree wrong tries‬‬
‫‪#and does not continue until the user enters the correct answer‬‬

‫أو تستطٌع ان تكتب هذه السطور داخل جسم الدالة‬


‫‪dobrob‬كمعلومات تعبر عنها‬
‫و ٌبمى لن الخٌار فً وضع معلوماتن الشخصٌة أول الكود‬
‫كود‪PHP:‬‬
‫‪def doprob():‬‬
‫)'‪op = choice('+-‬‬

‫هنا عرفنا الدالة التً ستموم بالعملٌات االزمة المتؽٌر ‪ op‬سٌحجز لنا العبارتٌن‪+ -‬‬
‫كود‪PHP:‬‬
‫])‪nums = [randint(1,10) for i in range(2‬‬

‫المتؽٌر ‪ nums‬سٌحجز لٌمتٌن من ‪ 1‬إلى ‪ 10‬ففً األولى لمنا بتحدٌد مجال األعداد‬
‫كود‪PHP:‬‬
‫)‪randint(1,10‬‬

‫و الكتابة الثانٌة معناها أن المتؽٌر ‪ nums‬سٌحجز عددٌن و لو أردنا استعمال ثالثة اعداد نستبدل رلم ‪ 2‬ب‬
‫‪ 3‬و هكذا حسب اختٌارنا‬
‫كود‪PHP:‬‬
‫)‪nums.sort(reverse=True‬‬

‫هنا لمنا بترتٌب األعداد ترتٌبا تصاعدٌا ثم عكسنا الترتٌب فً نفس الولت بحٌث أنه العدد الذي على الٌمٌن‬
‫ٌكون دابما أكبر من العدد الذي على الٌسار‬
‫لماذا؟؟‬
‫حتى نتجنب أن تكون النتابج ذات اشارة سلبٌة‬
‫بحٌث أن العملٌات التً ستظهر للطفل تكون نتابجها كلها موجبة‬
‫‪7-5=2‬‬
‫‪5 – 3=2‬‬
‫‪.......‬‬
‫كود‪PHP:‬‬
‫)‪ans = ops[op] (*nums‬‬
‫المتؽٌر ‪ ans‬سٌحجز لنا نتٌجة العملٌة و انظرو إلى الموة و الحرٌة التً تضٌفها المكاتب على الكود بحٌث‬
‫اننا لمنا بانشاء عملٌة علة عددٌن بؽض النظر عن نوع العملٌة جمع أو طرح‬
‫فـ المتؽٌر ‪ ops‬رأٌنا أنه عبارة عن لاموس ٌربط بٌن العالمات و دوال الدوال المستدعٌة و المتؽٌر ‪ٌ op‬أخذ‬
‫من الدالة ‪ choice‬إما عملٌة الجمع أو عملٌة الطرح (فً كل مرة واحدة) و ‪ٌ nums‬حتوي على العددٌن‬
‫العشوابٌٌن‬
‫ومعنى هذه الكتابة أن المفسر سٌطبك المعامل الذي ٌحتوٌه ‪ op‬على العددٌن المحتوٌٌن فً المتؽٌر‪nums‬‬
‫و كل هذا بواسطة النجمة * التً تسبك هذا المتؽٌر‬
‫(توجد طرٌمة اخرى مطابمة لهذه سنراها فً درس المبل )‬
‫كود‪PHP:‬‬
‫)]‪pr = '%d %s %d = ' % (nums[0], op, nums[1‬‬
‫‪oops = 0‬‬

‫انشأنا فً هذا السطر الرسالة التً ستظهر للطفل و حجزنا هذه الرسالة داخل المتؽٌر ‪ pr‬و ستكون الرسالة‬
‫على الشكل التالً‬
‫=‪5+1‬‬
‫و المتؽٌر ‪ oops‬سٌحجز لنا عدد محاوالت الطفل‬
‫كود‪PHP:‬‬
‫‪while True:‬‬
‫‪try:‬‬
‫‪if int(raw_input(pr)) == ans:‬‬
‫'‪print 'correct‬‬
‫‪break‬‬

‫هنا تبدئ حلمة بالعمل‬


‫أول شٌا سنطبع للطفل نص العملٌة المحجوز فً المتؽٌر ‪ pr‬و نأخذ منه اإلجابة فً نفس الولت و فً نفس‬
‫الولت أٌضا نمارن هذه اإلجابة مع المتؽٌر‪ans‬‬
‫فإذا كانت اإلجابة صحٌحة ننبؤه بذالن و نخرج من الحلمة‬
‫كود‪PHP:‬‬
‫‪if oops == MAXTRIES:‬‬
‫)‪print 'answer\n%s%d'%(pr, ans‬‬

‫فإذا أخطا الطفل مرتٌن نطبع له اإلجابة الصحٌحة‬


‫كود‪PHP:‬‬
‫‪else:‬‬
‫'‪print 'incorrect... try again‬‬
‫‪oops += 1‬‬

‫و إذا أخطا الطفل مرة واحدة فمط نطبع له رسالة تنبؤه بذلن ثم نرفع درجة العداد‪oops‬‬

‫كل هذه األوامر ستنفد إذا لم ٌحدث خطا و سارت األمور على ماٌرام ألنها مكتوبة داخل عبارة‪try‬‬
‫كود‪PHP:‬‬
‫‪except (KeyboardInterrupt,‬‬
‫‪EOFError, ValueError):‬‬
‫'‪print 'invalid input... try again‬‬

‫فإذا حدث خطا فً المدخالت كإدخال حرؾ بدل عدد ‪ ValueError‬أو لم ٌدخل الطفل شٌبا‬
‫‪KeyboardInterrupt EOFError‬أو أدخل عدد بالفاصلة سٌنتمل المفسر لعبارة ‪ except‬و التً‬
‫بدورها ستطبع له رسالة خطا‬

‫انتهٌنا اآلن من هذه الدالة الثانوٌة و لم ٌبمى لنا سوى تهٌبة الدالة الربٌسٌة‬
‫كود‪PHP:‬‬
‫‪def main():‬‬
‫‪while True:‬‬
‫)(‪doprob‬‬
‫‪try:‬‬
‫)(‪opt = raw_input('Again? [y]').lower‬‬
‫‪if opt and opt[0] == 'n' :‬‬
‫‪break‬‬

‫كما للت سابما ٌكون اسم الدالة الربٌسٌة دابما‬


‫‪main‬داخل هذه الدالة لمنا بانشاء حلمة تبمى تعٌد عمل الدالة‪doprob‬‬
‫و كلما نفدتها مرة تطلب من المستعمل ان كان ٌرٌد مواصلة البرنامج للمحاولة أخرى فإن أدخل حرؾ‪y‬‬
‫ستبمى الحلمة فً العمل و ان ادخل حرؾ ‪ n‬ستتولؾ الحلمة عن العمل‬
‫و أر ٌد أن أنوه |اننا صؽرنا فً الحرؾ المدخل من طرؾ المستخدم حتى نتجنب علم احتمالٌن فلو أدخل الطفل‬
‫حرؾ ‪y‬لن ٌعرفه البرنامج و سٌعتبره خطا لدى مهاما ادخل الطفل سواء كان الحرؾ كبٌر او صؽٌر سٌموم‬
‫البرنامج بتصؽٌره بواسطة الدالة‪lower‬‬

‫طٌب اآلن كٌؾ نستدعً الدالة الربٌسٌة ؟‬


‫نستدعٌها بواسطة هذان السطرٌن‬
‫كود‪PHP:‬‬
‫‪if __name__ == '__main__':‬‬
‫)(‪main‬‬

‫هنا لمنا بأمر المفسر باختبار اسم الدالة فإذا كان اسمها مطابك ل‪main‬‬
‫كود‪PHP:‬‬
‫‪if __name__ == '__main__':‬‬

‫سٌموم باستدعابها‬
‫كود‪PHP:‬‬
‫)(‪main‬‬

‫‪:smailes18: :smailes18: :smailes18:‬‬


‫و بهذا نكون أنهٌنا شرح هذا البرنامج و ال ٌلزمن اخً المارئ تطبٌك كل هذه األمور منذ المرة األولى وانما‬
‫افهم هذه الطرٌمة و حاول ادخال هذه الطرق على اسلوبن شٌبا فشٌبا و بإذن هللا كل األكوا اآلتٌة فً هذه‬
‫الدورة ستكون مثل هذا الكود فً الطرٌمة‪.‬‬
‫هو صحٌح ان البرنامج بسٌط و لكن صدلنً اخً الكرٌم األسلوب الذي كتبنا به الكود اسلوب احترافً مبة‬
‫بالمبة و تستطٌع التأكد من هذا بمراءة بعض أكواد لؽة الباٌثون ستجدها كلها بنفس أسلوب هذا البرنامج‬
‫مازالت بعض البرامج سنعملها مع بعضنا البعض و سأحاول فً كل مرة التعامل مع مكاتب جدٌدة و طرق‬
‫جدٌدة حتى تترسخ لدٌن فكرة ان اسالٌب كتابة األكواد‪.‬‬

‫و اعتذر لكم اخوانً المراء عن اإلكثار من الشرح فً الدرس الماضً و هذا الدرس و ربما اصبح الشرح‬
‫ممل نوعا ما و لكنً أرٌد ان نشرح هذه األمور اآلن و ننهٌها حتى ال نواجه المصاعب فً الدروس الممبلة‪.‬‬

‫و اعتذر اٌضا عن اإلطالة فً طرح الدروس ألنً أرٌد أن ٌكون الدرس كامل عند طرحه و لٌس متمطع‬
‫سنواصل فً الدرس المادم الدوال مع بعض األمثلة األخرى‬

‫تم بحمد هللا]‪[/size‬‬

‫سنحاول فً هذا الدرس اإلختصار لدر اإلمكان بحٌث سنشرح بسرعة بعض األمور المتعلمة بالدوال فما علٌنا‬
‫اآلن إالّ الفهم و اإلستٌعاب و سنتولؾ عند كل فصل بالشرح المطول فً التطبٌمات و األمثلة‬

‫نستطٌع ان ننشا دالة داخل دالة أخرى أو اكثر أي ان الدالة الواحدة تستطٌع ان تحتوي هً اٌضا دوال اخرى‬

‫مثال‬
‫كود‪PHP:‬‬
‫‪def fun_a(val):‬‬
‫'‪print 'in fun_a‬‬
‫‪c=val%2‬‬
‫‪def fun_b():‬‬
‫'‪print 'in fun_b‬‬
‫‪if c ==0:‬‬
‫'‪print 'paire‬‬
‫‪else:‬‬
‫'‪print 'impaire‬‬
‫)(‪fun_b‬‬

‫)‪fun_a(40‬‬

‫فكما نالحظ الدالة األم ‪ fun_a‬تأخذ بالً لسمة العدد على ‪ 2‬و تحتوي هذه الدالة على دالة فرعٌة تموم‬
‫باختبار بالً المسمة‬
‫مالحظة ‪ :‬الدالة الفرعٌة تكون معرفة و مستعملة من طرؾ الدالة األم فمط إذ ان الدوال األخرى ال تستطٌع‬
‫التعامل معها‬
‫فلو كتبنا اسفل الكود )(‪ fun_b‬سٌطبع لنا المفسر رسالة خطا مفادها ان هذه الدالة ؼٌر معرفة‬

‫بارامترات الدالة‬

‫نستطٌع التعامل مع البرارمترات بكل حرٌة بحٌث ان لؽة الباٌثون تعطٌنا صالحٌات واسعة فً التعامل مع‬
‫البرامترات فنستطٌع ان ننشا سلسلة او لاموس بصورة بارامٌتر‬
‫كود‪PHP:‬‬
‫‪def database(name,data=[ ]):‬‬
‫)‪data.append(name‬‬
‫)‪print ' %s saved'%(name‬‬
‫‪return data‬‬

‫)'***‪database('user‬‬

‫و نستطٌع ان ندرج الكثٌر من البرامترات و لكن ٌستحسن ان نمسم المهام على البرامترات‬
‫بحٌث انه ٌوجد نوعان من البرارمٌتر‬
‫‪formal_args‬‬
‫وهً البرامٌترات العادٌة التً استعملناها فً األمثلة السابمة‬

‫‪*var_args_tuple‬‬

‫هذا النوع الثانً من البرامٌترات و تسبمه دابما عالمة * و نستعمل هذا النوع عندما ال نرٌد ان نحدد نوع‬
‫البارمٌتر هل هو سلسلة او عدد ‪,,‬الخ‬
‫كما نستعمل هذا النوع اٌضا عندما ٌكون لدٌنا حاجة إلستعمال كثٌر من البرامٌترات فنعرؾ البرامٌترات‬
‫األساسٌة كما فً النوع األول و البالٌة سٌتكلؾ بها البرامٌتر الثانوي‬
‫كود‪PHP:‬‬
‫‪def info(name,age,*others):‬‬
‫)‪print '%s args 1' %(name‬‬
‫)‪print '%d args 2'%(age‬‬
‫‪for each in others:‬‬
‫‪print ' anothers args' ,each‬‬

‫)'‪info('chouaib',22,'algeria','constantine','2008','blablabla‬‬

‫و كما عودتنا هذه اللؽة الرابعة فإننا نستطٌع ان ندرج أي نوع من المتؽٌرات دون الحاجة لتحدٌدها مسبما‬
‫كود‪PHP:‬‬
‫)‪info('chouaib',22,33.5,'aaaaaa',694589.265‬‬

‫و لهذا تسمى هذه البرامٌترات ب‪tupl_args‬‬


‫ألن ‪ tuple‬كما رأٌنا سابما تحجز كل أنواع البٌانات بؽض النظر عن نوعها‬
‫و ٌتعدد استعمال هذا النوع من البرامٌترات و لكن اإلستعمال األكثر ٌكون مع لواعد البٌانات و الملفات ألنها‬
‫تتٌح لنا ادراج معلومات او بٌانات ؼٌر محدودة من ناحٌة النوع او الكم‬

‫كما اننا نستطٌع اإلستعانة بهذا النوع فً بعض األمور الحسابٌة‬


‫مثال‬
‫كود‪PHP:‬‬
‫‪def sum(*numbers):‬‬
‫‪result = 0‬‬
‫‪for number in numbers: result += number‬‬
‫‪return result‬‬
‫)‪print sum(23,42‬‬

‫ٌوجد نوع آخر من البرامٌترات ٌسمى بـ برامٌتر الماموس‬


‫‪dico_args‬‬
‫و ٌرمز له ب ** لبل اسم البرامٌتر‬
‫مثال‬
‫كود‪PHP:‬‬
‫‪def data_dico(**data):‬‬
‫‪return data‬‬

‫)‪data_dico(chouaib=22,muslim=23‬‬

‫أو‬
‫كود‪PHP:‬‬
‫‪def data_dico(**data):‬‬
‫‪return data‬‬

‫)‪print data_dico(chouaib=22,muslim=23‬‬
‫عبارة‪lambda‬‬

‫تمكننا هذه العبارة من انشاء دوال مبهمة‪anonymous‬‬


‫ونمول عنها انها مبهمة ألنها ال تعرؾ بالطرٌمة التً جرت العادة علٌها و تستطٌع هذه الدوال ان تحمل اي‬
‫عدد من البرامٌترات و لكنها تعود على لٌمة واحدة فمط‬
‫‪lambda parameters: expression‬‬
‫مثال‬
‫كود‪PHP:‬‬
‫‪def hellow():‬‬
‫'‪return 'hellow‬‬
‫)(‪print hellow‬‬

‫كود‪PHP:‬‬
‫'‪lambda :'hellow‬‬

‫كود‪PHP:‬‬
‫‪def a(x,y):‬‬
‫‪return x*y‬‬
‫)‪a(9,5‬‬

‫كود‪PHP:‬‬
‫‪x=lambda a,b: a*b‬‬
‫)‪x(9,5‬‬

‫و فً حالة ما اردنا ان ندرج البرامٌترات المختلفة‬


‫كود‪PHP:‬‬
‫‪info=lambda *tup:tup‬‬
‫)‪print info('chouaib',22‬‬

‫او‬
‫كود‪PHP:‬‬
‫‪database=lambda **data:data‬‬
‫)‪print database(user1=182158,user2=6585485,user3=4765465‬‬

‫او اإلثنٌن معا‬


‫كود‪PHP:‬‬
‫‪database=lambda **data:data‬‬
‫)‪print database(user1=182158,user2=6585485,user3=4765465‬‬

‫واضح جدا التسهٌل الذي تمنحه لنا هذه العبارة بحٌث انها تجنبنا التعمٌدات و األكواد المطولة و لكن تستعمل‬
‫عبارة‪lambda‬‬
‫عندما ٌكون لدٌنا عمل بسٌط و ال نرٌد انشاء دالة كاملة ألجله‬
‫صحٌح ان العبارة تسهل علٌنا العمل و لكن فً نفس الولت تمٌد الحرٌة المتاحة لنا و خالصة المول هً ان‬
‫نتجه نحو هذه العبارةلمعالجة األمور الثانوٌة فً الكود التً ال تتطلب انشاء دالة كاملة‬

‫عبارة‪apply‬‬

‫تمكننا هذه العبارة من تنفٌد اجراء على بٌانات معٌنة او تنفٌد عمل على عمل آخر او تطبك مخرجات دالة‬
‫على مدخالت دالة دالة اخرى‬
‫فلو عدنا للمثال األول الذي ابتدبنا به الذي برمجنا فٌه لعبة اٌجاد ناتج العملٌة بحٌث اننً ذكرت اننا سنطبك‬
‫العملٌات على األعداد بطرٌمة اخرى و هاهً الطرٌمة التً كنت اتحدث عنها‬
‫كود‪PHP:‬‬
‫‪from operator import add, sub, mul‬‬
‫)'*'‪op=('+','-',‬‬
‫‪nums=(int(raw_input('Enter number 1: ')),int(raw_input('Enter number‬‬
‫)))'‪2 :‬‬
‫}‪ops={'+':add, '-':sub, '*':mul‬‬
‫)'* ‪ch=raw_input('Enter an operator, + -‬‬
‫‪if ch in op:‬‬
‫)‪res=apply(ops[ch],nums‬‬
‫)‪print '%s%s%s=%d' %(nums[0],ch,nums[1],res‬‬
‫‪else:‬‬
‫'‪print'invalide operator‬‬

‫الحظوا السطر التالً‬


‫كود‪PHP:‬‬
‫)‪res=apply(ops[ch],nums‬‬

‫لمنا بتطبٌك عمل ‪ ops‬على األعداد المحجوزة فً المتؽٌر‪nums‬‬

‫عبارة‪filter‬‬

‫كما ٌدل اسمها تموم هذه العبارة بتحدٌد مخرجات دالة معٌنة و تصفٌتها او توجٌهها حسب رؼبتنا‬
‫مثال‬
‫كود‪PHP:‬‬
‫‪def leap(n):‬‬
‫‪return n%4==0‬‬
‫][=‪list_yr‬‬
‫)' ? ‪ch=raw_input('Do you want to enter a year‬‬
‫‪while 1:‬‬
‫‪if ch in ('y','yes','Y'):‬‬
‫)'‪yr=raw_input('Enter a year:‬‬
‫))‪list_yr.append(int(yr‬‬
‫)' ? ‪ch=raw_input=('Do you want to enter another year‬‬
‫‪else:‬‬
‫‪break‬‬
‫)‪leap_yrs=filter(leap,list_yr‬‬
‫)‪print 'You have entered %d leap years, they are : \%s'%(len(leap_yrs‬‬
‫)‪,leap_yrs‬‬

‫ٌطلب هذا البرنامج من المستخدم ادخال سنواة معٌنة ثم ٌموم البرنامج بطبع السنواة الكبٌسة فمط‬
‫كود‪PHP:‬‬
‫)‪leap_yrs=filter(leap,list_yr‬‬
‫فً هذا السطر لمنا بفلترة مخرجات السلسلة ‪ list_yr‬بحٌث ان السلسلة ‪ leap_yrs‬ستحجز المخرجات‬
‫المتوافمة مع الدالة ‪ leap‬فمط‬

‫بهذا نكون لد مررنا على أهم المحطاة المتعلمة بالدوال سنطبك فً الدرس المادم بعض األمثلة على كل‬
‫مادرسناه سابما ثم نمر لموضوع آخر‬
‫تم بحمد هللا‬

‫‪nile‬‬

‫مشاهذة مهفه انشخصي‬

‫إرسال رسانت خاصت إنى‪nile‬‬

‫انبحث عن جميع مشاركاث‪nile‬‬

‫أضف ‪ nile‬إنى قائمت األصذقاء‬

‫‪#14‬‬

‫يوو أمس ‪, 11:27 PM‬‬

‫تاريخ انتسجيم‪: Feb 2008‬‬


‫انمشاركاث‪302,1 :‬‬
‫‪nile‬‬
‫االدارة‬

‫الــــــــ ‪Python‬‬ ‫رد‪ :‬دورة فى لغة‬

‫سنضع بإذن هللا فً هذا الدرس مشروع مفتوح للتطوٌر نضع له حجر األساس فً هذا الدرس ثم نطوره شٌبا‬
‫فشٌبا‬

‫فكرة المشروع تكمن فً انشاء استمارة تسجٌل لمولع او لشركة‪,,,,‬‬


‫بحٌث تأخذ من المستخدم المعلومات االزمة ثم تفحص هذه المعلومات و ٌموم البرنامج فً األخٌر بحفظ‬
‫المعلومات فً ملؾ‬

‫كما للت هذه النظرة األولى حول المشروع و سنضٌؾ له الكثٌر من األمور كما سنرى‬

‫البرنامج ٌحتوي مبدبٌا على ‪ 7‬دوال زابد الدالة الربٌسٌة اي بالكل ‪ 8‬دوال‬
‫و ٌستدعً البرنامج مكتبتٌن‬
‫رأس البرنامج‬
‫كود‪PHP:‬‬
‫‪import time‬‬
‫‪from time import sleep‬‬
‫‪import sys‬‬
‫‪month, day, year, age=0, 0, 0, 0‬‬
‫‪cur_year, cur_month, cur_day=0, 0, 0‬‬

‫استدعٌنا الدالة ‪ time‬للتعامل مع الولت‬


‫و من نفس المكتبة استدعٌنا الدالة‪sleep‬‬
‫و اخٌرا استدعٌنا الدالة ‪ sys‬للتعامل مع الملفاة‬

‫ثم لمنا بتعرٌؾ المتؽٌرات األساسٌة و التً ستتعامل معها الدوال بحٌث ان كل دالة تحتاج التعامل مع هذه‬
global ‫المتؽٌرات نعرؾ هذه المتؽٌرات داخلها بصٌؽة‬

‫دوال البرنامج‬

isblank‫دالة‬
PHP:‫كود‬
def isblank(var):
while len(var)==0:
try:
print 'you can\'t leav it blank'
var=raw_input('Enter a value :')
except Exception ,e:
print "Error !!",e
return var

‫تموم هذه الدالة بفحص مدخالت المستخدم بحٌث لو لم ٌدخل شٌا ستطالبه هذه الدالة باعادة اإلدخال مرة‬
‫اخرى‬

alpha‫دالة‬
PHP:‫كود‬
def alpha(var):
while 1:
if not var.isalpha():
print'Invalid entry'
var=raw_input('re-enter pleas :')
continue
else:
break
return var

‫تموم هذه الدالة بفحص مدخالت المستخدم هل هً حرفٌة او رلمٌة و سنحتاجها لفحص اسم و لمب المستخدم‬
‫ ألنه من المستحٌل ان تحتوي هذه المدخالت على ارلام‬-‫بلده‬- ‫و مكان الامته‬
‫و اذا حدث و ادخل المستخدم ارلام ستطالبه الدالة باعادة اإلدخال‬

def date_of_b‫دالة‬
PHP:‫كود‬
def date_of_b():
global month
global year
global day
global age
while 1:
d_of_b=raw_input('Enter your date of birth, /*format*/ ==> mm
-dd-yyyy')
d_of_b=isblank(d_of_b)
if len(d_of_b)<> 10:
print 'Enter date in correct format !!'
continue
month=int(d_of_b[:2])
day=int(d_of_b[3:5])
year=int(d_of_b[6:10])
age=age_fun()
if chek_valid_fun()==0:
print 'Invalid date of birth'
continue
‫‪else:‬‬
‫‪break‬‬

‫تموم هذه الدالة بالطلب من المستخدم ادخال تارٌخ والدته و بعد ادخال المستخد للتارٌخ نمسم هذا التارٌخ‬
‫حسب األٌام و الشهور و السنة و نسند كل جزء لمتؽٌر منفصل‬
‫كود‪PHP:‬‬
‫)]‪month=int(d_of_b[:2‬‬
‫)]‪day=int(d_of_b[3:5‬‬
‫)]‪year=int(d_of_b[6:10‬‬

‫و لمنا بهذا التمسٌم حتى نتمكن من حساب العمر و ٌكون هذا الحساب بواسطة دالة اخرى اسمها‪age_fun‬‬

‫دالة‪age_fun‬‬
‫كود‪PHP:‬‬
‫‪def age_fun():‬‬
‫‪global cur_year‬‬
‫‪age=cur_year-year-1‬‬
‫‪if month<cur_month or (month==cur_month and day<cur_day):‬‬
‫‪age=age+1‬‬
‫)‪return str(age‬‬

‫عمل هذه الدالة بسٌط بحٌث انها تموم بطرح السنة الحالٌة ‪ cur_age‬و التً سنراها بعد للٌل بالسنة التً‬
‫ولد بها المستخدم‬
‫و الشاهد هنا ان هذه الدالة تحسب العمر بدلة اي مع احتساب فوارق الشهور‬

‫و لو عدنا للدالة ‪ date_of_b‬سنالحظ اننا استخدمنا دالة اخرى مع دالة ‪ age_fun‬و هً دالة‬
‫‪chek_valid_fun‬‬

‫دالة‪chek_valid_fun‬‬
‫كود‪PHP:‬‬
‫‪def chek_valid_fun():‬‬
‫‪while 1:‬‬
‫‪if year<=0 or month <=0 or day<=0:‬‬
‫‪break‬‬
‫‪if cur_year<year:‬‬
‫‪break‬‬
‫‪if month>12:‬‬
‫‪break‬‬
‫‪if month in (1,3,5,7,8,10,12):‬‬
‫‪if day>31:‬‬
‫‪break‬‬
‫‪elif month in (4,6,9,11):‬‬
‫‪if day>30:‬‬
‫‪break‬‬
‫‪if year%4==0 and month==2:‬‬
‫‪if day>29:‬‬
‫‪break‬‬
‫‪return 1‬‬
‫‪return 0‬‬

‫تموم هذه الدالة بالتحمك من التارٌخ الذي ٌدخله المستخدم بدلة عالٌة بحٌث انها تساعدنا على اكتشاؾ خطا‬
‫فً تارٌخ والدة المستخدم و بهذه الصورة نتجنب التوارٌخ الؽٌر منطمٌة‬
‫و لمد استعملنا فً هذه الدالة طرٌمة جدٌدة و هً العودة على عدة لٌم حسب الحاالت‬
‫كود‪PHP:‬‬
‫‪if year%4==0 and month==2:‬‬
‫‪if day>29:‬‬
‫‪break‬‬
‫‪return 1‬‬
‫‪return 0‬‬

‫هنا لو ادخل المستخدم تارٌخ خاطا اي كانت السنة كبٌسة و الشهر فٌفري و عدد األٌام اكبر من ‪ 29‬و هذا‬
‫مستحٌل ان ٌحصل هذا و لو ادخل المستخدم تارٌخ مشابه له سنخرج من الحلمة ككل الحاالت التً تسبك هذه‬
‫الحالة‬
‫فعند ادخال المستخدم للتارٌخ ستفحص هذه الدالة هذا التارٌخ بناء على حاالت ‪ if‬التً اوردنها فلو لم ٌتطابك‬
‫تارٌخه مع هذه الحاالت‪ -‬اي ان التارٌخ صحٌح‪ -‬ستأخذ هذه الدالة لٌمة ‪ 1‬و لو حدث خطا فً التارٌخ‬
‫ستخرج الدالة من الحلمة و تأخذ لٌمة صفر‬
‫و تفٌدنا هذه الطرٌمة بدراسة احتماالت عدٌدة فلو رجعنا للدالة األولى ‪ date_of_b‬سنرى فابدة هذا العمل‬
‫كود‪PHP:‬‬
‫‪if chek_valid_fun()==0:‬‬
‫'‪print 'Invalid date of birth‬‬
‫‪continue‬‬

‫هنا ٌتبٌن األمر األكثر‬


‫لمنا بفحص المٌمة التً ترجع علٌها الدالة ‪ chek_valid_fun‬فلو كانت هذه المٌمة مساوٌة للصفر معنى‬
‫هذا ان التارٌخ خاطا و سٌطبع البرنامج للمستخدم رسالة خطا و ال نخرج من الحلمة حتى ٌدخل المستخدم‬
‫التارٌخ الصحٌح‬

‫دالة‪get_chek_info‬‬
‫كود‪PHP:‬‬
‫‪def get_chek_info (question):‬‬
‫)‪var=raw_input(question‬‬
‫)‪var=isblank(var‬‬
‫)‪var=alpha(var‬‬
‫‪return var‬‬

‫لمنا بانشاء هذه الدالة حتى تساعدنا على استمبال المدخالت من المستخدم بحٌث اننا نعطٌها عنوان الرسالة‬
‫التً نرٌد فتظهر هذه الرسالة للمستخدم و تأخذ من المدخل‬

‫دالة‪saving‬‬
‫كود‪PHP:‬‬
‫‪def saving():‬‬
‫‪i=0‬‬
‫'‪p='.‬‬
‫‪while i<5:‬‬
‫‪print p,‬‬
‫)‪sleep(1‬‬
‫‪i+=1‬‬
‫'‪print 'saving‬‬

‫تضٌؾ هذه الدالة بعض الحٌوٌة و الحركة فً نهاٌة البرنامج بحٌث اننا سنحجز المدخالت فً ملؾ فتموم هذه‬
‫الدالة برسم نماط متتابعة لعملٌة حفظ الملؾ فتموم الحلمة بطبع ‪ 5‬نماط متتابعة و بٌن كل نمطة واخرى ٌتولؾ‬
‫البرنامج لمدة ثانٌة واحدة ثم ٌطبع النمطة التالٌة‬

‫الدالة الربٌسٌة‬
PHP:‫كود‬
def main():
global cur_year
global cur_month
global cur_day
t=time.localtime(time.time())
cur_year=t[0]
cur_month=t[1]
cur_dat=t[2]
username=get_chek_info('Enter your name :')
userlname=get_chek_info('Enter your last name :')
ucontry=get_chek_info('Contry : ')
us=get_chek_info('(b)oy or (g)irl :')
date_of_b()
uothers=raw_input('others information :')
print 'You can choose one of following login names : '
first=username+"_"+userlname
print '1. : ',first
second=userlname[0].upper()+"_"+username+str(age)
print '2. :',second
print 'you age is :',age
save=open('/home/chouaib/save', 'w')
save.write('%s %s %s %s %s ' % (username, userlname, ucontry, us,
uothers))
save.close()
saving()

‫ حتى تتمكن الدالة الربٌسٌة من التعدٌل علٌهم و‬global ‫اوال لمنا بتعرٌؾ المتؽٌرات التً سنستعملها بصٌؽة‬
‫التعامل معهم بحرٌة‬
ً‫ و الذي سٌأخذ لٌمة التارٌخ الحال‬t ‫ثم انشبنا المتؽٌر‬
PHP:‫كود‬
t=time.localtime(time.time())

‫ المٌم المناسبة لها‬cur_day ‫ و‬cur_month ‫ و‬cur_year ‫ثم بواسطة هذا التارٌخ اسندنا للمتؽٌرات‬
‫ التً رأٌناها سابما‬get_chek_info ‫ثم لمنا بأخذ معلومات المستخدم بواسطة الدالة‬
‫ لم نستعمل فٌها هذه الدالة ألنها ال تمبل المدخالة العددٌة و ٌمكن ان ٌدخل المستخدم‬uothers ‫ونالحظ ان‬
‫اعداد فً المعلومات اإلضافٌة‬
‫و فً األخٌر نعرض على المستخدم اسمٌن ٌمكنه التسجٌل بواسطتهما ثم نحجز كل مدخالته فً ملؾ خاص‬
PHP:‫كود‬
save=open('/home/chouaib/save', 'w')
save.write('%s %s %s %s %s ' % (username, userlname, ucontry, us,
uothers))
save.close()
saving()

‫ و سمٌنا النلؾ بنفس اسم المتؽٌر‬save ‫اسم المتؽٌر الذي سٌسند الٌه الملؾ‬
‫ و نضع فً األول مسار الذي سٌحجز فٌه الملؾ‬open ‫ثم انشبنا ملؾ جدٌد بواسطة الدالة‬
‫مثال‬
PHP:‫كود‬
save=open('C:\my project\save','w')

‫ معنها ان ٌفتح البرنامج الملؾ للكتابة و ان لم ٌوجد هذا الملؾ سٌموم البرنامج بانشابه‬W ‫و عبارة‬
write‫بعدها نموم بكتابة مدخالة المستخدم بواسطة الدالة‬
‫ لتعرض النماط على المستخدم و تنبؤه ان معلوماته حفظة‬saving ‫ثم ٌأتً دور الدالة التً انشأناها من لبل‬

‫كود البرنامج الكامل‬


PHP:‫كود‬
import time
from time import sleep
import sys
month, day, year, age=0, 0, 0, 0
cur_year, cur_month, cur_day=0, 0, 0
def isblank(var):
while len(var)==0:
try:
print 'you can\'t leav it blank'
var=raw_input('Enter a value :')
except Exception ,e:
print "Error !!",e
return var

def alpha(var):
while 1:
if not var.isalpha():
print'Invalid entry'
var=raw_input('re-enter pleas :')
continue
else:
break
return var

def chek_valid_fun():
while 1:
if year<=0 or month <=0 or day<=0:
break
if cur_year<year:
break
if month>12:
break
if month in (1,3,5,7,8,10,12):
if day>31:
break
elif month in (4,6,9,11):
if day>30:
break
if year%4==0 and month==2:
if day>29:
break
return 1
return 0

def age_fun():
global cur_year
age=cur_year-year-1
if month<cur_month or (month==cur_month and day<cur_day):
age=age+1
return str(age)
def saving():
i=0
p='.'
while i<5:
print p,
sleep(1)
i+=1
print 'saving'

def date_of_b():
global month
global year
global day
global age
while 1:
d_of_b=raw_input('Enter your date of birth, /*format*/ ==> mm
-dd-yyyy')
d_of_b=isblank(d_of_b)
if len(d_of_b)<> 10:
print 'Enter date in correct format !!'
continue
month=int(d_of_b[:2])
day=int(d_of_b[3:5])
year=int(d_of_b[6:10])
age=age_fun()
if chek_valid_fun()==0:
print 'Invalid date of birth'
continue
else:
break
def get_chek_info (question):
var=raw_input(question)
var=isblank(var)
var=alpha(var)
return var
def main():
global cur_year
global cur_month
global cur_day
t=time.localtime(time.time())
cur_year=t[0]
cur_month=t[1]
cur_dat=t[2]
username=get_chek_info('Enter your name :')
userlname=get_chek_info('Enter your last name :')
ucontry=get_chek_info('Contry : ')
us=get_chek_info('(b)oy or (g)irl :')
date_of_b()
uothers=raw_input('others information :')
print 'You can choose one of following login names : '
first=username+"_"+userlname
print '1. : ',first
second=userlname[0].upper()+"_"+username+str(age)
print '2. :',second
print 'you age is :',age
save=open('/home/chouaib/save', 'w')
save.write('%s %s %s %s %s ' % (username, userlname, ucontry, us,
uothers))
save.close()
saving()

main()
‫]"‪[color="DarkGreen‬طبعا مازال البرنامج ٌحتاج لتعدٌل كبٌر و لكً نتم هذا التعدٌل ٌتوجب علٌنا ان‬
‫ندرس الملفاة و هذا ما سنفعله فً الدرس المادم‬
‫بعد انهاء الملفاة ستعود للبرنامج و سنضٌؾ علٌه المدرة على حفظ معلوات اكثر و بصورة اكثر تنظٌما‬
‫سنضٌؾ علٌه خاصٌة المستعملٌن و صالحٌات مدرٌر البرنامج ‪ ...‬و امور اخرى مفٌدة بإذن هللا‬

‫اذن نبدئ فً درس الملفاة‬

‫تسمح لنا لؽة الباٌثون ككل اللؽاة بالتعامل مع الملفاة و ٌكون هذا التعامل ب الوصول للملفاة و فتحها و لراءة‬
‫محتواها و التعدٌل علٌه او انشاء ملفاة جدٌدة و حفظ المعلومات بداخلها‬
‫و نستطٌع التعامل مع عدة صٌػ للملفاة و لٌس الملفاة النصٌة فمط‬

‫فتح الملؾ‬

‫لكً نستطٌع فتح ملؾ معٌن ٌتوجب علٌنا اوال ان ننشا متؽٌر و ٌكون هذا المتؽٌر هو الوسٌط بٌننا و بٌن‬
‫الملؾ اي ان كل األوامر التً نرٌد تنفٌدها على هذا الملؾ نطبمها على المتؽٌر و هو بدوره ٌنملها للملؾ‬
‫و ٌسمى هذا المتؽٌر ب األوبجٌكت ‪ object‬و الدالة التً نستعملها لفتح الملفات تدعى دالة)(‪open‬‬
‫كود‪PHP:‬‬
‫)'‪file_object=open(file_name, access_mode=',,,‬‬

‫ٌعتبر المتؽٌر او باألحرى األوبجٌكت الذي ٌتولى التعالم مع الملؾ‬


‫ثم نفتح دالة‪open‬‬
‫و نحدد اسم الملؾ او مسار حفظه‬
‫‪access_mode‬‬
‫تعبر عن انواع او الصفة التً نرٌد فتح الملؾ من خاللها و ٌوجد عدة صٌػ لفتح الملؾ نذكر منها‬

‫‪r‬فتح الملؾ لمراءة محتواه‬


‫‪w‬فتح الملؾ للكتابة و نستعمها اٌضا إلنشاء ملؾ جدٌد‬
‫‪a‬لفتح الملؾ و اإلضافة على محتواه‬
‫و نستطٌع ان باضافة عالمة ‪ +‬عمل األمرٌن معا‬
‫‪r+ w+ +a‬للكتابة و المراءة فً ولت واحد‬
‫توجد صٌػ اخرى تستعمل لفتح ملفاة لكن ما ٌهمنا اآلن هً هذه الصٌػ السابك ذكرها‪binary‬‬

‫طٌب نعطً مثال كامل عن فتح ملؾ و لراءة محتواه‬


‫لم بانشاء ملؾ جدٌد و اكتب فٌه بعض السطور ثم احفظه‬
‫افتح مفسر الباٌثون و اكتب السطور التالٌة‬
‫كود‪PHP:‬‬
‫)'‪file_name=open('/home/chouaib/test', 'r‬‬
‫)(‪all_lines=file_name.read‬‬
‫)(‪file_name.close‬‬
‫‪print all_lines‬‬

‫داخل دالة ‪ open‬اكتب المسار الكامل للملؾ‬


‫فً السطر الثانً لمنا بانشاء اوبجٌكت آخر ٌموم هذا األوبجٌكت بمراءة كل الملؾ و ذلن من خالل دالة‪read‬‬
‫و فً السطر الثالث لمنا بؽلك الملؾ ألننا انتهٌنا من استعماله و ال ٌجب ترن الملؾ مفتوحا‬
‫و فً السطر األخٌر لمنا بطباعة محتوى الملؾ‬
‫توجد طرٌمة اخرى تمكننا من لراءة الملؾ و لكن هذه الطرٌمة تعطٌنا مٌزة معرفة نهاٌة السطور و تستعمل‬
‫هذه الطرٌمة دالة ‪ readlines‬و تمكننا هذه الدالة من طباعة الملؾ سطرا سطرا‬
‫كود‪PHP:‬‬
‫)'‪file_name=open('/home/chouaib/test', 'r‬‬
‫)(‪all_lines=file_name.readlines‬‬
‫)(‪file_name.close‬‬
‫‪for line in all_lines:‬‬
‫‪print line‬‬

‫دالة ‪ readlines‬تستطٌع التفرلة بٌن السطور و ستفٌدنن هذه المٌزة كثٌرا فً كل برامجن‬

‫الكتابة فً الملؾ‬

‫للكتابة فً الملؾ نتبع نفس الخطواة السابمة و لكن الدوال تتؽٌر فً هذه الحالة كما ان صٌؽة الفتح تصبح‪w‬‬
‫كود‪PHP:‬‬
‫)'‪file_name=open('/home/chouaib/test', 'w‬‬
‫)' ‪line=raw_input('enter a line‬‬
‫)‪file_name.write(line‬‬

‫و اذا اردنا كتابة اكثر من سطر داخل الملؾ ما علٌنا سوى اضافة حلمة على الشكل التالً‬
‫كود‪PHP:‬‬
‫)'‪file_name=open('/home/chouaib/test', 'w‬‬
‫‪while True:‬‬
‫)" ‪line=raw_input("enter a line '.' to quit‬‬
‫‪if line !='.':‬‬
‫)‪file_name.write(line‬‬
‫‪else:‬‬
‫‪break‬‬
‫)(‪file_name.close‬‬

‫و لكن لو فتحنا الملؾ لوجدنا ان السطور التً كتبناها فً البرنامج كتبت فً سطر واحد و اذا اردنا ان ٌكتب‬
‫كل سطر ادخلناه فً البرنامج فً سطر منفرد داخل الملؾ ٌجب ان نعدل على البرنامج فٌصبح الخامس‬
‫كالتالً‬
‫كود‪PHP:‬‬
‫)) ‪file_name.write('%s %s' %(line, os.linesep‬‬

‫بحٌث اننا استعملنا الدالة ‪ linesep‬و التً تعنً ‪ line separate‬بحٌث انها تفرق بٌن السطور‪.‬‬
‫و لستعمال هذه الدالة ٌتوجب علٌنا استدعاء مكتبة ‪ os‬اول البرنامج‬
‫كود‪PHP:‬‬
‫‪import os‬‬
‫)'‪file_name=open('/home/chouaib/test', 'w‬‬
‫‪while True:‬‬
‫)" ‪line=raw_input("enter a line '.' to quit‬‬
‫‪if line !='.':‬‬
‫)) ‪file_name.write('%s %s' %(line, os.linesep‬‬
‫‪else:‬‬
‫‪break‬‬
‫)(‪file_name.close‬‬

‫طٌب اآلن لو الحظتوا اننا عندما نعٌد تشؽٌل البرنامج ٌحذؾ كل محتوى الملؾ و ٌكتب السطور الجدٌدة و لو‬
‫عاودنا مرة اخرى ستحذؾ هذه السطور و تكتب سطور جدٌدة‪,,,,‬‬
‫و لو اردنا فتح الملؾ و اإلضافة على سطوره دون حذفها نفتح الملؾ بصٌؽة ‪ a- append-‬فٌصبح السطر‬
‫األول من البرنامج‬
‫كود‪PHP:‬‬
‫)'‪file_name=open('/home/chouaib/test', 'a‬‬

‫و بهذا نستطٌع اضافة سطور جدٌدة على الملؾ دون حذؾ محتواه‬
‫و لو اردنا الكتابة و المراءة معا نستعمل الصٌؽة ‪ r+‬او‪w+‬‬
‫كود‪PHP:‬‬
‫‪import os‬‬
‫)'‪file_name=open('/home/chouaib/test', 'r+‬‬
‫)(‪rline=file_name.readlines‬‬
‫‪for l in rline:‬‬
‫‪print l‬‬

‫‪while True:‬‬
‫)" ‪line=raw_input("enter a line '.' to quit‬‬
‫‪if line !='.':‬‬
‫)) ‪file_name.write('%s %s' %(line, os.linesep‬‬
‫‪else:‬‬
‫‪break‬‬
‫)(‪file_name.close‬‬

‫و لكن هنا احسن الصٌػ لمثل هذه الحاالت استعمال صٌؽة ‪ a+‬بحٌث نستطٌع لراءة سطور الملؾ و اإلضافة‬
‫علٌها دون حذفها‬
‫و نستطٌع اٌضا ان نحدد عدد األحرؾ الذي نرٌد ان ٌنسخها البرنامج و ذلن باضافة هذا العدد داخل الدالة‬
‫)(‪read‬‬
‫كود‪PHP:‬‬
‫)‪rline=file_name.read(20‬‬

‫التعامل مع النظام من خالل مكتبة‪os‬‬

‫توفر لنا مكتبة ‪ os‬عدة دوال للتعامل مع الملفاة من خالل النظام كانشاء ملفاة جدٌدة و اعداة تسمٌة الملؾ‬
‫حذؾ الملفاة ‪,,,‬الخ‬

‫اعادة تسمٌة الملؾ‬

‫اوال نموم باستدعاء المكتبة‪ os‬و الدالة المستعملة لتؽٌر اإلسم هً دالة‪rename‬‬
‫كود‪PHP:‬‬
‫‪import os‬‬
‫)'‪os,reanme('old_file', 'new_file‬‬

‫مثال‬
‫كود‪PHP:‬‬
‫‪import os‬‬
‫)'‪os.rename('/home/chouaib/test', '/home/chouaib/test1‬‬

‫طبعا على نظام الوٌندوز ال ٌتؽٌر شٌا سوى المسار‬


‫كود‪PHP:‬‬
‫‪import os‬‬
‫)'‪os.rename('C:\My ********s\test', 'C:\My ********s\test1‬‬
‫انشاء مجلد جدٌد‬

‫تسمح لنا نفس المكتبة انشاء مجلد جدٌد من خالل الدالة)(‪mkdir‬‬


‫كود‪PHP:‬‬
‫)'‪os,mkdir('new_dir‬‬

‫مثال‬
‫كود‪PHP:‬‬
‫‪import os‬‬
‫)'‪os.mkdir('/home/chouaib/pythondir‬‬

‫اظهار محتوى المجلد‬

‫لكً نستعرض محتوى مجلد معٌن اي نستعرض الملفات و المجلدات التً ٌحتوٌها المجلد األول نستعمل الدالة‬
‫)(‪listdir‬‬
‫مثال‬
‫كود‪PHP:‬‬
‫‪import os‬‬
‫)'‪print os.listdir('/home‬‬

‫و ٌكون المخرج عبارة عن سلسلة كهذه‬


‫]'‪['lost+found', 'chouaib‬‬
‫و بهذا نستطٌع ان ننشا متؽٌر ٌحجز لنا محتوى هذه السلسلة إلستعماله و استؽالله فً البرنامج‬
‫مثال‬
‫كود‪PHP:‬‬
‫‪import os‬‬
‫)'‪list= os.listdir('/home/chouaib‬‬
‫‪i=1‬‬
‫‪for a in list:‬‬
‫‪print 'file ID : %d __ name :‬‬ ‫)‪%s' %(i,a‬‬
‫‪i+=1‬‬

‫حذؾ ملؾ‬

‫نستعمل الدالة‪ remove‬لحذؾ الملفات‬


‫مثال‬
‫كود‪PHP:‬‬
‫‪import os‬‬
‫)'‪os.remove('/home/chouaib/test1‬‬

‫اظهار المسار و تؽٌره‬

‫اذا كنت ترٌد ان تعرؾ المسار الكامل الذي انت فٌه فعلٌن استعمال دالة‬
‫)(‪getcwd‬‬
‫و لتؽٌر هذا المسار او الذهاب للمسار جدٌد نستعمل دالة )(‪ chdir‬ثم نضع المسار الذي نرٌد الذهاب الٌه‬
‫مثال‬
‫كود‪PHP:‬‬
‫‪import os‬‬
‫)'‪os.chdir('/home/chouaib‬‬
‫)(‪print os.getcwd‬‬
‫)'‪os.chdir('/usr‬‬
‫)(‪print os.getcwd‬‬

‫)(‪print os.getcwd‬‬

‫اذا فالدالة األولى تؽٌر المسار و الدالة الثانٌة تعلمنا بالمسار الحالً‬

‫نبمى مع نفس المكتبة لنرى خصابص اخرى تمدمها لنا من خالل مكتبة‪path‬‬

‫تحلٌل المسار‬
‫تمكننا دالة ‪ basename‬و دالة‪dirname‬‬
‫من تحلٌل المسار و معرفة اسم المجلد و اسم الملؾ‬
‫مثال لمعرفة اسم الملؾ‬
‫كود‪PHP:‬‬
‫‪import os.path‬‬
‫)'‪print os.path.basename('/home/chouaib/save‬‬

‫مثال لمعرفة المجلد األب‬


‫كود‪PHP:‬‬
‫‪import os.path‬‬
‫)'‪print os.path.dirname('/home/chouaib/save‬‬

‫حفظ المسار على شكل سلسلة‬

‫فً احٌان كثٌرة ستحتاج لحجز اسم المسار و تمسٌمه للستؽالله فً برنامج و لهذا تمدم لن لؽة الباٌثون‬
‫دالة ‪split‬التً تمسم المسار و تحجزه فً متؽٌر آخر انت تختاره‬
‫مثال‬
‫كود‪PHP:‬‬
‫‪import os.path‬‬
‫)'‪dir= os.path.split('/home/chouaib/save‬‬
‫‪print dir‬‬

‫فٌكون الناتج‬
‫)'‪('/home/chouaib', 'save‬‬

‫معرفة حجم الملؾ‬

‫لمعرفة حجم ملؾ او مجلد معٌن نستعمل دالة)(‪getsize‬‬


‫مثال‬
‫كود‪PHP:‬‬
‫‪import os.path‬‬
‫)'‪print os.path.getsize('/home/chouaib/save‬‬

‫و ٌكون الحجم بالباٌت ‪byte‬‬

‫دوال اخرى مفٌدة‬


‫دالة ‪exist‬‬
‫لمعرفة ان كان ٌوجد الملؾ او ال‬
‫و تعود الدالة على لٌمة ‪ 1‬ان كان الملؾ موجود و لٌمة ‪ 0‬ان كان الملؾ ؼٌر موجود‬
‫مثال‬
‫كود‪PHP:‬‬
‫‪import os.path‬‬
‫)'‪e=os.path.exists('/home/chouaib/save‬‬
‫‪if e==1:‬‬
‫'‪print ' file exist‬‬
‫‪else:‬‬
‫'‪print 'file does not exist‬‬

‫دالة ‪isdir‬‬
‫لمعرفة ان كان آخر المسار عبارة عن ملؾ او مجلد و كالدالة السابمة تعود على لٌمة ‪ 1‬ان كان مجلد و ‪ 0‬ان‬
‫كان ملفا‬
‫مثال‬
‫كود‪PHP:‬‬
‫‪import os.path‬‬
‫)'‪e=os.path.exists('/home/chouaib/save‬‬
‫‪if e==1:‬‬
‫'‪print ' file exist‬‬
‫‪else:‬‬
‫'‪print 'file does not exist‬‬

‫ثوجد دالة اخرى مشابهة لهذه الدالة و لكنها مخصصة للملفات اسمها دالة ‪ isfile‬و نستعملها كالدالة السابمة‬
‫و لكن هذه الدالة تعود على لٌمة ‪ 1‬ان كان آخر المسار ملفا و تعود على لٌمة ‪ 0‬ان كان شٌا آخر عدى ملؾ‬

‫هذه ابرز الدوال المخصصة للتعامل مع الملفاة و استؽالل هذه الدوال ٌتٌح لنا حرٌة كبٌرة فً البرمجة‬
‫بواسطة الملفاة‬
‫سنحاول اتمام البرنامج الذي بدبنا فٌه مسبما و نحاول استؽالل كل هذه الدوال إلنشاء برنامج نستعمل فٌه هذه‬
‫الطرق التً رأٌنها لكً تترسخ لدٌنا فكرة واضحة عن الملفاة و لتدعٌم او اكتساب بعض الخبرة‬

‫تم بحمد هللا‬

‫‪nile‬‬

‫مشاهذة مهفه انشخصي‬

‫إرسال رسانت خاصت إنى‪nile‬‬

‫انبحث عن جميع مشاركاث‪nile‬‬

‫أضف ‪ nile‬إنى قائمت األصذقاء‬

‫‪#15‬‬

‫انيوو ‪, 07:30 AM‬‬


: May 2008‫تاريخ انتسجيم‬
22 :‫انمشاركاث‬
MostafaMohamed
‫االدارة‬

Python ‫الــــــــ‬ ‫ دورة فى لغة‬:‫رد‬

‫الموسوعة العربٌة للدورات الشاملة بالصور فى كل المجاالت‬

Snagit
http://www.kutub.info/library/open.php?cat=9&book=1505

AutoPlay Media Studio 6.0.4

http://www.kutub.info/library/open.php?cat=9&book=1491

‫تعلم تنصٌب حزمتٌن من حزم اللٌنكس‬

http://www.kutub.info/library/open.php?cat=45&book=1469

VB.NET

‫تعلم الفٌجوال بٌسن دوت نت فٌدٌو و باللؽة العربٌة‬

http://www.kutub.info/library/open.php?cat=19&book=911

ADO.NET

http://www.kutub.info/library/open.php?cat=19&book=1592

http://www.kutub.info/library/open.php?cat=75&book=983

http://www.kutub.info/library/open.php?cat=75&book=984

http://www.kutub.info/library/open.php?cat=75&book=1049

http://www.kutub.info/library/open.php?cat=75&book=1050

http://www.kutub.info/library/open.php?cat=75&book=1051

‫تعلم تحزٌم البرامج فٌدٌو و باللؽة العربٌة‬

http://www.kutub.info/library/open.php?cat=75&book=940

‫تعلم انشاء التمارٌر فٌدٌو و باللؽة العربٌة‬

http://www.kutub.info/library/open.php?cat=75&book=939

‫تعلم انشاء لواعد البٌانات فٌدٌو و باللؽة العربٌة‬

http://www.kutub.info/library/open.php?cat=75&book=938
‫تعلم برمجة الباركود فٌدٌو و باللؽة العربٌة‬

http://www.kutub.info/library/open.php?cat=75&book=937

‫الموظفون‬

http://www.kutub.info/library/open.php?cat=19&book=930

‫العمارات‬

http://www.kutub.info/library/open.php?cat=19&book=904

‫نظام بنكى‬

http://www.kutub.info/library/open.php?cat=19&book=903

‫المحاسب العربى‬

http://www.kutub.info/library/open.php?cat=19&book=902

‫النوادى‬

http://www.kutub.info/library/open.php?cat=19&book=900

‫طبٌب االسنان‬

http://www.kutub.info/library/open.php?cat=19&book=897

‫المخازن‬

http://www.kutub.info/library/open.php?cat=19&book=896

‫السٌرة الذاتٌة‬

http://www.kutub.info/library/open.php?cat=19&book=892

‫الجوال‬

http://www.kutub.info/library/open.php?cat=19&book=891

Player

http://www.kutub.info/library/open.php?cat=19&book=890

‫التخلٌص الجمركى‬

http://www.kutub.info/library/open.php?cat=19&book=885

‫االسكانر و الكامٌرا‬
http://www.kutub.info/library/open.php?cat=19&book=845

‫الواجهات‬

http://www.kutub.info/library/open.php?cat=19&book=777

‫دورات فٌجوال بٌسن دوت نت‬

http://www.kutub.info/library/open.php?cat=19&book=1540

http://www.kutub.info/library/open.php?cat=19&book=858

http://www.kutub.info/library/open.php?cat=19&book=1692

‫تحوٌل الملؾ التنفٌذى الى كود‬

http://www.kutub.info/library/open.php?cat=19&book=740

‫كتاب التمارٌر‬

http://www.kutub.info/library/open.php?cat=18&book=732

VB6

‫ فٌدٌو و باللؽة العربٌة‬6 ‫تعلم الفٌجوال بٌسن‬

http://www.kutub.info/library/open.php?cat=18&book=916

‫االمثلة‬
http://www.kutub.info/library/open.php?cat=18&book=905

http://www.kutub.info/library/open.php?cat=18&book=906

6 ‫دورات فٌجوال بٌسن‬


http://www.kutub.info/library/open.php?cat=18&book=1595

http://www.kutub.info/library/open.php?cat=18&book=1677

http://www.kutub.info/library/open.php?cat=18&book=787

http://www.kutub.info/library/open.php?cat=18&book=778

http://www.kutub.info/library/open.php?cat=18&book=773

http://www.kutub.info/library/open.php?cat=18&book=739

http://www.kutub.info/library/open.php?cat=18&book=1558
Access

http://www.kutub.info/library/open.php?cat=51&book=1584

http://www.kutub.info/library/open.php?cat=51&book=907

VB2008 Examples

http://www.megaupload.com/?d=3NUN9JXL

‫شرٌط التنزٌل من المٌجا ابلود‬

http://www.megaupload.com/toolbar2.0/toolbar.exe

Kenana1‫برنامج عالم التعلم االلكترونى‬

‫تعلم تطبٌمات االوفٌس و برامج التصمٌم و الجرافٌكس و تطوٌر الموالع و الوٌندوز باللؽة العربٌة و بالصوت‬
‫و الصورة‬

http://www.fileflyer.com/view/eyzQ1Ad

Croel Draw

http://www.kutub.info/library/open.php?cat=36&book=1579

‫احترؾ التعرٌب‬

http://www.kutub.info/library/open.php?cat=9&book=1578

‫الشبكات الالسلكٌه‬

http://www.kutub.info/library/open.php?cat=5&book=1572
AutoPlay Media Studio 6.0.4

http://www.dubaiupload.com/DOWNLOAD/efa5a1626/automediaplay.exe

Setup Factory 7

http://www.kutub.info/library/open.php?cat=18&book=1519

Sound Forge

http://www.kutub.info/library/open.php?cat=60&book=1517

Swish Max

http://www.kutub.info/library/open.php?cat=41&book=1516

Outlook Express

http://www.kutub.info/library/open.php?cat=9&book=1515

Nero

http://www.kutub.info/library/open.php?cat=9&book=1514

‫تصمٌم مولع كامل‬

http://www.kutub.info/library/open.php?cat=2&book=1512

http://www.kutub.info/library/open.php?cat=2&book=1593

http://www.kutub.info/library/open.php?cat=2&book=1684

http://www.kutub.info/library/open.php?cat=31&book=1606

SpeedTouch

http://www.kutub.info/library/open.php?cat=7&book=1501

Excel

http://www.kutub.info/library/open.php?cat=49&book=1585

Maintenance

http://www.kutub.info/library/open.php?cat=52&book=1559

http://www.kutub.info/library/open.php?cat=52&book=1468
Oracle

http://www.kutub.info/library/open.php?cat=16&book=1555

CSharp

http://www.kutub.info/library/open.php?cat=21&book=1554

‫الشبكات‬

http://www.kutub.info/library/open.php?cat=5&book=1544

http://www.kutub.info/library/open.php?cat=5&book=1533

http://www.kutub.info/library/open.php?cat=5&book=1470

Frontpage

http://www.kutub.info/library/open.php?cat=38&book=1532

3dsmax

http://www.kutub.info/library/open.php?cat=37&book=147

Assembly

http://www.kutub.info/library/open.php?cat=24&book=1675

Uninstaller2008

http://www.kutub.info/library/open.php?cat=9&book=1674

Real Player

http://www.kutub.info/library/open.php?cat=59&book=1673

Office2007

http://www.kutub.info/library/open.php?cat=47&book=1605

PHP

http://www.kutub.info/library/open.php?cat=28&book=1597
ASP.Net

http://www.kutub.info/library/open.php?cat=31&book=1587

‫شروحات البرامج‬

http://www.kutub.info/library/open.php?cat=9&book=1542

MostafaMohamed

‫مشاهذة مهفه انشخصي‬

MostafaMohamed‫إرسال رسانت خاصت إنى‬

MostafaMohamed‫إرسال رسانت بريذ إنكتروني إنى‬

MostafaMohamed‫انبحث عن جميع مشاركاث‬

‫ إنى قائمت األصذقاء‬MostafaMohamed ‫أضف‬

‫ة‬

You might also like