Professional Documents
Culture Documents
دورة تعلم البايثون Python
دورة تعلم البايثون Python
دورة تعلم البايثون Python
ٌوم
بسم
الدٌن
أما بعد
سنبدأ بحول هللا دورة فً لؽة الباٌثون نتعرؾ فٌها على هذه اللؽة الرابعة ذات اإلمكانٌات العالٌة التً جمعت بٌن الموة
و السهولة و لمد عرفنا سابما المشارٌع الضخمة التً أنجزت بهذه اللؽة وتعتبر لؽة الباٌثون أحسن إختٌار للبدء
بالبرمجة حسب رأي أؼلب خبراء البرمجة ألنها لؽة كاملة تحتوي على جمٌع مبادئ البرمجة ألنها كانت سابما عبارة
عن نواة نظام تشؽٌل كما أن البرمجة بهذه اللؽة سٌزٌد من إنتاجٌة المبرمج ألنها تتٌح له الكثٌر من الدوال التً تسهل
علٌه إنشاء المشارٌع الكبٌرة كما أن المبرمج بلؽة السً ٌتوجب علٌه تعلم هذه اللؽة إلستعمالها مع لؽة السً حفظا
للولت.
لؽة الباٌثون لؽة محمولة تستطٌع البرمجة بواسطتها على كل األنظمة و لكنها تعتبر مركز لوة
لمستعمل نظام لٌنٌكس خصوصا ألمنها متوافمة مع هذا النظام مما ٌسمح للمبرمج بالتحكم فً
موارد النظام بسهولة.
خطة الدورة:
متطلبات الدورة
سنحتاج أوال إلى المفسر الرسمً للؽة الباٌثون و تستطٌع تحمٌله من المولع الرسمً للؽة
الباٌثون
رابط التحمٌل
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
جٕاب انششط
عند تحمك الشرط لام المفسر بتنفٌد جواب الشرط و هو طباعة الرسالة.
مالحظة هامة ٌ :جب مراعات المسافة التً ٌتٌحها لن البرنامج بعد جملة Ifال تعد ألول السطر
بل أكتب األوامر فً هذه المسافة فكل ما سٌكب فً هذه المسافة ٌعتبره المفسر تابع لجملةif .
اآلن لو كان لدٌنا حالتٌن لشرط واحد ٌتوجب علٌنا إستعمال عبارة ثمسث التً تعتبر أخت جملة
if
بهذا سنكون لادرٌن على التعامل مع أكثر من حالة مع نفس الشرط ,ال ٌشترط كما تالحظون
وضع األلواس فً جملة ifولكن من األحسن وضعهما لكً تزٌد فً وضوح الكود.
وهذه بعض المعامالت التً سنحتاج إلٌها ل التعامل مع المتؽٌرات بواسطة الجمل الشرطٌة
كودPHP:
x==y انًسأاخ
x!=y عذو انًسأاخ
x>y
x<y
x>=y
أكثش أٔ ٚسأ٘
x<=y
أقم أٔ ٚسأ٘
مثال
حتى اآلن لم نعرؾ كٌؾ نطلب من المستعمل إدخال معلومات أو أعداد وهذا ما سنعرفه اآلن
ٌوجد عبارتٌن أساسٌتٌن فً لؽة الباٌثون إلدخال المعلومات هما )( 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
المعامل ٌ 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
#2
كما ٌدل إسمها تستعمل الحاللات لتكرار عمل معٌن عدة مرات فإذا كان لدٌنا عمل ٌتوجب فعله
أكثر من مرة فبدل من أن نكتب األومر عدة مرات نموم بإستعمال حلمة تكرارٌة تكرر هذا العمل.
تحتوي لؽة الباٌثون على نوعٌن من الحلمات :حلمة 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 )':
ستموم هذه الحلمة بتكرار طلب إسم المستخدم حتى ٌدخل إسمه
مثال آخر
ٌموم هذا المثال بجمع األعداد التً ٌدخلها المستخدم حتى ٌدخل الرلم 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
و المثال التالً نفس المثال الذي رأٌناه سابما (إكتشاؾ العدد الزوجً و الفردي) ولكن مع شرط
إدخال عدد موجب فلو أدخل المستخدم عدد سالب تموم الحلمة بإعادة طلب اإلدخال حتى ٌدخل
المستخدم عدد موجب
كود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حتى
ٌتمكن البرنامج من حساب اإلعداد بالفواصل دون مشاكل
ثم ٌدخل المستخدم المعامل الخاص بالعملٌة هنا ٌبدئ البرنامج بدراسة اإلحتماالت حسب المعامل
المدخل فإذا كان عبارة عن عالمة 'ٌ '+موم البرنامج بجمع العددٌن و إظهار النتٌجة و هكذا مع
كل اإلحتماالت األخرى
if(a == b == c):
print"A = B = C"
elif b<c:
print "MAX : C"
أظن أن هذا الكود مفهوم ألنه منطمً لمنا بممارنة كل األعداد مع مراعاة التسلسل فً الممارنة
بهدا نكون لد تمكنا من التً هً أصال لٌمة 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
كود بسٌط ٌمكننا من إكتشاؾ إشارة حاصل ضرب عددٌن دون إستعمال الدوال
كود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
الحلمات
ٌaعتبر العدد و ٌ nعتبر األس بعد ذلن تموم حلمة بضرب العدد aبنفسه و تخزٌن الناتج فً المتؽٌرres
تبدئ الفكرة من الفراؼات التً لبل * من جهة الٌسار فلو الحظتم جٌدا سترون أنها ترسم مثلث
لابم مملوب
إنطاللا من هذه المالحظة سنكتب كود ٌرس مثلث لابم فارغ و فً نفس الولت ٌرسم مثلث
بواسطة الرمز*
كود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:
'print '+'+ a*i + '+
تعتبر هذه الخطوة أول خطوة نحو التعمك فً لؽة الباٌثون ألن السالسل الحرفٌة تعتبر األكثر
إستعماال فً البرمجة و من ٌتمن السالسل الحرفٌة و الموابم و التعامل بها لن ٌجد صعوبة فً
تطوٌر برامجه وإدخال تمنٌات جدٌدة علٌها و هً واسعة اإلستعمال و لن تجد كود ال ٌحتوي على
سالسل حرفٌة و تستعمل خاصتا مع بنون المعلومات (لواعد البٌانات) و التواصل عن بعد
(التطبٌمات الموزعة) و التحكم فً األجهزة عن بعد(برمجة الشبكات ) و التعامل مع الملفات و
أمو كثٌرة جدا ال ٌسعنا الولت لذكرها اآلن.
على كل حال ال تخؾ بأي طرٌمة من الطرق التً سندرسها فً هذا الجزء من الدورة ودون كل
شٌا جدٌد فً ورلة ألن هذا مهم جدا لن.
كما ٌدل إسمها تعتبر السالسل الحرفٌة مجموعة أو سلسلة من الحروؾ أو األرلام المترابطة
ببعضها البعض فهً مجموعة من المتؽٌرات المترابطة ببعضها و المحجوزة بمتؽٌر واحد فً
مكان واحد.
مثال
كودPHP:
"name="chouaib
"age="21 years old
print name
print age
ٌسمى المتؽٌر nameسلسلة أو stringونفس الشٌا ل ageو كما موضح فً المثال نموم بكتابة إسم
المتؽٌر ثم نسند له المحتوى
سٌكون الناتجC
و نستطٌع طباعة الحرؾ بالعد العكسً أي بدأ العد من آخر السلسة
كودPHP:
]print name[2-
سٌكون الناتجi
و نستطٌع التعامل مع السالسل بواسطة المعامالت الرٌاضٌة * +كما هو موضح فً المثال التالً
كودPHP:
"name="chouaib
"age="21 years old
nameandage=name+age
print name
print age
print nameandage
بهذه الطرٌمة نتمكن من إنشاء مجال معٌن لطباعة جزء معٌن من السلسلة
وبنفس الطرٌمة نستطٌع التعامل مع أجزاء السلسلة بواسطة المعامالت الرٌاضٌة
كود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
تموم هذه الدالة بإعطابنا طول الدالة أو طول جزء من الدالة و هذا من روعة لؽة الباٌثون بحٌث
أنه لو أردنا معرفت طول سلسلة بلؽة السً ٌتوجب علٌنا كتابة كود بثالثة أسطر
و 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وهم على حك و لكن كٌؾ ؟
i=i+1
جربوا هذا الكود و ستكتشفون الخطأ بأنفسكم مع أن الكود صحٌح مبة بالمابة و لكنه لٌؤدي
العمل الذي نرٌد بحٌث أنه ٌموم بطابعة الرسالة عدة مرات عندما ال ٌجد االسم.
لماذا ؟ ألن جملة elseمكتوبة داخل الحلمة فٌموم البرنامج بالتحمك من الشرط األول
كودPHP:
if name[i]==search:
هنا كلو تمام و لكن المشكل ٌبدأ عندما ال ٌتحمك الشرط األول فٌموم البرنامج بالتوجه نحو جملة
elseلٌطبع العبارة
كودPHP:
print "can't find this name ",search
هو ٌموم بطباعتها فعال و لكن المشكل أنه ٌطبعها بعدد المرات التً لم ٌجد اإلسم فً السلسلة(عدم
تحمك الشرط األول)
من ٌبحث عن اإلسم األول ) (chouaibفً السلسلة لن ٌكتشؾ هذا الخطأ و لكن من ٌبحث عن
اإلسم الثانً و األسماء التً تلٌه سٌكتشؾ الخطا فمثال لو لمنا بالبحث عن إسم )(jarod
سٌكون الناتج كالتالً
فالبرنامج ٌبمى ٌطبع فً رسالة 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
أي أن رسالة can't find this nameلن تظهر حتى ٌكون العداد ألل من طول السلسلة
بدرجة (أي أنه فً نهاٌتها)
جربو الكود الجدٌد بنفسكم و حاولو إضافت بعض األشٌاء الجدٌدة علً
nile
#3
و هذه مجموعة من األمثلة المتعلمة بالسالسل الحرفٌة و التعامل معها تضعنا فً المكان الصحٌح
لبل البدأ فً الموبم
لبل أن ننطلك ٌتوجب علٌنا تعرٌؾ الدوال ألننا تكلمنا علٌها كثٌرا دون تعرٌفها
انشأت الدوال فً مطلع البرمجة اإلجرابٌة و لمد أحدثت طفرة كبٌرة فً مجال البرمجة و لها
الفضل الكبٌر فً تطوٌر لؽات البرمجة حتى اصبحت كما هً علٌه الٌوم
و الدالة تموم بجمع عدة أوامر و أعمال معٌنة (إجراءات) لتمدٌم نتٌجة معٌنة فمثال لو أردنا جمع
عددٌن نكتب
كود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و اإلسم بالطبع إختٌاري تستطٌع تؽٌره و كل ما ٌأتً بعد النمطتٌن ٌعتبر تابع للدالة أو
بعبارة أخرى ٌعتبر جسم الدالة و األوامر التً ستموم بتنفٌدها هذه الدالة
فً األخٌر لمنا بإستدعاء الدالة بكتابة إسمها فمط.
هذا تعرٌؾ بسٌط عن الدوال و سنعود لها بعد اإلنتهاء من دراسة الموابم بإذن هللا
'name='chouaib
(c=len(name
i=c-1
while i>=0:
]print name[i
i=i-1
ٌموم عداد الحلمة بالتمركز على آخر حرؾ فً السلسة c-1و لو كتبنا س سٌحدث خطأ و لن
ٌعمل البرنامج ألن آخر حرؾ فً أي سلسلة ٌتمركز فً الموضع c-1فالمفسر ٌترن الموضع
األخٌر لعالمة /و التً تعنً نهاٌة محتوى السلسلة فالجهاز ٌرى هذه السلسة عبارة عن
chouaib / .
و شرط الحلمة أن ٌكون العداد ال ٌمل عن الصفر أي عندما ٌصل العداد إلى موضع الصفر تتولؾ
الحلمة.
بعدها ٌبدأ البرنامج فً النسخ من آخر السلسلة إلى أولها حتى ٌنتفً الشرط.
المثال الثانً
سٌموم هذا بإخذ إسم من المستخدم ثم ٌموم بنسخ عالمة * بٌن كل حرؾ من إسم المستخدم.
كودPHP:
)c=len(name
i=0
while i<c:
print name[i]+'*',
i=i+1
ٌموم هذا الكود بنسخ حرؾ من إسم المستخدم ثم ٌضٌؾ له العالمة * و لمد إستعملنا الفاصلة
لطباعة اإلسم فً سطر واحد.
المثال الثالث
فً المثال التالً ٌموم المستخدم بإدخال إسم ثم ٌحدد ل البرنامج الحرؾ الذي ٌرٌد معرفة عدد
تكراره فً االسم فٌموم البرنامج بحساب عدد تكرار هذا الحرؾ
كودPHP:
)c=len(name
while i<c:
if name[i]==char:
y=y+1
i=i+1
ٌحتوي هذا الكود كما تالحظون على حلمة واحدة وعدادٌن األول إي ٌمكن الحلمة من معاٌنة كل
محتوى السلسلة و العداد الثانً ٌموم بحساب عدد األحرؾ و هذا بإضالة 1فً كل مرة تجد فٌها
الحلمة الحرؾ المحدد من طرؾ المستعمل .و فً النهاٌة ٌموم البرنامج بنسخ النتابج للمستعمل.
مثال الرابع
ٌموم المثال التالً بنسخ محتوى سلسلة فً سلسلة أخرى فارؼة
كودPHP:
"name="my name
""=name2
)c=len(name
i=0
i=i+1
print name2
دابما نستعمل الحلمات لكً نتمكن من المرور على كل أجزاء السلسلة ثم نضٌؾ كل حرؾ من
السلسلة األولى إلى السلسلة الثانٌة(الفارؼة)
كما نستطٌع عكس اإلسم األول و حفظه فً اإلسم الثانً و ذلن بتؽٌر شرط الحلمة على الشكل
التالً
كودPHP:
i=c-1
while i>=0:
]name2+= name[i
i=i-1
المثال الخامسة
من المثال السابك نستطٌع عمل برنامج ٌطلب من المستخدم إدخال إسم ثم ٌخبره البرنامج إن كان
اإلسم Palindormاو ال و اإلسم Palindormeهو الذي ال ٌتؽٌر عندما نعكسه
""=name2
)c=len(name
i=c-1
while i>=0:
]name2=name2+name[i
i=i-1
if name==name2:
"print"palindorme
else:
المثال السادس
فً هذا المثال سنستعمل سلسلتٌن األولى تموم بحفظ إسم المستخدم و الثانٌة تموم بحفظ كلمة
المرور الخاصة بالمستعمل
ثم ٌموم البرنامج بنسخ المحتوى بكتابة اسم المستخدم و كلمة المرور الخاصة به
كودPHP:
)'pas=('123125','85478','99857','88475
)c=len(name
)b=len(pas
i=i+1
لمنا بإنشاء حلمة ذات عدادٌن العداد األول إي ٌموم بتفحص أجزاء سلسلة االسماء و نسخها و
فً نفس الولت ٌموم العدادا الثانً بفحص كلمات المرور و نسخها بحٌث إذا طبع العداد األول
اإلسم األول ٌطبع العداد الثانً كلمة المرور الثانٌة و هكذا حتى تنتهً السلسلة
المثال السابع
إنطاللا من المثال السابك سنطورفً الكود للٌال بحٌث ٌموم البرنامج بالطلب من المستخدم إدخال
اإلسم ثم كلمة المرور ثم ٌتحمك البرنامج من صحة المعلومات المدخلة و ٌطبع رسالة للمستخدم
بنجاح الدخول إذا كانت المعلومات صحٌحة أو رسالة خطأ إذا كان اإلسم أو كلمة المرور خاطبة
كودPHP:
)"user=("chouaib","lemdaoui","amir
)"pas=("5555","3333","2222
)c=len(user
i=0
break
else :
if i==c:
i+=1
المثال للثامن
سٌموم هذا المثال بالطلب من المستخدم إدخال إسمه ثم ٌحول البرنامج الحرؾ األول من إسم
المستخدم إلى حرؾ كبٌر و ٌطبع له الناتج
كودPHP:
import string
)i=len(name
]name1=string.upper(name[0])+name[1:i
فً السطر األول لمنا بإستدعاء المكتبة و هً مكتبة تضم الكثٌر من الدوال التً تساعدنا على
التعامل مع السالسل و لمنا بحجز إسم المستخدم فً المتؽٌر nameو فً السطر الرابع لمنا
بإستعمال دالة upperالتً تموم بتحوٌل الحروؾ من Minإلى Majو لمد لمنا بتحوٌل الحرؾ
األول فمط ] name[0ثم أضفنا إلٌه بالً الحروؾ دون تؽٌٌر.
و هذه بعض الدوال الخاصة بالتعامل مع السالسل و ستساعدنا كثٌرا فً المستمبل لدى أرجوا من
الجمٌع فهمها و سنتطرق لها بالتمارٌن إن شاء هللا.
**للبحث عن مكان كلمة معٌنة داخل سلسة نموم بإستعمال الدالةfind
كودPHP:
)'print name.find('is
سٌكون الناتج
كودPHP:
C :Mes ********sPython ******er
أو كما فً المثال التالً بحٌث نستعمل الدالة joinللفصل بٌن العناصر بكلمةor
كودPHP:
'name='Mohamed','Amine','Samy
سٌكون الناتج
كودPHP:
Mohamed or Amine or Samy
'name='Mohamed','Amine','Samy
)print sep.join(name
و عكس هذه الدالة هً دالة splitبحٌث أن دالة splitتموم بتمسٌم سلسلة حسب العنصر الذي
نحدده لها ثم تموم بتحوٌل هذه السلسلة إلى لابمة
)'print name.split('or
][/sizeسٛكٌٕ انُاذج]"[size="4
كما أننا نستطٌع إستعمال هذه الدالة لتحوٌل سلسلة إلى لابمة
كودPHP:
)(print user.split
سٌكون الناتج
كودPHP:
)'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و اإلسم بالطبع إختٌاري تستطٌع تؽٌره و كل ما ٌأتً بعد النمطتٌن ٌعتبر تابع للدالة أو
بعبارة أخرى ٌعتبر جسم الدالة و األوامر التً ستموم بتنفٌدها هذه الدالة
فً األخٌر لمنا بإستدعاء الدالة بكتابة إسمها فمط.
هذا تعرٌؾ بسٌط عن الدوال و سنعود لها بعد اإلنتهاء من دراسة الموابم بإذن هللا
'name='chouaib
(c=len(name
i=c-1
while i>=0:
]print name[i
i=i-1
ٌموم عداد الحلمة بالتمركز على آخر حرؾ فً السلسة c-1و لو كتبنا س سٌحدث خطأ و لن
ٌعمل البرنامج ألن آخر حرؾ فً أي سلسلة ٌتمركز فً الموضع c-1فالمفسر ٌترن الموضع
األخٌر لعالمة /و التً تعنً نهاٌة محتوى السلسلة فالجهاز ٌرى هذه السلسة عبارة عن
chouaib / .
و شرط الحلمة أن ٌكون العداد ال ٌمل عن الصفر أي عندما ٌصل العداد إلى موضع الصفر تتولؾ
الحلمة.
بعدها ٌبدأ البرنامج فً النسخ من آخر السلسلة إلى أولها حتى ٌنتفً الشرط.
المثال الثانً
سٌموم هذا بإخذ إسم من المستخدم ثم ٌموم بنسخ عالمة * بٌن كل حرؾ من إسم المستخدم.
كودPHP:
)c=len(name
i=0
while i<c:
print name[i]+'*',
i=i+1
ٌموم هذا الكود بنسخ حرؾ من إسم المستخدم ثم ٌضٌؾ له العالمة * و لمد إستعملنا الفاصلة
لطباعة اإلسم فً سطر واحد.
المثال الثالث
فً المثال التالً ٌموم المستخدم بإدخال إسم ثم ٌحدد ل البرنامج الحرؾ الذي ٌرٌد معرفة عدد
تكراره فً االسم فٌموم البرنامج بحساب عدد تكرار هذا الحرؾ
كودPHP:
)c=len(name
while i<c:
if name[i]==char:
y=y+1
i=i+1
مثال الرابع
ٌموم المثال التالً بنسخ محتوى سلسلة فً سلسلة أخرى فارؼة
كودPHP:
"name="my name
""=name2
)c=len(name
i=0
]name2+= name[i
i=i+1
print name2
دابما نستعمل الحلمات لكً نتمكن من المرور على كل أجزاء السلسلة ثم نضٌؾ كل حرؾ من
السلسلة األولى إلى السلسلة الثانٌة(الفارؼة)
كما نستطٌع عكس اإلسم األول و حفظه فً اإلسم الثانً و ذلن بتؽٌر شرط الحلمة على الشكل
التالً
كودPHP:
i=c-1
while i>=0:
]name2+= name[i
i=i-1
المثال الخامسة
من المثال السابك نستطٌع عمل برنامج ٌطلب من المستخدم إدخال إسم ثم ٌخبره البرنامج إن كان
اإلسم Palindormاو ال و اإلسم Palindormeهو الذي ال ٌتؽٌر عندما نعكسه
""=name2
)c=len(name
i=c-1
while i>=0:
]name2=name2+name[i
i=i-1
if name==name2:
"print"palindorme
else:
سٌموم البرنامج بعكس اإلسم و حفظه فً سلسلة ثانٌة ثم ٌمارن محتواهما فإن تطابما فاإلسم من
نوع Palindormeو ان لم ٌتطابما فاإلسم لٌس من نوعPalindorme .
المثال السادس
فً هذا المثال سنستعمل سلسلتٌن األولى تموم بحفظ إسم المستخدم و الثانٌة تموم بحفظ كلمة
المرور الخاصة بالمستعمل
ثم ٌموم البرنامج بنسخ المحتوى بكتابة اسم المستخدم و كلمة المرور الخاصة به
كودPHP:
)'pas=('123125','85478','99857','88475
)c=len(name
)b=len(pas
i=i+1
لمنا بإنشاء حلمة ذات عدادٌن العداد األول إي ٌموم بتفحص أجزاء سلسلة االسماء و نسخها و
فً نفس الولت ٌموم العدادا الثانً بفحص كلمات المرور و نسخها بحٌث إذا طبع العداد األول
اإلسم األول ٌطبع العداد الثانً كلمة المرور الثانٌة و هكذا حتى تنتهً السلسلة
المثال السابع
إنطاللا من المثال السابك سنطورفً الكود للٌال بحٌث ٌموم البرنامج بالطلب من المستخدم إدخال
اإلسم ثم كلمة المرور ثم ٌتحمك البرنامج من صحة المعلومات المدخلة و ٌطبع رسالة للمستخدم
بنجاح الدخول إذا كانت المعلومات صحٌحة أو رسالة خطأ إذا كان اإلسم أو كلمة المرور خاطبة
كودPHP:
)"user=("chouaib","lemdaoui","amir
)"pas=("5555","3333","2222
)c=len(user
i=0
while i<c:
break
else :
if i==c:
i+=1
المثال للثامن
سٌموم هذا المثال بالطلب من المستخدم إدخال إسمه ثم ٌحول البرنامج الحرؾ األول من إسم
المستخدم إلى حرؾ كبٌر و ٌطبع له الناتج
كودPHP:
import string
)i=len(name
]name1=string.upper(name[0])+name[1:i
فً السطر األول لمنا بإستدعاء المكتبة و هً مكتبة تضم الكثٌر من الدوال التً تساعدنا على
التعامل مع السالسل و لمنا بحجز إسم المستخدم فً المتؽٌر nameو فً السطر الرابع لمنا
بإستعمال دالة upperالتً تموم بتحوٌل الحروؾ من Minإلى Majو لمد لمنا بتحوٌل الحرؾ
األول فمط ] name[0ثم أضفنا إلٌه بالً الحروؾ دون تؽٌٌر.
و هذه بعض الدوال الخاصة بالتعامل مع السالسل و ستساعدنا كثٌرا فً المستمبل لدى أرجوا من
الجمٌع فهمها و سنتطرق لها بالتمارٌن إن شاء هللا.
)'print name.find('is
سٌكون الناتج
كودPHP:
C :Mes ********sPython ******er
أو كما فً المثال التالً بحٌث نستعمل الدالة joinللفصل بٌن العناصر بكلمةor
كودPHP:
'name='Mohamed','Amine','Samy
سٌكون الناتج
كودPHP:
Mohamed or Amine or Samy
'name='Mohamed','Amine','Samy
)print sep.join(name
و عكس هذه الدالة هً دالة splitبحٌث أن دالة splitتموم بتمسٌم سلسلة حسب العنصر الذي
نحدده لها ثم تموم بتحوٌل هذه السلسلة إلى لابمة
)'print name.split('or
][/sizeسٛكٌٕ انُاذج]"[size="4
كما أننا نستطٌع إستعمال هذه الدالة لتحوٌل سلسلة إلى لابمة
كودPHP:
)(print user.split
سٌكون الناتج
كودPHP:
)'print name.replace('Samy','Amar
هذه بعض األمثلة عن التعامل مع السالسل الحرفٌة على كل حال سنخصص لها بعض المشارٌع
البسٌطة حتى نفهمها جٌدا و لكن بعد دراسة الموابم listو الموامٌس
سٌكون درسنا المادم بإذن هللا الموامٌس و التعامل معها
لدٌنا الٌوم ثالث تمارٌن شاملة بإذن هللا تعطٌنا نظرة بسٌطة عن التعامل مع كل ما درسناه سابما و تمهدنا
لدراسة أمور أكثر تمدما فً الدروس المادمة و أرٌد التنبٌه على اإلكثار من األمثلة و التعدٌل علٌها و تجرٌب
كل ماراٌناه من دوال و تطبٌمها ألن البرمجة ال تتعلم إال بالتطبٌك أما الحفظ فلن ٌفٌدن فً شٌا إذا أخً
المارئ نصٌحة لم بإضافة أشٌاء جدٌدة على االمثلة التً فً الدورة و ؼٌر بعض األشٌاء علٌها واكتب
مالحظاتن علٌها ألن هذا األمر مهم جدا
التمرٌن األول
فكرة هذا الترٌن تتمثل فً إنشاء لاعدة بٌنات لحفظ المعلومات و ٌمثل هذه الماعدة لاموس نموم بإنشابه و
نفرض مثال أن هذه الماعدة تستعمل لحفظ معلومات خاصة بالطالب ٌستعملها األستاذ لحفظ إسم الطالب و
النمطة المتحصل علٌها.
سنموم بإنشاء بعض الدوال التً تساعد األستاذ على عمله و ٌحتوي هذا الكود على أربع دوال
الدالة )( get_nameتموم بأخذ اإلسم و النمطة و حفظها داخل الماموس (لاعدة البٌانات)
الدالة )(del_nameتموم بحذؾ بٌانات طالب معٌن ٌموم بتحدٌده األستاذ
الدالة )(show_dicoتموم بإظهار كل المعلومات المحجوزرة داخل الماعدة
الدالة )( search_nameتموم بالبحث داخل الماعدة عن طالب معٌن و إظها البٌانات الخاصة به
إذن فالكود ممسم إلى أربع دوال لكل دالة عمل معٌن تموم به و عند اإلنتهاء من برمجة هذه الدوال نموم
بإستدعابها بإسمها فمط
الكود
إستدعٌنا مكتبة 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
نكون هنا لد انهٌنا المثال األول و فً الحمٌمة سنعود لهذا المثال بالذات عند دراسة الملفات ألن عمل هذا
المثال مرتبط بالملفات.
بمً لدٌنا تمرٌنٌن اثنٌن سنتعلم من خاللهما كٌفٌة عمل مكتبة و استدعاء الدوال من خاللها و سنطبك مثال
على هذا الكود الذي درسناه.
nile
#4
لم بكتابة الكود الخاص بالدوال على المفسر ثم اعطه اسما مثال 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
و لمد بالتعدٌل علٌه بحٌث انه سٌبمى ٌنتظر أوامر المستخدم حتى ٌطلب هذا األخٌر الخروج من
البرنامج و ذلن بإدخال رلم 5
و أبشر ٌا أخً ألنن صرت تعرؾ كٌؾ تنشا مكتبة و تزٌد فً لؽة الباٌثون أشٌاء جدٌدة
nile
#5
]التمرٌن الثانً
فكرة هذا التمرٌن تكمن فً برمجة اربع أوامر 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
و دابما أأكد على معالجة مدخالت المستخدم فٌجب علٌن أخً المارئ أن تعتاد على هذه الطرق
الن البرنامج لو تمبل كل ما ٌدخله المستخدم ستكون العوالب وخٌمة لدى ضع فً بالن دابما كل
اإلحتماالت الممكنة الولوع و عالجها كلها حتى ٌكون برنامجن متكامل و منطمً
بعد التحمك من العنوان نموم بطبع رسالة للمستخدم تعلمه أن اإلتصال نجح و لو حدث خطأ فً
اإلتصال كإدخال عنوان خاطا سٌموم البرنامج بطباعة رسالة خطا للمستخدم
)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
أخً الكرٌم الصور التً وضعتها لتوضٌح فمط و هذا المثال هو نفسه التمٌرن األول الذي عملناه (مشاركة رلم
)40هو نفسه التمرٌن الموجود على الصورة و معن حك أخً الكرٌم أنا لم أنتبه على هذا لبل وضع الصور
على كل حال انت اتبع الصور
لم بفتح البرنامج و لم بكتابة كل الدوال التً ربٌناها فً التمرٌن األول ثم احفظ الملؾ داخل المجلد Libثم
افتح البرنامج ثانٌتا و اكتب الكود الربٌسً الذي تجده تحت الصور][/size
كودPHP:
import student
print " (1): add name \n (2): search \n (3): delte \n (4): show \(5):
"Quit
اما ما ٌخص التمارٌن و التمٌم فأنا أعلم هذا و سنتحدث حول هذا الموضوع بعد نهاٌة هذه
المرحلة انت اآلن ماعلٌن إال فهم األمثلة جٌدا و حاول التؽٌر على هذه األمثلة و اضافة اشٌاء
جدٌدة علٌها
و أي التراح ,سؤال ,استفسار ,أنا فً الخدمة
nile
#7
التمرٌن الثالث
هو تمرٌن بسٌط ال ٌحتوي على شفرات طوٌلة و لكنه سٌعلمنا كٌفٌة التحكم فً المدخالت و
تحوٌلها من صٌؽة إلى أخرى و توجٌهها إلى آلداء الخدمة التً نرٌدها
التمرٌن عبارة عن لعبة لؽوٌة نمو بإدخال كلمة مثال 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
نموم بدراسة الحرؾ المدخل فإذا كان ٌنتمً للكلمة و ال ٌوجد فً المابمة 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
و إذا لم تتساوى المابمتٌن نموم بزٌادة العداد و تعاد نفس الخطوات السابمة
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
و هنا نكون لد انتهٌنا من التمرٌن األخٌر فً هذه المرحلة و حاول فهم هذا التمرٌن جٌدا أخً
المارئ ألنه ٌحتوي على فوابد كثٌرة ستحتاجها فً المراحل المادمة.
أحٌطكم علما أنً جمعت كل ما راٌناه فً ملؾ pdfو بمً ٌحتاج لبعض التعدٌل فمط و سأضع
رابط التحمٌل الخاص بهذا الملؾ ؼدا بإذن هللا كما أنً سأضع بعض التمارٌن التمٌمٌة
nile
#8
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
نبمى مع نفس البرنامج لم بتطوٌره بحٌث ٌصبح البرنامج ٌعرؾ معامل التحوٌل وما على المستخدم إال ادخال
رمز عملته و المبلػ
مثال ٌطلب البرنامج من المستخدم ادخال المبلػ ثم ٌطلب منه ادخال رمز عملته (لاير مثال) فٌموم البرنامج
بالتحوٌل مباشرتا دون طلب معاما التحوٌل.
لم بكتابة برنامج ٌنسخ كل إسم من هذه المابمة و ٌنسخ امامه عدد احرؾ اإلسم
6-عدل على هذا البرنامج بحٌث ان البرنامج ال ٌسمح باألسماء التً ٌفوق عدد احرفها 8فإن وجد اسم ٌفوق
عدد احرفه هذا الرلم ٌموم البرنامج بحذفه من المابمة
7-اكتب برنامج تسجٌل الطلبة حٌث ان المستخدم ٌدخل اسم الطالب و تارٌخ تسجٌل ثم اضؾ إلى هذا
البرنامج خصابص البحث و الحذؾ
8-هذا التمرٌن طرح فً مسابمة خاصة بمولع الخوارزمٌات العربً ونص هذا التمرٌن كا التالً
عند ارسال اي رسالة لصٌرة SMSفانت ملزم بعدم كتابةاكثر من 160حرؾ لذا فمن الملزم علٌن ؼالٌا
االختصار.
سوؾ ٌتم اعطابن textو هو نص الرسالة و ٌجب ان تترجمها الى لؽة SMSطبعا للمواعد التالٌة:
فٌا جماعة أرونا شطارتكم فهذا المشكل سهل نوعا ما و سنثبت لهم اننا تعلمنا مبادئ لؽة الباٌثون فمط و
استطعنا حل هذه الخوارزمٌة :smailes40:
ٌجب علٌن طلب من المستخدم بإدخال الرسالة
ثم تموم بإنشاء لابمة تحتوي على الكلمات الممنوعة
و لابمة تحتوي على اإلختصارات
ثم تعمل حلمة تفحص الرسالة و تستبدل كل كلمة باإلختصار المناسب لها
على كل حال سنحل هذا التمرٌن مع بعضنا البعض بإذن هللا لكن حاولوا انتم ثم نرى مع بعضنا الحل
و اود ان اذكركم اخوانً الكرام انه ٌجب اإلكثار من التطبٌمات لكل ما راٌناه فً هذا الجزء حاولو التؽٌر فً
األمثلة التً رأٌناها و إضافة أشٌاء جدٌدة علٌها حاولو إستعمال كل الدوال التً راٌناها من لبل و استؽاللها
فً حل المشاكل حتى وإن لم ٌنجح الكود الذي كتبته حتى و ان كان البرنامج الٌعمل حاول فمط و ابحث عن
سبب المشكل و ابحث عن حل له صدلنً ستستفاد كثٌرا][/size
nile
#9
__________________________
بالنسبة للسؤال الرابع
نبمى مع نفس البرنامج لم بتطوٌره بحٌث ٌصبح البرنامج ٌعرؾ معامل التحوٌل وما على المستخدم إال ادخال
رمز عملته و المبلػ
مثال ٌطلب البرنامج من المستخدم ادخال المبلػ ثم ٌطلب منه ادخال رمز عملته (لاير مثال) فٌموم البرنامج
بالتحوٌل مباشرتا دون طلب معاما التحوٌل.
كود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و تموم باستدعابه مرة او
اثنبن حتى تتمكن الدالة من حذؾ كل الحروؾ الؽٌر مرؼوب بها
المطلوب منن تجد طرٌمة ٌموم بها البرنامج باستبدال جمٌع الكلمات مرة واحدة
المهم هذه بعض األفكار المساعدة و ٌبمى علٌكم التعدٌل علٌها و توجٌهها لكً تؤدي العمل
المطلوب.
nile
#10
الدوال
تكلمنا سابما عن الدوال و رأٌنا انها تساعدنا فً تنظٌم اكواد البرنامج خاصتا الطوٌلة منها بحٌث
اننا نمسم كود البرنامج على عدة السام ثم نموم ببرمجة كل لسم على حدى بحٌث ان هذا المسم
ٌكون داخل دالة و بعد اإلنتهاء نموم باستدعاء الدوال و ترتٌبها حسب البرنامج كما رأٌنا فً
التمرٌن األول (مشاركة )40حٌث لمنا ببرمجة اربع دوال لكل دالة عمل معٌن تموم به و فً
الكود الربٌسً نموم باستدعاء هذه الدوال حسب الرؼبة بل رأٌنا اننا نستطٌع حفظ هذه الدوال و
استدعابها متى تدعوا الحاجة و هنا ٌتبٌن لنا ان الدوال لها فابدة كبٌرة جدا بحٌث انها تسهل علٌنا
العمل كما انها تختزل الولت فً كتابة األكواد بحٌث انن تموم ببرمجة الدوال التً ترى انن
تحتاجها دابما ثم تحفظها فً ملؾ و تستدعٌها فً أي مرة تحتاجها.
و ل الدوال فابدة اخرى تتجلى فً المساعدة على اكتشاؾ األخطاء افرض مثال انن كتبت برنامج
ٌحتوي على 200سطر و حدث خطا فً هذا البرنامج كٌؾ ستجد مصدر الخطأ سٌكون هذا
كاتلبحث عن ابرة فً لومة لش فلو استعملت الدوال فً الكود لن ٌتطلب اكتشاؾ الخطأ و لتا
كبٌرا ألنن تذهب مباشرتا الى الدالة التً ال تؤدي عملها و تموم بتعدٌلها.
"***************"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
نفس الترتٌب نموم بتسمٌة الدالة ثم نعطٌها البارامترات التً تحتاجها أو باألحرى التً نحتاجها
نحن
ثم نموم بكتابة الكود عادي جدا كأننا نتعامل مع متؽٌرات حمٌمٌة
و فً النهاٌة تعود الدالة على النتٌجة المرجوة وهً هنا تتمثل فً أكبر لٌمة من بٌن ثالث لٌم
و عند استدعاء الدالة نعوض البارامترات بالمتؽٌرات التً ادخلها المستخدم ثم نموم بطبعه
النتٌجة معتمدٌن على المٌمة التً تحتوٌها الدالة (التً تعود إلٌها).
اظن ان فكرة الدوال بدبت تتضح للٌال و نضع تلخٌص لما راٌناه
اإلجراء عبارة عن دالة فارؼة أي انها ال تعود على لٌمة معٌنة
الدالة تأخذ بارامتلرات و تعود على نتٌجة معٌنة
و نستطٌع ان نتعامل مع الدالة كأي متؽٌر آخر عكس اإلجراءات
مثال
كود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
و لهذا تجد ان استعمال الدوال شابع جدا حتى مع امكانٌة استعمال البرمجة الموجهة oopالن
الدوال بسٌطة ممارنتا مع … class methodكما انها تتٌح لنا عدة امكانٌات و لؽة الباٌثون
كما ذكرت سابما تتٌح لن البرمجة بالنمطٌن معا على حسب اختٌارن.
nile
#11
نواصل مع الدوال و هذه المرة سنتحدث عن المتؽٌرات فً الدوال و الموضوع مهم جدا لدى ارجوا منكم
اخوانً الكرام التركٌز جٌدا.
عند استعمال الدوال ٌتؽٌر استعمال المتؽٌرات بالطرٌمة التً اعتدنا علٌها ألن المتؽٌرات تنمسم إلى لسمٌن
المتؽٌرات الكلٌة 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
و معنى الرسالة ان المتؽٌر Xؼٌر معروؾ و سبب لنا هذا الخطأ الدالة bألننا استعملنا المتؽٌر
xداخلها و لٌس لها الصالحٌة باستعمال هذا المتؽٌر ألنه تابع للدالة aو هذه هً المتؽٌرات
الداخلٌةlocal
إذا نلخص
تنمسم المتؽٌرات إلى لسمٌن المتؽٌرات ذات النوع globalو هً التً تعرؾ فً الكود الربٌسً
و تستطٌع أي دالة استعمالها و المسم الثانً ٌعتبر هً المتؽٌرات ذات النوع localو هً
المتؽٌرات التً تعرؾ داخل الدوال و ال تستطٌع الدوال األخرى استعمالها ألنها تبمى تابعة للدالة
التً عرفت داخلها
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
مالحظة:
لٌس بالضرورة تؽٌر لٌمة المتؽٌر داخل الدالة بصورة نهابٌة فً كل مرة و انما عند الحاجة فمط أي اذا كانت
تحتاج تؽٌر لٌمة المتؽٌر داخل الدالة بصورة نهابٌة فاستعمل العبارة globalاما اذا كنت ال تحتاج هذا التؽٌر
النهابً فاستعمل الطرٌمة التً رأٌناها سابما
أي لن الخٌار فً استعمل هذه الطرق حسب الحاجة.
و هنا الخبرة و الممارسة تلعب دور فً اختٌار نمط العمل و ستكتسب هذه الخبرة من كتابة الكثٌر من األكواد
ألن مهمة كتابة كود خالً من الثؽرات تبدئ من اختٌار المتؽٌرات و تحدٌد انواعها و التعامل بهذه المتؽٌرا
بواسطة الدوال
]"[color="DarkGreenمازلنا مع الدوال و سندرس فً المرة المادمة بإذن هللا بعض الطرق الرابعة
للتعامل مع الدوال و لبل هذا ٌجب علٌن اخً المارئ فهم هذا الدرس جٌدا ألن الدوال تعتبر من اهم النماط و
طرٌمة فهمن لها ستؤثر على كل مشوارن المستمبلً.
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
المتؽٌر الثانً متؽٌر Xأٌضا لكنه من نوع globalو ٌبتدئ بمٌمة 7
كودPHP:
x = 7
فً المرة الثالثة ٌطبع 25ثم 26و هذا ٌأكد لنا مرة أخرى ان المفسر
ٌفرق بٌن xالتابعة ل )( aو xالربٌسٌة
ارجوا ان ٌكون هذا الشرح البسٌط لد لرب األمور إلٌكم و أجاب على
بعض تساؤالتكم
nile
#12
تسٌر األخطاء
تعتبر األخطاء فً البرمجة من أكبر األخطار التً تهدد البرنامج سواء من الجهة األمنٌة
(الثؽرات) أو من جهة الفعالٌة (السرعة و الثبات)
كما أن األخطاء تسبب اإلحباط للمبرمج و تنمص من فعالٌته و تركٌزه أثناء كتابة الكود و هذا ما
ٌؤدي إلى انخفاض مستوى انتاجٌة المبرمج و تهدر ولته و جهده
و المبرمج المتمكن هو الذي ٌستطٌع كتابة أكواد بألل عدد من األخطاء
و المبرمج المحترؾ هو الذي ٌستطٌع كتابة أكواد دون أخطاء تمرٌبا و ٌستطٌع أن ٌكتشؾ
األخطاء بنوعٌها (سنتكلم عن األنواع) من النظرة األولى للكود
و فً الحمٌمة ٌعتبر هذا المبرمج من صنؾ المطورٌن و لمد تكلمت فً الممال عن الفرق بٌن
المبرمج و المطور
و تنمسم األخطاء فً البرمجة إلى نوعٌن
األخطاء الكتابٌة :و هً األخطاء الكتابٌة فً الكود كنسٌان حرؾ أو كتابة عبارة مجهولة ال
تحتوٌها اللؽة مثال فً العوض ان نكتب 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
رسالة الخطا
كودPHP:
Traceback (innermost last):
? File "<stdin>", line 1, in
KeyError: server
استعمال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
سنعمل دالة اسمها 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 بإدراج أكثر من عبارة
PHP:كود
except Exception1[, reason1]:
suite_for_exception_Exception1
except Exception2[, reason2]:
suite_for_exception_Exception2
:
print float1('a')
ًكما أننا نستطٌع ان نجمع عدة احتماالت فً عبارة واحدة على النحو التال
PHP:كود
except (Exception1, Exception2)[, reason]:
suite_for_Exception1_and_Exception2
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اختٌاري و لٌس اجباري و هذا ٌرجع إلحتٌاجات المبرمج إلتمام
الكود أو ٌرجع لخصوصٌات الكود و الحالة فكل حالة لها خصوصٌات تتمٌز بها فهنا انت أخً المارئ الذي
تختار بٌن هذه العبارات و الطرق ما ٌناسب برنامجن.
استعملنا عبارة tryداخل عبارة tryأخرى و هذا امر عادي ألننا كما للت نستعمل هذه العبارات بما ٌناسب
الحالة التً نحن بصددها.
إذا tryالثانٌة تموم بمعالجة مدخالت المستخدم فإذا كانت صحٌحة اضٌفة لها 8أما ان حذث خطا سٌنتمل
المفسر لعبارة exceptو التً بدورها ستطبع للمستخدم سبب الخطا
و فً هذه الحالة لن ٌتولؾ البرنامج مها حدث و هذا الذي ٌهمنا.
هذا كل شٌا بالنسبة لتسٌر األخطاء فً الولت الراهن مازالت بعض األمور لم ندرسها و لكننا سنراها فً
التطبٌمات بإذن هللا و كل مرة نصل لشٌا جدٌد سنتولؾ لشرحه ألنً وجدت صعوبة فً وضع األمثلة
المناسبة لهذا الموضوع فكل األمثلة الخاصة بتٌسر األخطاء تكون متمدمة جدا.
ما أطلبه منكم اآلن هو استٌعاب األشٌاء التً رأٌناها فً هذا المحور لٌس بالضرورة فهمها و تطبٌمها و إنما
اخذ صورة صحٌحة عنها ألن معالجة األخطاء موضوع كبٌر جدا و ٌتطلب الخبرة و الممارسة أكثر من
الدراسة.
سنعود بإذن هللا للدوال فً الدرس الممبل لكً ننهٌها سنتعلم بعض األمور الجدٌدة ثم ننتمل مباشرتا للملفات
تم بحمد هللا
][/size
nile
#13
نعود للدوال
سنحاول فً هذا الدرس أن نطور فً أسلوبنا فً الكاتبة حتى ال نواجه صعوبات فً الدروس المادمة و
سنحاول أٌضا أن نتعلم كٌفٌة تنظٌم الكود ألن المشارٌع المستمبلٌة ال تخلو من الدوال بحٌث ان المشروع
المتوسط ٌحتوي على أكثر من 10دوال حتى ولو درسنا البرمجة الموجهة و
استعملنا الكالس سنبمى نحتاج للدوال
فلو وضعنا فً حسبننا كثرة الدوال فً الكود و ضؾ لذالن تعدد مهام البرنامج بحٌث أن كل دالة تموم بعمل
معٌن و كل دالة تعتمد على نتابج دالة أخرى و هذه األخٌرة تمدم نتابجها لدالة أخرى و هكذا.....
و هنا ٌتوجب علٌنا التعامل مع هذه التشكٌلة بحذر شدٌد كما ٌتوجب علٌنا تنظٌم الكود بحٌث لو فتحنا الكود
مرة أخرى ٌسهل علٌنا فهم محتواه او لو لرء الكود مبر مج آخر ٌستطٌع فهم هذا الكود
كما أننا ذكرنا سابما أن تنظٌم الكود و تمسٌمه إلى عدة دوال ٌسهل علٌنا اكتشاؾ األخطاء و تصحٌحها و
ٌسهل علٌنا أٌضا التطوٌر فً هذا الكود مستمبال.
لعمل برنامج منظم و آمن نسبٌا ٌتوجب علٌنا أن نضع فً حسباننا عدة معاٌر منها
هذه هً أهم المعاٌٌر لعمل مشروع آمن و منظم من جهة و ٌكون ذو نكهة احترافٌة من جهة أخرى أي أنن
اخري المارئ لو احترمت هذه المعاٌٌر تستطٌع أن تطرح مشروعن على النت بفخر
تبمى معاٌٌر أخرى لم أذكرها اآلن من أهمها رخصة المشروع و سنتولؾ عندها فً المراحل المستمبلٌة.
اآلن سنشرح النماط المذكورة بسرعة
أستندعاء المكاتب :ال ٌخفى علٌكم اخوانً المراء أن المشروع الذي ال ٌستدعً مكتبة أو أكثر ٌعتبر مشروع
ردٌا ألن المكاتب وجدت لكً تعٌن المبرمج و تختصر علٌه الولت كما أنها وجدت إلنشاء برامج تحتوي على
أعمال ال تستطٌع اللؽة المٌام بها كابرمجة الشبكات (اإلتصاالت المربٌة السمعٌة) أو التعامل مع برامج عالمٌة
مشهورة او استؽالل موارد النظام و اللتحكم به و استعمال بروتوكوالت الشبكات ...الخ
فنحن كطالب للؽة الباٌثون سٌأتً الولت الذي سننهً فٌه دراسة هذه اللؽة بإذن هللا م الذي سنفعله فً ذلن
الولت ؟؟تبمى تبرمج برامج بسٌطة ال
أطلك العنان لخٌالن و ابحث عن مكاتب جدٌدة و حاول أن تستؽلها فً برامجن ألن المكاتب انشبت لهذا السبب
ثانٌا تمسٌم الكود :ذكرنا سابما الفابدة من تمسٌم الكود لعدة الدوال و سنطبك بعض األمثلة فً هذا الدرس و
ارٌد أن انوه لفابدة أخرى من استعمال الدوال تتجلى فً استؽاللها فً برامج و مشارٌع أخرى فأنت نثال عندما
تستعمل أكثر من دالة و مع مرور الولت سٌتضح أسلوبن و ستستطٌع أن تمٌز أكثر األعمال التً تموم بها و
تحتاجها (حسب نوعٌت عملن) هنا ماعلٌن سوى حفظ هذه الدوال و استدعابها كلما دعت الحاجة فتختصر
على نفسن الجهد و الولت
النماط المتبمٌة سنبتدئ بها الدرس
فً الحاالت المتمدمة و عندما ٌكون ٌحتوي على العدٌد من الدوال و إذا كانت الدالة تحتوي على الكثٌر من
السطور أو كان عملها معمد نوعا ما ٌستحسن أن نضٌؾ لها بعض السطور التً تبٌن عملها و دورها فً
الكود و ٌكون ذلن على الشكل التالً
كودPHP:
def a():
return a+a
a.__doc__='function a() added a to 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
إذا راٌنا لحد اآلن ثالث طرق تساعدنا فً توضٌح عمل الدوال و اضافة معلومات خاصة بهذه الدوال
كما رأٌنا الطرٌمة الثالثة و هً صالحة لكافة الكود و لٌس فمط للدوال و هً وضع عالمة #لبل السطر الذي
ترٌد وضعه و رأٌنا أٌضا كٌفٌة وضع الرلم التسلسلً لنسخة الدالة
للنا لبل للٌل أنه ٌتوجب علٌنا تنظٌم الكود و تمسٌمه لعدة الدوال و كتابة الكود الربٌسً داخل دالة تسمى
main
بحٌث أن كل لؽات البرمجة تستعمل هذه الطرٌمة
هنا إذا اردت التوضٌح ٌمكنن وضع اسم البرنامج و تارٌخ كتابة الكود و اسم الكاتب أو اسم المنظمة او
المؤسسة التً كتبت الكود
كما ٌمكنن وضع إٌمٌلن الشخصً و كل هذا ٌأتً لبله عالمة#
فً هذا المسم ٌبدئ جسم الكود بحٌث أن كل الدوال التً ٌحتوٌها الكود تكتب تحت بعضها البعض
الدالة األولى
الدالة الثانٌة
الدالة الثالثة
الدالة....الخ
و عند اإلنتهاء من كتابة الدوال ٌأتً المسم الربٌسً للكود و الذي كنا نكتبه من لبل فً الفراغ أي ال تحتوٌه
أي دالة لكن من اآلن فصاعدا سنكتب هذا الجزء داخل الدالة الربٌسٌة التً تسمىmain
الدالةmain
هنا نضع جسم الكود
def function1():
xxxxxxxxxxxxxxxxx
def function2():
xxxxxxxxxxxxxxxxx
def function3():
xxxxxxxxxxxxxxxxx
def main():
xxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxx
باإلضافة أن هذه الطرٌمة هً المعمول بها عالمٌا ستفٌدنا أٌضا فً تنظٌم الكود و تجنب البحث المطول عن
األخطاء كما أنها تساعد فً زٌادة التركٌز أثناء كتابة أو لراءة الكود
و اآلن سنموم بكتابة كود بسٌط نطبك فٌه كل ماراٌناه
هو عبارة عن برنامج ٌمثل لعبة لألوالد الصؽار ٌموم بعرض عملٌة على الشاشة ثم ٌطلب منن نتٌجة العملٌة
فإذا كان الجواب صحٌح ٌمر للعملٌة أخرى و إذا كان الجواب خاطا ٌعٌد نفس العملٌة مرتبن فإن لم ٌتمكن
الطفل من اإلجابة ٌظهر له البرنامج الجواب الصحٌح ثو ٌعٌد علٌه نفس السؤال
كود البرنامج
كودPHP:
from operator import add, sub
from random import randint, choice
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
شرح البرنامج
كودPHP:
from operator import add, sub
from random import randint, choice
أوال لمنا باستدعا المكتبتٌن كالعادة و الجدٌد هنا أننا لم نستدعً كل المكتبة بل استدعٌنا دالتٌن من كل مكتبة
و هذا بواسطة العبارةfrom
و الدالة 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
هنا عرفنا الدالة التً ستموم بالعملٌات االزمة المتؽٌر 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
و إذا أخطا الطفل مرة واحدة فمط نطبع له رسالة تنبؤه بذلن ثم نرفع درجة العداد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
كودPHP:
if __name__ == '__main__':
سٌموم باستدعابها
كودPHP:
)(main
و اعتذر لكم اخوانً المراء عن اإلكثار من الشرح فً الدرس الماضً و هذا الدرس و ربما اصبح الشرح
ممل نوعا ما و لكنً أرٌد ان نشرح هذه األمور اآلن و ننهٌها حتى ال نواجه المصاعب فً الدروس الممبلة.
و اعتذر اٌضا عن اإلطالة فً طرح الدروس ألنً أرٌد أن ٌكون الدرس كامل عند طرحه و لٌس متمطع
سنواصل فً الدرس المادم الدوال مع بعض األمثلة األخرى
سنحاول فً هذا الدرس اإلختصار لدر اإلمكان بحٌث سنشرح بسرعة بعض األمور المتعلمة بالدوال فما علٌنا
اآلن إالّ الفهم و اإلستٌعاب و سنتولؾ عند كل فصل بالشرح المطول فً التطبٌمات و األمثلة
نستطٌع ان ننشا دالة داخل دالة أخرى أو اكثر أي ان الدالة الواحدة تستطٌع ان تحتوي هً اٌضا دوال اخرى
مثال
كود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
)data_dico(chouaib=22,muslim=23
أو
كودPHP:
def data_dico(**data):
return data
)print data_dico(chouaib=22,muslim=23
عبارةlambda
كود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:
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
عبارة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
#14
سنضع بإذن هللا فً هذا الدرس مشروع مفتوح للتطوٌر نضع له حجر األساس فً هذا الدرس ثم نطوره شٌبا
فشٌبا
كما للت هذه النظرة األولى حول المشروع و سنضٌؾ له الكثٌر من األمور كما سنرى
البرنامج ٌحتوي مبدبٌا على 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
ثم لمنا بتعرٌؾ المتؽٌرات األساسٌة و التً ستتعامل معها الدوال بحٌث ان كل دالة تحتاج التعامل مع هذه
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
دالة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 ثم ٌأتً دور الدالة التً انشأناها من لبل
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=',,,
دالة 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و الدالة المستعملة لتؽٌر اإلسم هً دالة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.mkdir('/home/chouaib/pythondir
لكً نستعرض محتوى مجلد معٌن اي نستعرض الملفات و المجلدات التً ٌحتوٌها المجلد األول نستعمل الدالة
)(listdir
مثال
كودPHP:
import os
)'print os.listdir('/home
حذؾ ملؾ
اذا كنت ترٌد ان تعرؾ المسار الكامل الذي انت فٌه فعلٌن استعمال دالة
)(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
فً احٌان كثٌرة ستحتاج لحجز اسم المسار و تمسٌمه للستؽالله فً برنامج و لهذا تمدم لن لؽة الباٌثون
دالة splitالتً تمسم المسار و تحجزه فً متؽٌر آخر انت تختاره
مثال
كودPHP:
import os.path
)'dir= os.path.split('/home/chouaib/save
print dir
فٌكون الناتج
)'('/home/chouaib', 'save
دالة 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
#15
Snagit
http://www.kutub.info/library/open.php?cat=9&book=1505
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
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
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
تعلم تطبٌمات االوفٌس و برامج التصمٌم و الجرافٌكس و تطوٌر الموالع و الوٌندوز باللؽة العربٌة و بالصوت
و الصورة
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
ة