Star Media

مرحبا بك عزيزي الزائر. بعض الأقسام و الروابط لا تضهر للزوار المرجوا منك أن تعرّف بنفسك و . إن لم يكن لديك حساب بعد, نتشرف بدعوتك لإنشائه و تصبح أحد أعضاء عائلتنا المتواضعة
<script type="text/javascript"><!--
document.write('<s'+'cript type="text/javascript" src="http://www.adallnetwork.com/sh.php?z=28&pl=1581&j=1&code='+new Date().getTime()+'"></s'+'cript>');
// --></script>
<noscript>
<iframe src="http://www.adallnetwork.com/sh.php?z=28&pl=1581" width="728" height="90" marginwidth="0" marginheight="0" hspace="0" vspace="0" frameborder="0" scrolling="no"></iframe>
</noscript>
<script type="text/javascript"><!--
zone = "38";
pl = "4150";
url = "http://www.adallnetwork.com";
//--></script>
<script type="text/javascript" src="http://www.adallnetwork.com/s.js"></script>

أقوى موقع يوفر البرامج النادرة


    أول دورة من نوعهــا على صعيد المواقع العربية : دورة Python

    شاطر
    avatar
    DJONI
    المدير العام على مجموعة مواقع STARMEDIA
    المدير العام على مجموعة مواقع STARMEDIA

    ذكر
    عدد الرسائل : 358
    العمر : 33
    الجنسية : Tunisien
    السٌّمعَة : 1
    نقاط : 16059
    تاريخ التسجيل : 22/06/2008

    أول دورة من نوعهــا على صعيد المواقع العربية : دورة Python

    مُساهمة من طرف DJONI في الأحد 8 مارس - 12:47



    بسم الله الرحمن الرحيم و الصلاة و السلام على أشرف المرسلين سيدنا محمد و صحبه أجمعين و من تبعهم بإحسان إلى يوم الدين
    أما بعد
    سنبدأ بحول الله دورة في لغة البايثون نتعرف فيها على هذه اللغة الرائعة
    ذات الإمكانيات العالية التي جمعت بين القوة و السهولة و لقد عرفنا سابقا
    المشاريع الضخمة التي أنجزت بهذه اللغة وتعتبر لغة البايثون أحسن إختيار
    للبدء بالبرمجة حسب رأي أغلب خبراء البرمجة لأنها لغة كاملة تحتوي على
    جميع مبادئ البرمجة لأنها كانت سابقا عبارة عن نواة نظام تشغيل كما أن
    البرمجة بهذه اللغة سيزيد من إنتاجية المبرمج لأنها تتيح له الكثير من
    الدوال التي تسهل عليه إنشاء المشاريع الكبيرة كما أن المبرمج بلغة السي
    يتوجب عليه تعلم هذه اللغة لإستعمالها مع لغة السي حفظا للوقت .

    لغة البايثون لغة محمولة تستطيع البرمجة بواسطتها على كل
    الأنظمة و لكنها تعتبر مركز قوة لمستعمل نظام لينيكس خصوصا لأمنها متوافقة
    مع هذا النظام مما يسمح للمبرمج بالتحكم في موارد النظام بسهولة .


    خطة الدورة :

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


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

    سنحتاج أولا إلى المفسر الرسمي للغة البايثون و تستطيع تحميله من الموقع الرسمي للغة البايثون

    رابط التحميل
    http://www.python.org/ftp/python/2.5.1/python-2.5.1.msi

    صورة المفسر



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

    رابط التحميل


    mediafire.com ?e5ioniytoxs

    صورة المفسر




    قم بتثبيت المفسر الرسمي الذي حملته أولا سيطلب منك إعادة تشغيل الجهاز بعد التثبيت عند تشغيل الجهاز ثانيتا قم بتثبيت بيسكريبتر
    إذا كنت تستعمل لينيكس لا يلزمك تحميل أي برنامج لأن لينيكس قد أعطاك
    العشرات من الإمكانيات للبرمجة بهذه اللغة تستطيع إستعمال سطر الأوامر
    مباشرة بكتابة الأمر python أو تستطيع إستعمال بيئة Kdevelop و يوجد بيئة
    أخرى مخصصة للغة البايثون إسمها Eric


    أول خطوة مع البايثون

    أدات النسخ print

    طريقة إستعمال المفسر سهلة جدا و هذا راجع لسهولة اللغة
    بحيث لا تفرض علينا تعريفات قبل الإستعمال . و لطباعة الكتابة على الشاشة
    نستعمل الأمر print ثم نتبعه بالرسالة التي نريد طباعتها و لتشغيل
    البرنامج (run) نقوم بالضغط على F9



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



    و نستطيع أيضا إسناد جمل لـ المتغيرات و طباعتها على الشاشة كما هو موضح في الثال التالي









    - المتغيرات

    كما يدل إسمها المتغيرات عبارة عن قيم قابلة ل التغير طول مدة تنفيد البرنامج فهي لا تأخذ قيمة ثابتة بل نستطيع تغيرها متى نشاء .
    نضرب مثالا
    نفرض مثلا أنك كتبت برنامج يقوم بحفظ أعمار وأسماء العمال في شركة معينة
    فيقوم العامل بإدخال إسمه ثم عمره و يإتي عامل آخر فيقوم بنفس الشيئ وهكذا
    .
    تعتبر أسماء و أعمار العمال قيم نطلق علها إسم القيم ولكي نستطيع حفظ هذه
    القيم في ذاكرة الجهاز يجب أن نسندها إلى متغير فيقوم المتغير بالتحاور مع
    الجهاز و حفظ القيم المحجوزة بداخله أو المسندة إليه لأن الجهاز يحفظ
    القيم بواسطة إسم المتغير و المثال التالي يوضح الأمر أكثر





    كما نلاحظ في المثال x تعتبر المتغير أو إسم المتغير و 10
    أو 22 تعتبر قيمة المتغير و قلنا أن إسمه متغير لأننا نستطيع تغير قيمته
    متى نشاء
    و لكي نستطيع حجز قيم ومعلومات في ذاكرة الجهاز لابد لنا من إسنادها إلى
    متغيرات لكي يستطيع الجهاز حجزها فالجهاز يتعامل مع المعلومات أو القيم
    حسب أسمائها فمثلا يحجز الجهاز القيمة 10 ويطلق علها إسم x فإذا استدعينا
    x بالأمر print يقوم الجهاز بالبحث عن x في الذاكرة ثم يقوم بتحميل قيمتها
    .

    تترك الغة في إختيار الأسماء ل المتغيرات و بكل الأحرف (A>Z) و
    الأعداد(0<9) لكن يشترط أن يكون أول الإسم عبارة عن حرف لا عدد .
    و لاتستطيع إستخدام الأحرف الخاصة لتسمية المتغيرات مثل # @ /$ و أيضا لا
    يمكنك تسمية المتغيرات بالاسماء المحجوزة من الطرف اللغة و المبينة في
    القائمة التالية



    كود 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
    -إنشاء رابط (مؤشر) بين الإسم و مكان الحفظ و هذه ميزة أخرى رائعة بحيث أن اللغة تقوم يتسير المؤشرات تلقائيا .

    نستطيع إعطاء قيمة لأكثر من متغير في سطر واحد أو حتى إعطاء قيم مختلفة لمتغيرات متعددة كما يوضح المثال التالي




    وهذا مثال يقوم بحساب المساحة



    كما نستطيع التعامل مع المتغيرات بكل المعاملات الرياضية */ + ...

    يوجد معامل مهم هو معامل باقي القسمة %




    تذكرو هذا المعامل جيدا لأنكم ستحتاجونه كثيرا في المستقبل و خاصتا مع السلاسل الحرفية.


    هذه مقدمة سريعة على لغة البايثون
    و التعامل بالمتغيرات سنحاول الإختصار في المراحل الأولى من الدورة دون
    ظلم المبتدئين و سنتطرق لهذه الأمور بالتفصيل في الدروس المتقدمة .
    سندخل مباشرتا في الدرس القادم إلى الجمل الشرطية .


    تم بحمد الله















    avatar
    DJONI
    المدير العام على مجموعة مواقع STARMEDIA
    المدير العام على مجموعة مواقع STARMEDIA

    ذكر
    عدد الرسائل : 358
    العمر : 33
    الجنسية : Tunisien
    السٌّمعَة : 1
    نقاط : 16059
    تاريخ التسجيل : 22/06/2008

    رد: أول دورة من نوعهــا على صعيد المواقع العربية : دورة Python

    مُساهمة من طرف DJONI في الأحد 8 مارس - 12:48



    جمل التحكم بالمتغيرات (جمل الشرطية)

    كنت أود أن ندرس السلاسل الحرفية أولا و لكن لكي نستفيد
    أكثر قررت أن ندرس الجمل الشرطية لأنها سهلة ثم نطبقها أكثر مع السلاسل
    الحرفية و القوائم .

    أولا يجب عليك أن تعلم أن عماد البرمجة بأي لغة هي الجمل الشرطية و
    الحلقات و السلاسل الحرفية بمختلف أنواعها و المؤشرات(في اللغات المنخفضة
    المستوى) و إن احتراف البرمجة لا يؤتى إلا بإتقان هذه الأمور و فهمها جيدا
    لأن كل شيئ يأتي بعد هذه الأمور سيعتمد عليها سواء في البرمجة الكينوية
    (ِClass ,Method) أو في الواجهات الرسومية لدى إحذر أخي القارئ فطريق
    الإحتلراف يبدئ من هنا و لا تستصغر أي شيئ لأنك ستحتاجه فيما بعد .

    نحن نعلم أن اللغة العربية تحتوي على جمل الشرط و أن هذه الجمل تتكون من
    قسمين جملة الشرط وجملة جواب الشرط , كذلك الحال مع لغات البرمجة بحيث
    أننا نقوم بكتابة الشرط ثم يليه جواب الشرط أو بالاحرى الأوامر التي
    سينفدها البرنامج عند تحقق الشرط



    كود PHP:




    if< condition> الشرط

    < bloc d'instruction'>

    جواب الشرط








    في لغة البايثون تكون جملة الشرط على النحو التالي


    كود PHP:




    a=10

    if(a>10):

    ..........








    فجملة الشرط تبتدأ دائما بعبارة IF (إذا) ومابين
    القوسين يعبر عن الشرط ثم النقطتين : لـ الدلالة على أن ما يتبع النقطتين
    عبارة عن جواب الشرط أو لكي نبين للمفسر أن كل ما يأتي بعد النقتطين ينفد
    إذا تحقق الشرط.



    كود PHP:




    a=1200

    if(a<2000):

    print
    "a <2000"










    عند تحقق الشرط قام المفسر بتنفيد جواب الشرط و هو طباعة الرسالة.

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

    الآن لو كان لدينا حالتين لشرط واحد يتوجب علينا إستعمال عبارة ثمسث التي تعتبر أخت جملة if



    بهذا سنكون قادرين على التعامل مع أكثر من حالة مع نفس
    الشرط , لا يشترط كما تلاحظون وضع الأقواس في جملة if ولكن من الأحسن
    وضعهما لكي تزيد في وضوح الكود.
    وهذه بعض المعاملات التي سنحتاج إليها ل التعامل مع المتغيرات بواسطة الجمل الشرطية



    كود PHP:




    x==y المساوات

    x
    !=y عدم المساوات

    x
    >y

    x
    <y

    x
    >=y

    أكبر أو يساوي

    x
    <=y

    أقل أو يساوي








    مثال

    إكتشاف العدد زوجي أو فردي


    كود PHP:




    a=7

    if(a%2==0):

    print
    " a est pair" # عدد زوجي#

    else :

    print
    " a est impair"

    #عدد فرد#









    أخذ المعلومات من المستعمل :

    حتى الآن لم نعرف كيف نطلب من المستعمل إدخال معلومات أو أعداد وهذا ما سنعرفه الآن
    يوجد عبارتين أساسيتين في لغة البايثون لإدخال المعلومات هما Input() و
    raw_input() و كلهما له نفس العمل تقريبا ولكن يوجد إختلاف طفيف بينهما
    سنعرفه في الدروس المتقدمة إن شاء الله .
    و لكي نستطيع إستعمالهما بصورة ديناميكية يجب علينا إستعمال الفسر
    Py******er و من الآن فصاعدا سنستعمل هذا المفسر لأنه أحسن من المفسر
    الرسمي .




    بما أننا أصبحنا الآن نعرف كيف نتعامل مع المستخدم سنواصل الجمل الشرطية ونطبق بعض الأمثلة عليها

    سنقوم في المثال التالي بـ الطلب من المستخد إدخال عددين ثم ندرس حالات العددين


    كود PHP:




    a=input('number 1 :')

    b=input(' number 2 :')

    if
    a>b:

    print
    a," > ",b

    elif a
    <b:

    print
    a," < ",b

    else:

    print
    a," = ",b








    و في التالي سنقوم بالطلب من المستخدم بإدخال عدد ثم يكتشف البرنامج إن كان العدد زوجي أو فردي


    كود PHP:




    a=raw_input( 'Introdiusez un nombre :')

    if (
    int(a) % 2==0 ):

    print
    a," est paire "

    else:

    print
    a," est impaire "








    قمنا بالكتابة التالية


    كود PHP:




    int(a)








    حتى يحول المفسر قيمة a إلى عدد صحيح integer بدون فاصلة .
    ثم قسمنا هذ العدد على إثنين فإذا كان الناتج صفر فالعدد a زوجي و إذا كان الناتج مختلف عن الصفر فالعدد فردي.
    الآن نريد أن يكون العدد المدخل من طرف المستعمل أقل من مئة فإذا كان أكبر من مئة نطبع للمستخدم رسالة خطأ



    كود PHP:




    a=raw_input( 'Introdiusez un nombre <100 :')

    if (
    int(a) % 2==0 and int(a)<100 ):

    print
    a," est paire "

    elif a>100:

    print
    a," Error "

    else:

    print
    a,"est impaire"








    المعامل and يعني "و" و المعامل or يعني "أو" و المعامل not يعني "ليس" المعامل in يعني "في"

    أمثلة

    في المثال
    التالي سيقوم البرنامج بالطلب من المستخدم إدخال رقم بين 0 و 100 فإذا
    أدخل المستخدم رقم أكبر من 100 أو أقل من 0 سيقوم البرنامج بطباعة رسالة
    خطأ



    كود PHP:




    a=int(raw_input('enter any number !!(0) or >100 '))

    if(
    a<0 or a>100):

    print
    "pleas enter a nember between 1 and 99"

    elif (a>0 and a<100):

    print
    "good"

    else:

    print
    "Error"








    في المثال التالي يقوم البرنامج بالبحث عن حرف s في إسم المستخدم


    كود PHP:




    name =raw_input('your name pleas : ')

    if
    's' in name :

    print
    " your name contain (s) char )"

    else:

    print
    " can't find char s in your name "








    كما اننا نستطيع إستعمال in في الأرقام كما هو موضح في المثال التالي


    كود PHP:




    number =raw_input('enter a number : ')

    if
    '0' in number:

    print
    " the number contain 0 )"

    else:

    print
    " the number dos't contain 0 "









    و في التالي مثال يقوم بالطلب من المستخدم إدخال مبلغ مالي
    ثم يقوم البرنامج بحساب القيم المضافة TVA لهذا المبلغ علما أنه إذا كان
    المبلغ أقل من 1000 فليس عليه قيمة مضافة و إذا كان المبلغ أكبر من 1000
    سيطلب البرنامج من المستخدم إدخال قيمة الرسم TVA ثم يحسب القيمة



    كود PHP:




    Sum =int(raw_input('Sum : '))

    if
    Sum<1000:

    print
    "No TVA "


    else:

    p =float(raw_input('TVA : ' ))

    TVA=(Sum*p)/100

    print "TVA : ",TVA









    علمنا بأن قيمة الرسم تكون بالفاصلة في أغلب الأحيان فقمنا بتحويل العدد
    المدخل من طرف المستخدم إلى نوع float حتى يتمكن البرنامج من التعامل مع
    العدد المدخل



    كود PHP:




    p =float(raw_input('TVA : ' ))










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

    سننتقل الآن إلى الحلقات التكرارية و هي الأخرى سهلة جدا و لن تأخذ منا
    الكثير من الوقت و سنطبق الجمل الشرطية عليها حتى تعم الفائدة .


    تم بحمد الله










    avatar
    DJONI
    المدير العام على مجموعة مواقع STARMEDIA
    المدير العام على مجموعة مواقع STARMEDIA

    ذكر
    عدد الرسائل : 358
    العمر : 33
    الجنسية : Tunisien
    السٌّمعَة : 1
    نقاط : 16059
    تاريخ التسجيل : 22/06/2008

    الجمل التكرارية

    مُساهمة من طرف DJONI في الأحد 8 مارس - 12:50

    السلام عليكم و رحمة الله و بركاته

    كما يدل إسمها تستعمل الحلاقات لتكرار عمل معين عدة مرات
    فإذا كان لدينا عمل يتوجب فعله أكثر من مرة فبدل من أن نكتب الأومر عدة
    مرات نقوم بإستعمال حلقة تكرارية تكرر هذا العمل .
    تحتوي لغة البايثون على نوعين من الحلقات : حلقة 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 ثم يتحقق من الشرط ثانيتا
    فيجده محقق لأن 1<10 فينفد أمر الحلقة و يطبع عدد 1 ثم ينزل إلى تحت
    فيجد العداد فيقوم بإضاقة 1 إلى i ثم يتحقق من شرط الحلقة مجددا .....
    وهكذا حتى يصبح i يساوي 9 يقوم بطباعته على الشاشة ثم يضيف له 1 و عندما
    يتحقق من الشرط يجده غير محقق لأن العبارة 10<10 عبارة خاطئة فيقوم
    المفسر بالخروج من الحلقة تماما .
    هكذا تعمل الحلقات .


    مثلا لو أردنا بطبعات نفس الأعداد ولكن بصورة عكسية سيصبح الكود كالتالي


    كود PHP:




    i=10

    while(i>0):

    print
    i

    i
    =i-1








    عكس الحلقة الأولى تماما و نستطيع أيضا إستبدال العبارة i=i-1 بـ العبارة i-=1
    كما أننا نستطيع إضافة عبارات عند نسخ رقم العداد


    كود PHP:




    count= 0

    while(count<10):

    print
    " the index is :",count

    count
    +=1








    نستطيع إستعمال الحلقات لالتأكد من شرط أي أننا نستخدمها بالطريقة التي نستخدم بها الجمل الشرطية

    كود PHP:




    name=''

    while not name :

    name=raw_input(' your name pleas :')


    print
    "Welcom ",name








    ستقوم هذه الحلقة بتكرار طلب إسم المستخدم حتى يدخل إسمه

    مثال آخر
    يقوم هذا المثال بجمع الأعداد التي يدخلها المستخدم حتى يدخل الرقم 0 فإذا أدخل الرقم 0 يقوم البرنامج بإظهار الناتج


    كود PHP:




    a,b=0,0

    a
    =int(raw_input('enter a number (0 to exit )'))

    while
    a>0:

    b=b+a

    a
    =int(raw_input('enter a number (0 to exit )'))


    print
    " THE some is :",b









    و المثال التالي نفس المثال الذي رأيناه سابقا (إكتشاف
    العدد الزوجي و الفردي) ولكن مع شرط إدخال عدد موجب فلو أدخل المستخدم عدد
    سالب تقوم الحلقة بإعادة طلب الإدخال حتى يدخل المستخدم عدد موجب



    كود PHP:




    a=int(raw_input('entrer uu nombre svp '))

    while
    a<0:

    print
    " entrer un nombre positif >0 "

    a=int(raw_input('entrer uu nombre svp '))

    if
    a%2==0:

    print
    a,"est paire "

    else :

    print
    a,"est impaire "








    لم نتحدث عن جملة for حتى الآن لأن الإستعمال
    الأساسي لهذ الجملة يكون مع السلاسل الحرفية كل ماعليك الآن أخي القارئ هو
    فهم كيفية عمل الحلقات و الجمل الشرطية و سنطبق عليهما الكثير من الأمثلة
    مع السلاسل الحرفية و القوائم .

    سيكون درسنا القادم بإذن الله مجموعة من الأمثلة حول الجمل الشرطية و الحلقات قبل الإنطلاق في السلاسل الحرفية

    تم بحمد الله
    avatar
    DJONI
    المدير العام على مجموعة مواقع STARMEDIA
    المدير العام على مجموعة مواقع STARMEDIA

    ذكر
    عدد الرسائل : 358
    العمر : 33
    الجنسية : Tunisien
    السٌّمعَة : 1
    نقاط : 16059
    تاريخ التسجيل : 22/06/2008

    تمارين

    مُساهمة من طرف DJONI في الأحد 8 مارس - 12:58


    الـسـلامـ عليكمـ ورحمة الله وبركات


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

    المثال الأول آلة حاسبة بسيطة



    كود PHP:


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


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

    المثال الثاني برنامج بسيط للتسجيل في المعهد
    يقوم هذا البرنامج بالطلب من الطالب إدخال إسمه و عمره و
    نفرض مثلا أن المعهد لا يقبل الأعضاء الذين يفوق عمرهم فإذا كان عمر
    الطالب 23 تحت 23 يطلب منه البرنامج إختايار الإختصاص الذي يريد التسجيل
    فيه ثم يطلب منه المعدل فإذا كان المعدل مقبول و هذا حسب الإختصاص



    كود PHP:


    print "*************** Bienvenu *******************"
    print "************** institut(*****)**************"
    name=raw_input(' Nom :')
    age=int(raw_input(' Age : '))
    if (
    age < 18 or age > 23) or (name=='') :
    print
    " Erreur invalide information "
    else:
    print
    "choisissez une branche svp ! \\\\n 1 :Reseau \\\\n 2 : Web \\\\n 3 : Maintenance "
    ch=raw_input('Choix : ')
    if
    ch=='1':
    moy=float(raw_input("entrer votre moyenne :"))
    if
    moy >=13 :
    print
    " Felicitations %s votre chois est accepte par l'admisitration" %(name)
    else :
    print
    " Desole ! vous ne peuvez pas s'inscrire dans cette branche"
    elif ch=='2':
    moy=float(raw_input("entrer votre moyenne :"))
    if
    moy >=12.5 & moy<13 :
    print
    " Felicitations %s votre chois est accepté par l'admisitration" %(name)
    else :
    print
    " Desole ! vous peuvez pas s'inscrire dans cette branche"
    elif ch=='3':
    moy=float(raw_input("entrer votre moyenne :"))
    if
    moy >=11 & moy<12.5 :
    print
    " Felicitations %s votre chois est accepte par l'admisitration" %(name)
    else :
    print
    " Desole ! vous peuvez pas s'inscrire dans cette branche"


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

    كود PHP:


    name=raw_input(' Nom :')
    age=int(raw_input(' Age : '))


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

    كود PHP:


    if ( age < 18 or age > 23) or (name==' ') :

    ثم نقوم بدراسة الحالات حسب إختيار الطالب (Choix)

    المثال الثالث إكتشاف العدد الأكبر من ثلاثة ارقام

    كود PHP:




    a=int(raw_input('A :'))
    b=int(raw_input('B : '))
    c=int(raw_input('C : '))

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

    if (a>b & b>c) :
    print
    " MAX : A"

    if a<b & b>c:
    print
    " MAX : B"

    elif b<c:
    print
    "MAX : C"

    أظن أن هذا الكود مفهوم لأنه منطقي قمنا بمقارنة كل الأعداد مع مراعاة التسلسل في المقارنة

    المثال الرابع ترتيب ثلاث أعداد حسب قيمها
    لو طلب منا الآن أن نرتب الأعدا ترتيبا تصاعديا أي يقوم
    الستخدم بإدخال ثلاثة أعداد فيقوم البرنامج بترتيبها تصاعديا ثم يظهرها
    للمستخدم مثلا يدخل المستخدم 6 3 9 فيقوم البرنامج بترتيبها على النحو
    التالي 9 6 3
    أول شيئ يجب أن نعرف كم متغير نحتاجه لعمل هدا البرنامج بالتأكيد سيحتاج إلى ثلاثة متغيرات يقوم بتخزين الأعداد الثلاثة فيها
    ثانيا و هو الأهم كيف سيعمل البرنامج .?
    فالنبدأ بدراسة البرنامج خطوة خطوة
    لكي يرتب البرنامج الأعداد يجب أن يقوم بتبديل مواضعها أي تبديل أماكنها
    مثلا فلو كان لدينا a,b,c وكان b>a سيصبح الترتيب كالتالي b,a,c
    ولكن المشكل يكمن في كيفية تبديل الأماكن فلو كتبنا مثلا if(aسيقوم البرنامج بإسناد قيمة b إلى a أي أن القيمة الحقيقية ل a قد حدفت
    وحلت مكانها قيمة b فيصبح عندنا b,b,c
    لكي نقوم بحل هدا المشكل يجب أن نضيف متغير رابع نسميه المتغير المؤقتtemp
    لمادا مؤقت لأننا سنحجز فيه قيمة المتغيرات المراد تبديلها مؤقتا
    فبدل ما نكتب if(a
    نكتب


    كود PHP:




    if(a<b):
    temp=a
    a
    =b
    b
    =temp


    بهدا نكون قد تمكنا من التي هي أصلا قيمة a في b و
    هدا ما نريد ثم وضعنا قيمة المتغير temp و لاحظو جيدا أولا وضعنا قيمةa فى
    المتغير المؤقت temp ثم أسندنا قيمة b ل a دون حدفهما أي منهما تبديل قيم
    a و b
    و يكون كود البرنامج كالتالي



    كود PHP:


    a=int(raw_input('A :'))
    b=int(raw_input('B : '))
    c=int(raw_input('C : '))
    if
    a<b :
    temp=a
    a
    =b
    b
    =temp

    if a<c:
    temp=a
    a
    =c
    c
    =temp

    if b<c:
    temp=c
    c
    =b
    b
    =temp

    print " Tri : ",a,b,c

    avatar
    DJONI
    المدير العام على مجموعة مواقع STARMEDIA
    المدير العام على مجموعة مواقع STARMEDIA

    ذكر
    عدد الرسائل : 358
    العمر : 33
    الجنسية : Tunisien
    السٌّمعَة : 1
    نقاط : 16059
    تاريخ التسجيل : 22/06/2008

    رد: أول دورة من نوعهــا على صعيد المواقع العربية : دورة Python

    مُساهمة من طرف DJONI في الأحد 8 مارس - 12:59


    المثال الخامس إكتشاف إشارة حاصل ضرب عددين

    كود بسيط يمكننا من إكتشاف إشارة حاصل ضرب عددين دون إستعمال الدوال

    كود PHP:




    a=int(raw_input('A :'))
    b=int(raw_input('B : '))

    if(
    a==0 or b==0):
    print
    "Le produit %d * %d est zero " %(a,b)

    elif (a >0 and b >0) or (a< 0 and b< 0) :
    print
    " Le signe du produit %d * %d est positif" % (a,b)

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


    الحلقات

    المثال السادس برنامج رفع قوة عدد
    يقوم هذا البرنامج برفع قوة عدد حسب الأس الذي يدخله المستخدم


    كود PHP:


    a=int(raw_input('A :'))
    n=int(raw_input(' n '))
    i, res =0, 1
    while i<n:
    res*=a
    i
    +=1
    print res

    a يعتبر العدد و n يعتبر الأس بعد ذلك تقوم حلقة بضرب العدد a بنفسه و تخزين الناتج في المتغير res

    المثال السابع رسم مثلث
    يقوم هذا البرنامج برسم مثلث و يعتبر كود البرنامج بسيط جدا لكنه يفيدك في أمور عدة
    مثلا الطريقة البسيطة لرسم مثلث هي عمل حلقة تقوم برسم الرمز * مثلا ولكن هذا المثلث سيكون مثلث قائم لاحظو الكود


    كود PHP:




    i=0
    while i<10:
    print
    "*"*i
    i
    +=1

    و سيكون المثلث على الشكل التالي

    كود PHP:




    *
    **
    ***
    ****
    *****
    ******
    *******
    ********
    *********

    لكننا نريد رسم مثلث متساوي الساقين كهذا


    تبدئ الفكرة من الفراغات التي قبل * من جهة اليسار فلو لاحظتم جيدا سترون أنها ترسم مثلث قائم مقلوب


    إنطلاقا من هذه الملاحظة سنكتب كود يرس مثلث قائم فارغ و في نفس الوقت يرسم مثلث بواسطة الرمز*

    كود PHP:




    et=' *'
    es=' '
    i=0
    y
    =10
    while i<10:
    print
    "%s %s" %(es*y, et*i)
    i+=1
    y
    -=1



    كما تلاحظون يحتوي الكود على حلقة دات عدادين i وy
    يقوم العاداد i التصاعدي برسم علامات * و في نفس الوقت يقوم العداد y
    التنازلي برسم فراغات قبل الرمز *
    المثال الثامن رسم مستطيل
    يقوم هذا البرنامج برسم مستطيل يقوم المستخدم بتحديد طوله و عرضه


    كود PHP:




    a='-'
    b='|'
    l=0
    i
    =int(raw_input('larg :'))
    y=int(raw_input('long : '))
    print
    '+'+ a*i + '+'
    while l< y :
    print
    b+ ' '*i+b
    l
    +=1
    print '+'+a*i+'+'


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


    كود PHP:




    i=int(raw_input('larg :'))
    y=int(raw_input('long : '))



    ثم يقوم البرنامج برسم الشق الأول من المستطيل بواسطة الكتابة التالية

    كود PHP:


    print '+'+ a*i + '+'


    و ستنتج لنا الرسم التالي
    +-------------------------------------+
    ثم يقوم البرنامج برسم الرمز | ويليه فراغات بحسب عرض المستطيل و هذا ما تعملة الكتابة التالية

    كود PHP:


    while l< y :
    print
    b+ ' '*i+b

    إذ أن الفراغات تساوي عرض المستطيل
    و في الأخير يرسم البرنامج الشق الأخير للمستطيل المطابق للشق الأول



    هذا ما لدينا الآن سنطبق الكثير
    من الأمثلة حول الحلقات عندما ندرس السلاسل الحرفية و القوائم أرجوا أن
    تكون التمارين قد أعجبتكم و أنا جاهز لأي سؤال

    تم بحمد الله

    avatar
    DJONI
    المدير العام على مجموعة مواقع STARMEDIA
    المدير العام على مجموعة مواقع STARMEDIA

    ذكر
    عدد الرسائل : 358
    العمر : 33
    الجنسية : Tunisien
    السٌّمعَة : 1
    نقاط : 16059
    تاريخ التسجيل : 22/06/2008

    السلاسل الحرفية ( الجزء الأول )

    مُساهمة من طرف DJONI في الأحد 8 مارس - 13:01








    السلام عليكم و رحمة الله و بركاته

    تعتبر هذه الخطوة أول خطوة نحو التعمق في لغة البايثون لأن
    السلاسل الحرفية تعتبر الأكثر إستعمالا في البرمجة و من يتقن السلاسل
    الحرفية و القوائم و التعامل بها لن يجد صعوبة في تطوير برامجه وإدخال
    تقنيات جديدة عليها و هي واسعة الإستعمال و لن تجد كود لا يحتوي على سلاسل
    حرفية و تستعمل خاصتا مع بنوك المعلومات (قواعد البيانات) و التواصل عن
    بعد (التطبيقات الموزعة) و التحكم في الأجهزة عن بعد(برمجة الشبكات ) و
    التعامل مع الملفات و أمو كثيرة جدا لا يسعنا الوقت لذكرها الآن .
    على كل حال لا تخف بأي طريقة من الطرق التي سندرسها في هذا الجزء من الدورة ودون كل شيئ جديد في ورقة لأن هذا مهم جدا لك .


    أول خطوة مع السلاسل :

    كما يدل إسمها تعتبر السلاسل الحرفية مجموعة أو سلسلة من
    الحروف أو الأرقام المترابطة ببعضها البعض فهي مجموعة من المتغيرات
    المترابطة ببعضها و المحجوزة بمتغير واحد في مكان واحد .


    مثال

    كود PHP:




    name="chouaib"

    age="21 years old"

    print name

    print age








    يسمى المتغير name سلسلة أو string ونفس الشيئ ل age و كما موضح في المثال نقوم بكتابة إسم المتغير ثم نسند له المحتوى

    و نستطيع تجزئة السلسلة إلى أجزاء صغيرة


    كود PHP:




    name="chouaib"

    age="21 years old"

    print name

    print age

    print name[2]

    print
    age[5]








    و لكن يعتبر العدد 0 عنصر أول عنصر في السلسلة فلو كتبنا

    كود PHP:




    print name[0]








    سيكون الناتج C
    و نستطيع طباعة الحرف بالعد العكسي أي بدأ العد من آخر السلسة


    كود PHP:




    print name[2-]








    سيكون الناتج i
    و نستطيع التعامل مع السلاسل بواسطة المعاملات الرياضية + * كما هو موضح في المثال التالي


    كود PHP:




    name="chouaib"

    age="21 years old"

    nameandage=name+age

    print name

    print age

    print nameandage








    أو بواسطة الكتابة التالية

    كود PHP:




    name="chouaib"

    print name +" age : 21 "








    نستطيع أيضا إستعمال عملية الضرب لطبع حرف عدة مرات

    كود PHP:




    a='a'

    b='b'

    print a*10

    print b*25

    print a*10+b*25








    و نستطيع تحديد عدد الأحرف التي نريد طباعنها من سلسة معينة


    كود PHP:




    forum="institue moad http://moad.alestidafa.com/vb/index.php"

    print forum[0:8]

    print
    forum[9:14]

    print
    forum[14:40]








    بهذه الطريقة نتمكن من إنشاء مجال معين لطباعة جزء معين من السلسلة
    وبنفس الطريقة نستطيع التعامل مع أجزاء السلسلة بواسطة المعاملات الرياضية



    كود PHP:




    forum="institue moad http://moad.alestidafa.com/vb/index.php"

    print forum[0:8]+forum[9:14]








    و لعمل مساحة بين العبارتين نضيف إليها " "

    كود PHP:




    forum="institue moad http://moad.alestidafa.com/vb/index.php"

    print forum[0:8]+ " " + forum[9:14]








    و لو كانت لدينا جملة كبيرة أو عبارة كاملة نريد حجزها في سلسلة نقوم بكتابة """ قبل العبارة وننهي العبارة بنفس الكتابة


    كود PHP:




    forum="""

    institue moad http://moad.alestidafa.com/vb/index.php"

    cours of python perl php java and more ..........

    """

    print forum








    و لكن لو كانت لدينا مجموعة من الأسماء مثلا مختلفة و نريد حجزها في متغير واحد دون الدمج بينهما هل نستطيع فعل ذلك ؟
    أنظر المثال التالي



    كود PHP:




    name=("chouaib","moad","jarod","somebody","man2008")

    print
    "name : %s %s %s %s %s " %name









    لقد جمعنا عدة أسماء و قمنا بحجزهم في متغير واحد و العبارة s% تعني طباعة
    متغير في هذا المكان و s تعني string و عند الإنتهاء نقوم بتعريف المتغير
    الذي يحتوي على مجموعة الاسماء %name
    و لو قمنا بطباعة السلسلة ككل دون إستعمال المعامل % سيقوم البرنامج بطباعة المحتوى كامل على هذا الشكل

    ('chouaib', 'moad', 'jarod', 'somebody', 'man2008')

    و لو أردنا طباعة الإسم الأول أو الجزء الأول من السلسلة فقط نقوم بكتابة

    كود PHP:




    print name[0]








    فيكون الناتج chouaib
    و نستطيع أيضا طباعة المحتوى الذي نريد


    كود PHP:




    print name[0]+ " " + name[1]








    فيكون الناتج chouaib moad

    أو إضافة عبارات أخرى بين مستقلة عن السلسلة الأم


    كود PHP:




    print name[0]+ " is an algerian but " + name[1] + " is an palestinian"









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

    كود PHP:




    name=("chouaib","moad","jarod","somebody","man2008")

    c=len(name)

    print
    c








    تقوم هذه الدالة بإعطائنا طول الدالة أو طول جزء من
    الدالة و هذا من روعة لغة البايثون بحيث أنه لو أردنا معرفت طول سلسلة
    بلغة السي يتوجب علينا كتابة كود بثلاثة أسطر

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


    كود PHP:




    name=("chouaib","moad","jarod","somebody","man2008")

    c=len(name[1])

    print
    c









    سيكون الناتج 4
    و هذه الدالة بالدات سنتخدمها كثيرا في المستقبل خاصتا مع الحلقات و هذا مثال يبين لنا إستعمال هذه الدالة مع الحلقات



    كود PHP:




    name=("chouaib","moad","jarod","somebody","man2008")

    i=0

    c
    =len(name)

    while
    i<c:

    print
    name[i]

    i+=1








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

    كود PHP:




    print name[i]







    avatar
    DJONI
    المدير العام على مجموعة مواقع STARMEDIA
    المدير العام على مجموعة مواقع STARMEDIA

    ذكر
    عدد الرسائل : 358
    العمر : 33
    الجنسية : Tunisien
    السٌّمعَة : 1
    نقاط : 16059
    تاريخ التسجيل : 22/06/2008

    رد: أول دورة من نوعهــا على صعيد المواقع العربية : دورة Python

    مُساهمة من طرف DJONI في الأحد 8 مارس - 13:02



    و i هو عداد الحلقة أي أنه سيطبع كل محتوى الحلقة بشرط أن يكون أقل من محتواها

    كود PHP:




    while i<c:








    و الآن سنقوم بكتابة نفس البرنامج و لكنه يطبع رسالة يخبرنا بها أن العضو somebody غير معروف


    كود PHP:




    name=("chouaib","moad","jarod","somebody","man2008")

    i=0

    c
    =len(name)

    while
    i<c:

    print
    name[i]



    if
    name[i]=="somebody":

    print
    "unknown user"



    i+=1








    و
    لو أردنا التعديل ثانيتا على الكود بحيث أنه يتوقف هذه المرة عند الوصول
    إلى الإسم الغير معروف سنقوم بإدخال العبارة
    break


    كود PHP:




    name=("chouaib","moad","jarod","somebody","man2008")

    i=0

    c
    =len(name)

    while
    i<c:

    print
    name[i]



    if
    name[i]=="somebody":

    print
    "unknown user"

    break;



    i+=1









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

    سنطور الآن في الكود قليلا حتى يتمكن المستخدم من إدخال إسم يريد البحث عنه فيخبره البرنامج بوجود الإسم إن وجده



    كود PHP:




    name=("chouaib","moad","jarod","somebody","man2008")

    search=raw_input('enter the name :')

    i=0

    c
    =len(name)

    while
    i<c:

    if
    name[i]==search:

    print
    search," exist in the string "

    break;

    i=i+1









    و لكن هذا الكود لايطبع شيئ في حالة عدم وجود الإسم .

    الآن فكرو معي في طريقة تجعل البرنامج يخبرنا بعدم وجود الإسم إن كان هذا الإسم ليس محتوى في المجموعة .
    قد يقول البعض منكم أن الأمر بسيط بإستعمال عبارة else وهم على حق و لكن كيف ؟

    مثلا لو جربنا الطريقة التالية



    كود PHP:




    name=("chouaib","moad","jarod","somebody","man2008")

    search=raw_input('enter the name :')

    i=0

    c
    =len(name)

    while
    i<c:

    if
    name[i]==search:

    print
    search," exist in the string "

    break;

    else:

    print
    "can't find this name ",search


    i
    =i+1








    جربوا هذا الكود و ستكتشفون الخطأ بأنفسكم مع أن
    الكود صحيح مئة بالمائة و لكنه ليؤدي العمل الذي نريد بحيث أنه يقوم
    بطابعة الرسالة عدة مرات عندما لا يجد الاسم .

    لماذا ؟ لأن جملة else مكتوبة داخل الحلقة فيقوم البرنامج بالتحقق من الشرط الأول


    كود PHP:




    if name[i]==search:








    فإن تحقق سيقوم بتنفيد الأمر التالي

    كود PHP:




    print search," exist in the string "

    break;








    هنا كلو تمام و لكن المشكل يبدأ عندما لا يتحقق الشرط الأول فيقوم البرنامج بالتوجه نحو جملة else ليطبع العبارة

    كود PHP:




    print "can't find this name ",search








    هو يقوم بطباعتها فعلا و لكن المشكل أنه يطبعها بعدد المرات التي لم يجد الإسم في السلسلة(عدم تحقق الشرط الأول)
    من يبحث عن الإسم الأول (chouaib) في السلسلة لن يكتشف هذا الخطأ و لكن من
    يبحث عن الإسم الثاني و الأسماء التي تليه سيكتشف الخطا فمثلا لو قمنا
    بالبحث عن إسم (jarod)
    سيكون الناتج كالتالي


    can't find this name jarod
    can't find this name jarod
    jarod exist in the string

    فالبرنامج يبقى يطبع في رسالة can't find this name في كل مرة لم يتحقق فيها الشرط .
    إذا المشكل يكمن في العداد سنقوم بالتغير في الكود قليلا و نجبر البرنامج
    أن لا يطبع رسالة can't find this name حتى يكون العداد في آخر السلسلة
    (أي أن البحث إنتهى فعلا)



    كود PHP:




    name=("chouaib","moad","jarod","somebody","man2008")

    search=raw_input('enter the name :')

    i=0

    c
    =len(name)

    while
    i<c:

    if
    name[i]==search:

    print
    search," exist in the string "

    break;

    else:

    if
    i==c-1:

    print
    "can't find this name ",search


    i
    =i+1








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

    كود PHP:




    else:

    if
    i==c-1:

    print
    "can't find this name ",search


    i
    =i+1








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


    سيكون الدرس القادم بعنوان التعامل مع السلاسل الحرفية سندرس فيه بعض الدوال التي تتيح لنا التعامل مع السلاسل بصورة أفضل .

    تم بحمد الله
















    avatar
    DJONI
    المدير العام على مجموعة مواقع STARMEDIA
    المدير العام على مجموعة مواقع STARMEDIA

    ذكر
    عدد الرسائل : 358
    العمر : 33
    الجنسية : Tunisien
    السٌّمعَة : 1
    نقاط : 16059
    تاريخ التسجيل : 22/06/2008

    رد: أول دورة من نوعهــا على صعيد المواقع العربية : دورة Python

    مُساهمة من طرف DJONI في الأحد 8 مارس - 13:05




    السلام عليكم و رحمة الله و بركاته

    و هذه مجموعة من الأمثلة المتعلقة بالسلاسل الحرفية و التعامل معها تضعنا في المكان الصحيح قبل البدأ في القوئم

    قبل أن ننطلق يتوجب علينا تعريف الدوال لأننا تكلمنا عليها كثيرا دون تعريفها
    انشأت الدوال في مطلع البرمجة الإجرائية و لقد أحدثت طفرة كبيرة في مجال
    البرمجة و لها الفضل الكبير في تطوير لغات البرمجة حتى اصبحت كما هي عليه
    اليوم
    و الدالة تقوم بجمع عدة أوامر و أعمال معينة (إجراءات) لتقديم نتيجة معينة فمثلا لو أردنا جمع عددين نكتب


    كود PHP:




    a=int(raw_input(' a: '))

    b=int(raw_input(' b: '))

    print
    " %d + %d = %d " %(a, b, a+b )








    فلو أردنا أن ننشئ دالة تقوم بجمع عددين يتوجب علينا كتابة هذا الكود داخل تعريق الدالة ثم نقوم بإستدعائها فقط لتعطينا النتيجة
    و لكي ننشئ دالة نقوم بكتابة العبارة def ثم تليها اسم الدالة ثم قوسين ()
    ثم النقطتين : للدلالة على أن كل مايلي النقطتين تابع للدالة
    و يصبح البرنامج كالتالي


    كود PHP:




    def add():

    a=int(raw_input(' a: '))

    b=int(raw_input(' b: '))

    print
    " %d + %d = %d " %(a, b, a+b )


    add()








    لاحظو جيدا قمنا بكتابة def حتى يعلم المفسر أننا
    نريد تعريف دالة ثم قمنا بكتابة إسم الدالة add و الإسم بالطبع إختياري
    تستطيع تغيره و كل ما يأتي بعد النقطتين يعتبر تابع للدالة أو بعبارة أخرى
    يعتبر جسم الدالة و الأوامر التي ستقوم بتنفيدها هذه الدالة
    في الأخير قمنا بإستدعاء الدالة بكتابة إسمها فقط .
    هذا تعريف بسيط عن الدوال و سنعود لها بعد الإنتهاء من دراسة القوائم بإذن الله

    نعود الآن إلى السلاسل الحرفية

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



    كود PHP:






    name
    ='chouaib'


    c=len(name(


    i=c-1


    while i>=0:


    print
    name[i]


    i=i-1









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


    و شرط الحلقة أن يكون العداد لا يقل عن الصفر أي عندما يصل العداد إلى موضع الصفر تتوقف الحلقة .

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

    المثال الثاني

    سيقوم هذا بإخذ إسم من المستخدم ثم يقوم بنسخ علامة * بين كل حرف من إسم المستخدم.



    كود PHP:






    name
    =raw_input('enter your name : ')


    c=len(name)


    i=0


    while i<c:


    print
    name[i]+'*',


    i=i+1









    يقوم هذا الكود بنسخ حرف من إسم المستخدم ثم يضيف له العلامة * و لقد إستعملنا الفاصلة لطباعة الإسم في سطر واحد.

    المثال الثالث

    في المثال التالي يقوم المستخدم بإدخال إسم ثم يحدد ل البرنامج الحرف الذي
    يريد معرفة عدد تكراره في الاسم فيقوم البرنامج بحساب عدد تكرار هذا الحرف



    كود PHP:






    name
    =raw_input('enter a name :')


    char=raw_input('enter a character : ')


    c=len(name)


    i, y=0, 0


    while i<c:


    if
    name[i]==char:


    y=y+1


    i
    =i+1


    print name," contain ",y," :",char









    يحتوي هذا الكود كما تلاحظون على حلقة واحدة وعدادين الأول إي يمكن الحلقة
    من معاينة كل محتوى السلسلة و العداد الثاني يقوم بحساب عدد الأحرف و هذا
    بإضاقة 1 في كل مرة تجد فيها الحلقة الحرف المحدد من طرف المستعمل. و في
    النهاية يقوم البرنامج بنسخ النتائج للمستعمل.

    مثال الرابع
    يقوم المثال التالي بنسخ محتوى سلسلة في سلسلة أخرى فارغة



    كود PHP:






    name
    ="my name"


    name2=""


    c=len(name)


    i=0


    while i <c :


    name2+= name[i]


    i=i+1


    print name2








    دائما نستعمل الحلقات لكي نتمكن من المرور على كل أجزاء السلسلة ثم نضيف كل حرف من السلسلة الأولى إلى السلسلة الثانية(الفارغة)

    كما نستطيع عكس الإسم الأول و حفظه في الإسم الثاني و ذلك بتغير شرط الحلقة على الشكل التالي



    كود PHP:






    i
    =c-1


    while i>=0:


    name2+= name[i]


    i=i-1








    المثال الخامسة

    من المثال السابق نستطيع عمل برنامج يطلب من المستخدم إدخال إسم ثم يخبره
    البرنامج إن كان الإسم Palindorm او لا و الإسم Palindormeهو الذي لا
    يتغير عندما نعكسه

    مثلا
    RADAR OBO SOS


    كود PHP:






    name
    =raw_input('entrer a name ')


    name2=""


    c=len(name)


    i=c-1


    while i>=0:


    name2=name2+name[i]


    i=i-1


    if name==name2:


    print
    "palindorme"


    else:


    print
    "non palindorme"








    سيقوم البرنامج بعكس الإسم و حفظه في سلسلة ثانية ثم
    يقارن محتواهما فإن تطابقا فالإسم من نوع Palindorme و ان لم يتطابقا
    فالإسم ليس من نوع Palindorme .

    المثال السادس

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

    ثم يقوم البرنامج بنسخ المحتوى بكتابة اسم المستخدم و كلمة المرور الخاصة به



    كود PHP:






    name
    =('chouaib','moad','jarod',' somebody ')


    pas=('123125','85478','99857','88475')


    c=len(name)


    b=len(pas)


    i, y=0, 0


    while i<c and i<b:


    print
    "user :",name[i]," pass", pas[i]


    i=i+1










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

    المثال السابع

    إنطلاقا من المثال السابق سنطورفي الكود قليلا بحيث يقوم البرنامج بالطلب
    من المستخدم إدخال الإسم ثم كلمة المرور ثم يتحقق البرنامج من صحة
    المعلومات المدخلة و يطبع رسالة للمستخدم بنجاح الدخول إذا كانت المعلومات
    صحيحة أو رسالة خطأ إذا كان الإسم أو كلمة المرور خاطئة



    كود PHP:






    user
    =("chouaib","lemdaoui","amir")


    pas=("5555","3333","2222")


    c=len(user)


    i=0


    name
    =raw_input('entrer votre nom :')


    psw=raw_input('entrer notre pass :')


    while
    i<c:





    if
    user[i]==name and pas[i]==psw :


    print
    "registration ok "


    break








    else :


    if
    i==c:


    print
    "registration failed "


    i+=1








    avatar
    DJONI
    المدير العام على مجموعة مواقع STARMEDIA
    المدير العام على مجموعة مواقع STARMEDIA

    ذكر
    عدد الرسائل : 358
    العمر : 33
    الجنسية : Tunisien
    السٌّمعَة : 1
    نقاط : 16059
    تاريخ التسجيل : 22/06/2008

    رد: أول دورة من نوعهــا على صعيد المواقع العربية : دورة Python

    مُساهمة من طرف DJONI في الأحد 8 مارس - 13:05



    المثال للثامن

    سنقوم في هذا المثال بإستدعاء مكتبة string حتى نتمكن من الإستفادة من خصائصها

    سيقوم
    هذا المثال بالطلب من المستخدم إدخال إسمه ثم يحول البرنامج الحرف الأول
    من إسم المستخدم إلى حرف كبير و يطبع له الناتج



    كود PHP:






    import string


    name
    =raw_input('entrer your name pls :')


    i=len(name)


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


    print
    "hellow "+ name1









    في السطر الأول قمنا بإستدعاء المكتبة و هي مكتبة تضم الكثير من الدوال
    التي تساعدنا على التعامل مع السلاسل و قمنا بحجز إسم المستخدم في المتغير
    name و في السطر الرابع قمنا بإستعمال دالة upper التي تقوم بتحويل الحروف
    من Min إلى Maj و لقد قمنا بتحويل الحرف الأول فقط name[0] ثم أضفنا إليه
    باقي الحروف دون تغيير.

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


    ** للبحث عن مكان كلمة معينة داخل سلسة نقوم بإستعمال الدالة
    find


    كود PHP:






    name
    ="my name is Chouaib "


    print name.find('is')









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



    ** للفصل بين عناصر السلسلة بعنصر محدد نقوم بإستعمال دالة
    join


    كود PHP:






    Dir
    ='Mes ********s','Python ******er'





    print 'C :' + '\\\\'.join(Dir)









    سيكون الناتج


    كود PHP:




    C :Mes ********sPython ******er








    أو كما في المثال التالي بحيث نستعمل الدالة join للفصل بين العناصر بكلمة or


    كود PHP:






    name
    ='Mohamed','Amine','Samy'


    print ' or '.join(name)








    سيكون الناتج

    كود PHP:




    Mohamed or Amine or Samy








    و نستطيع إستعمال الطريقة التالية


    كود PHP:






    name
    ='Mohamed','Amine','Samy'


    sep= ' or '


    print sep.join(name)








    و عكس هذه الدالة هي دالة split بحيث أن دالة split
    تقوم بتقسيم سلسلة حسب العنصر الذي نحدده لها ثم تقوم بتحويل هذه السلسلة
    إلى قائمة

    لا حظوا المثال التالي


    كود PHP:






    name
    ='Mohamed or Amine or Samy'


    print name.split('or')


    [
    size="4"]سيكون الناتج[/size]


    [
    'Mohamed ', ' Amine ', ' Samy']








    كما أننا نستطيع إستعمال هذه الدالة لتحويل سلسلة إلى قائمة


    كود PHP:






    user
    ='user1 user2 user3 user4 '


    print user.split()








    سيكون الناتج

    كود PHP:






    ['user1', 'user2', 'user3', 'user4']









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


    كود PHP:






    name
    ="Mohamed Amine Samy"


    print name.replace('Samy','Amar')










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


    تم بحمد الله









    avatar
    DJONI
    المدير العام على مجموعة مواقع STARMEDIA
    المدير العام على مجموعة مواقع STARMEDIA

    ذكر
    عدد الرسائل : 358
    العمر : 33
    الجنسية : Tunisien
    السٌّمعَة : 1
    نقاط : 16059
    تاريخ التسجيل : 22/06/2008

    القوائم و القواميس

    مُساهمة من طرف DJONI في الأحد 8 مارس - 13:11



    القوائم و القواميس









    السلام عليكم و رحمة الله و بركاته


    السلاسل التي رأيناها في الموضوع السابق تمثل نوعا من أنواع المتغيرات
    الخاصة و المتنوعة و التي تستعمل لتنظيم المعلومات و تسيرها و سنرى الآن
    نوعا آخر من هذه المتغيرات و هي القوائم.

    القوائم ( كما يدل إسمها) هي عبارة عن متغير يحمل بداخله قائمة من أسماء
    أو أعداد أو الإثنين معا و مجالات إستعمالها واسعة جدا و أكثر ما يميزها
    في لغة البايثون هو كثرة المكاتب و الدوال المخصصة لها و التي تسهل
    التعامل معها و احذر أخي القارئ يجب عليك فهم التعامل بالقوائم جيدا لأن
    كل ما سيأتي مرتبط بها

    في لغة البايثون نستطيع تعريف قائمة كأي متغير آخر ثم نقوم بإدراج محتوى
    القائمة و الفصل بين المحتويات بفاصلة كما يوضح المثال التالي


    كود PHP:






    day
    =['SATURDAY','SUNDAY','MONDAY','TUESDAY','WEDNESDAY','THURSDAY','FRIDAY']








    المتغير day يمثل إسم القائمة أما أيام الأسبوع فتمثل عناصر القائمة. و نستطيع إدراج أعداد أيضا في محتوى القائمة

    كود PHP:






    day
    =['SATURDAY','SUNDAY','MONDAY','TUESDAY','WEDNESDAY','THURSDAY','FRIDAY','2008']








    أو عمل قائمة تضم متغيرات عددية و حرفية


    كود PHP:




    day=['SATURDAY','SUNDAY','MONDAY',20,55,1895,12.65]








    و نستطيع التعامل مع محتوى القوائم بنفس الطريقة التي رأيناها في السلاسل

    كود PHP:




    day=['SATURDAY','SUNDAY','MONDAY',20,55,1895,12.65]

    print
    day[0]

    print
    day[2]

    print
    day[1:6]








    و كما قلنا سابقا أن لغة البايثون تقوم بتعريف المتغيرات تلقائيا نستطيع التعامل مع المتغيرات العددية داخل القائمة بحرية كبيرة

    كود PHP:




    day=['SATURDAY','SUNDAY','MONDAY',20,55,1895,12.65]

    day[3]=day[3]+90

    print day








    و نستطيع أيضا إستبدال عنصر من القائمة بعنصر جديد

    كود PHP:




    day=['SATURDAY','SUNDAY','MONDAY',20,55,1895,12.65]

    day[2]='Lundi'

    print day








    و نستطيع عمل مثال ل التحقق من العضوية بواسطة القوائم لنرى الفرق بين القوائم و السلاسل

    كود PHP:




    database=[

    [
    'Lem_Chouaib','1234'],

    [
    'user01','5678'],

    [
    'user02','91011']

    ]

    username=raw_input('User name :')

    pas=raw_input('Password :')

    if[
    username, pas] in database :

    print
    'Access granted'








    لاحظو الفرق الكبير بين هذا البرنامج و البرنامج الذي رأيناه سابقا فهذا أكثر تنظيم و أمان .

    بحيث أننا قسمنا القائمة إلى عدة عناصر يحتوي كل عنصر على إسم المستخدم و
    رقمه السري وعند التحقق من مدخلات المستخدم نقوم بالبحث داخل المجموعات
    فقط .

    **إضافة عنصر لقائمة : لإضافة عنصر جديد إلى القائمة نقوم بإستعمال الدالة أبند على الشكل التالي

    كود PHP:




    day=['SATURDAY','SUNDAY','MONDAY','TUESDAY','WEDNESDAY','THURSDAY']

    day.append('FRIDAY')

    print
    day

    أو إذا كانت لدينا قائمة تحتوي على مجموعة أعداد نستطيع إضافة عدد جديد بنفس الطريقة

    num
    =[1,2,3,4,5,6,7,8,9]

    num.append(10)

    print
    num








    ** و لإزالة عنصر من القائمة نقوم بإستعمال الدالة del على الشكل التالي

    كود PHP:




    day=['SATURDAY','SUNDAY','MONDAY','TUESDAY','WEDNESDAY','THURSDAY']

    del(day[2])

    print
    day








    ** و لمعرفة عدد تكرار عنصر داخل القائمة نقوم بإستعمال الدالة count

    كود PHP:




    day=['SATURDAY','SUNDAY','MONDAY','TUESDAY','WEDNESDAY','THURSDAY']

    a=day.count('SATURDAY')

    print
    a

    num
    =[1,2,3,1,5,1,5,19,2,6]

    a=num.count(1)

    print
    a








    ** و لإضافة محتوى قائمة في قائمة ثانية نقوم بإستعمال الدالةextend

    كود PHP:




    day=['SATURDAY','SUNDAY','MONDAY','TUESDAY','WEDNESDAY','THURSDAY','FRIDAY']

    num=[1,2,3,4,5,6,7]

    day.extend(num)

    print
    day











    avatar
    DJONI
    المدير العام على مجموعة مواقع STARMEDIA
    المدير العام على مجموعة مواقع STARMEDIA

    ذكر
    عدد الرسائل : 358
    العمر : 33
    الجنسية : Tunisien
    السٌّمعَة : 1
    نقاط : 16059
    تاريخ التسجيل : 22/06/2008

    رد: أول دورة من نوعهــا على صعيد المواقع العربية : دورة Python

    مُساهمة من طرف DJONI في الأحد 8 مارس - 13:13

    وكنا نستطيع جمع محتوى قائمتين بواسطة المعامل الرياضي + على النحو التالي
    كود PHP:






    day
    =['SATURDAY','SUNDAY','MONDAY','TUESDAY','WEDNESDAY','THURSDAY','FRIDAY']

    num=[1,2,3,4,5,6,7]

    day=day+num

    print day








    و سنقوم الآن بعمل مثال بسيط لفهم القوائم جيدا .

    سيقوم هذا المثال بطلب من المستخدم بإدخال عشرة نقاط ثم يقوم البرنامج بعرض النقاط و مخطط بياني لهذه النقاط .

    كود PHP:




    value=[]

    print
    "value :"

    for i in range(10):

    newvalue=int(raw_input('value %d :'% (i+1)))

    value+=[newvalue]

    print
    "\n Diagram :"

    print "%s %10s %10s " % ("Element","Value", "Diagram")

    for
    i in range (10):

    print
    "%7d %9d %s" % (i, value[i], "*" *value[i])








    أول شيئ قمنا بإنشاء قائمة فارغة حتى نحجز بداخلها النقاط التي
    يدخلها المستخدم , ثم قمنا بإنشاء المتغير newvalue الذي يأخذ قيمة العدد
    الذي سيدخله المستخدم مع العلم أن هذا الشق من الكود سيكرر 10 مراة لأنه
    مكتوب داخل حلقة for .

    بعد إدخال عشرة أعداد قمنا بإنجاز حلقة ثانية تقوم بنسخ الناتج الذي أدخله المستخدم و معنى الأرقام التالية


    كود PHP:




    print "%7d %9d %s"








    تبين المسافة التباعد بين النتائج التي ستعرض على الشاشة حتى لا تكون النتائج ملتسقة ببعضها البعض .

    ثم قمنا بعرض رتبت العدد أولا و التي تمثلها i ثم العدد نفسه ثم عرض نجوم بقدر العدد.



    ** مثلا لو أردنا معرفة مكان توجد عنصر معين داخل
    قائمة نقوم بإستعمال الدالة index فتقوم هذه الأخيرة بالبحث داخل القائمة
    حتى تجد العنصر المطابق .


    كود PHP:




    name=['user1','user2','user3','user4']

    i=name.index('user3')

    print
    i








    و إحذر أخي القارئ أن تخلط بين عمل هذه الدالة و دالة count لأن
    دالةindex تعطينا مكان تواجد العنصر و دالة count تعطينا عدد تكراره.

    راينا سابقا كيفية إضافة عنصر جديد إلى قائمة و لكن كما رأينا سيضاف
    هذا العنصر في آخر القائمة , و لهذا توجد دالة أخرى تعطينا الخيار لأضافة
    عنصر جديد و في المكان الذي نريد و هي دالة insert .

    كود PHP:




    name=['user1','user2','user3','user4']

    name.insert(0,'user0')

    name.insert(5,'user5')

    print
    name








    نقوم بتحديد مكان وضع العنصر الجديد ثم نحدد للداة العنصر الجديد .

    و نفس الشيئ لإزالة عنصر نحن رأينا سابقا الداة del التي يتعين علينا
    تحديد مكان العنصر حتى تحذف و لكن إفرض لو كنا لا نعرف مكان تواجد العنصر
    و نعرف إسمه فقط .

    في هذه الحالة يجب علينا إستعمال الدالة remove

    كود PHP:




    name=['user1','user2','user3','user4']

    name.remove('user4')

    print
    name








    ** و لعكس محتوى قائمة نقوم بإستعمال الدالة reverse

    كود PHP:




    name=[1,2,3,4,5,6,7]

    name.reverse()

    print
    name








    و نستطيع عكس محتوى قائمة تحتوي على اسماء أيضا


    كود PHP:




    name=['user1','user2','user3','user4']

    name.reverse()

    print
    name








    ** و لترتيب محتوى قائمة أعدادا تصاعديا نقوم بإستعمال الدالة sort

    كود PHP:




    num=[6,8,2,4,9,1,5,7]

    num.sort()

    print
    num










    ** و توجد دالة أخرى تساعدنا على عمل قائمة
    لتخزين العناصر بصورة مؤقتة و هي دالة pop بحيث تقوم هذه الدالة بإستخدام
    العنصر ثم إزالته من القائمة



    كود PHP:






    note
    =[23,25,28,16]

    ahmed = note.pop(0)

    chouaib= note.pop(0)

    samir=note.pop(0)

    moad=note.pop(0)

    print
    " ahmed %d chouaib%d samir %d moad %d " % (ahmed,chouaib, samir, moad)








    تقوم دالة بإسناد قيمة العنصر من القائمة إلى المتغير ثم تقوم بحذفه
    من القائمة تماما وهذه الميزة ستساعدنا كثيرا لو أردنا حجز معلومات بصورة
    مؤقتة.

    **القواميس

    رأينا السلاسل الحرفية و القوائم و راينا أن كل واحدة منهما تختص
    بمميزاتها و سنرى الآن نوعا آخر من المتغيرات المتنوعة و التي لا تختلف
    كثيرا عن ما رأيناه سابقا و هي القواميس .

    تستعمل القواميس لربط عنصرين مع بعضهما البعض فالقواميس تتشكل من مجموعة
    ثنائيات مترابطة مع بعضها البعض فمثلا لو أردنا عمل قاموس يحتوي على الإسم
    المستخدم و يليه رقم الهاتف سيكون شكله كالتالي
    كود PHP:






    PhoneBook
    ={'user01': '1234','user02' : '3456','user04' : '78910'}








    كما قلنا يتشكل القاموس من مجموعات ثنائية يجب علينا أولا فتح القوس
    الخاص ب القاموس ثم ندرج العنصر الأول و تليه نقطتان حتى نحدد للمفسر أن
    مايلي النقطتين تابع للعنصر الأول .
    و لمعرفة رقم هاتف المستعمل نقوم بتحديد إسمه فقط على الشكل التالي


    كود PHP:




    print PhoneBook['user01']




















    avatar
    DJONI
    المدير العام على مجموعة مواقع STARMEDIA
    المدير العام على مجموعة مواقع STARMEDIA

    ذكر
    عدد الرسائل : 358
    العمر : 33
    الجنسية : Tunisien
    السٌّمعَة : 1
    نقاط : 16059
    تاريخ التسجيل : 22/06/2008

    رد: أول دورة من نوعهــا على صعيد المواقع العربية : دورة Python

    مُساهمة من طرف DJONI في الأحد 8 مارس - 13:14

    و لإنشاء قاموس جديد نقوم بتحديد إسمه على الشكل التالي

    name={}

    ثم نقوم بتعبئة هذا القاموس بالبيانات الازمة

    كود PHP:




    name={}

    name['chouaib']=03122

    name
    ['samir']=36584

    name
    ['mohamed']=65498








    و نستطيع إدراج أكثر من بيان لعنصر ما داخل القاموس

    كود PHP:




    name = {

    'Chouaib': {

    'phone': '2341',

    'addr': 'Algeria'

    },

    'Moad': {

    'phone': '9102',

    'addr': 'Palastine'

    },

    'Mohamed': {

    'phone': '3158',

    'addr': 'Egypt'

    }

    }








    فالقاموس name يحتوي على عدة قواميس فرعية بداخله كل قاموس من هذه الأخيرة يحتوي على رقم هاتف المستخدم و عنوانه.

    و نستطيع التطوير في البرنامج قليلا حتى يشمل خاصية البحث و ذلك بإضافة الكود التالي

    كود PHP:




    user = raw_input('Name: ')

    request = raw_input('Phone number (p) or address (a)? ')

    if
    request == 'p':

    if
    user in name: print"%s Phone numbers is %s " % (user, name[user]['phone'])

    if
    request == 'a':

    if
    user in name: print"%s Address is %s " % (user,name[user]['addr'])








    كما تلاحظون تسهل القواميس العمل علينا كثيرا خاصتا في التعامل مع المعلومات و قواعد البيانات .

    ** لتفريغ محتوى القاموس تماما نقوم بإستعمال الدالة clrear

    كود PHP:




    name = {

    'Chouaib': {

    'phone': '2341',

    'addr': 'Algeria'

    },

    'Moad': {

    'phone': '9102',

    'addr': 'Palastine'

    },

    'Mohamed': {

    'phone': '3158',

    'addr': 'Egypt'

    }

    }

    name.clear()

    print
    name








    ** كما أننا نستطيع أن نسند أكثر من قيمة لعنصر معين حسب الحاجة


    كود PHP:




    Mail={'user01': 'user01@us.com','user02':['user02@us.com','us2@us.com','us22@us.com']}








    ** و نستطيع نسخ قاموس داخل قاموس آخر بواسطة الدالة copy

    كود PHP:




    Mail={'user01': 'user01@us.com','user02':['user02@us.com','us2@us.com','us22@us.com']}

    mail01=Mail.copy()








    بواسطة هذه الكتابة سيقوم المفسر بإسناد كل قيم Mail إلى mail01

    ** و نستطيع إضافة عنصر جديد لقاموس عن طريق الدالة update


    كود PHP:




    user={

    'name':'Mohamed',

    'pass':'1234',

    }

    Phone={'Phone':'123456789'}

    user.update(Phone)

    print
    user








    **و لمعرفة محتوى عنصر معين داخل قاموس نقوم بإستعمالالدالة get


    كود PHP:




    user={

    'Mohamed':{

    'name':'Mohamed',

    'pass':'1234'

    },

    'Moad':{'name':'Moad',

    'pass':'9876'

    }

    }

    print
    user.get('Mohamed)








    **و نستطيع عمل قاموس لحجز المعلومات بصفة مؤقتة كما رأينا في السلاسل بواسطة الدالة pop


    كود PHP:






    user
    ={

    'Mohamed':{

    'name':'Mohamed',

    'pass':'1234'

    },

    'Moad':{'name':'Moad',

    'pass':'9876'

    }

    }

    print
    user.pop('Mohamed')

    print
    user








    سيقوم البرنامج بطباعة محتويات العنصر محمد ثم يحذفه نهائيا من القاموس


    هذه أكثر الدوال إستعمالا في مجال القوائم و
    القواميس نكون هنا قد قطعنا شوطا معتبرا في تعلم مبادئ لغة البايثون في
    الدرس القادم سنقوم بدراسة أمثلة خاصة بكل ما رايناه في السلاسل الحرفية و
    القوائم ثم ننطلق في الجزئ الثاني من هذه الدورة


    بعد الإنتهاء من الدرس القادم سأقوم بجمع كل الدروس التي رأيناها في ملف pdf


    تم بحمد الله
    avatar
    DJONI
    المدير العام على مجموعة مواقع STARMEDIA
    المدير العام على مجموعة مواقع STARMEDIA

    ذكر
    عدد الرسائل : 358
    العمر : 33
    الجنسية : Tunisien
    السٌّمعَة : 1
    نقاط : 16059
    تاريخ التسجيل : 22/06/2008

    التمرين الأول

    مُساهمة من طرف DJONI في الأحد 8 مارس - 13:15








    السلام عليكم و رحمة الله و بركاته
    لدينا اليوم ثلاث تمارين شاملة بإذن الله تعطينا نظرة بسيطة عن التعامل مع
    كل ما درسناه سابقا و تمهدنا لدراسة أمور أكثر تقدما في الدروس القادمة و
    أريد التنبيه على الإكثار من الأمثلة و التعديل عليها و تجريب كل مارايناه
    من دوال و تطبيقها لأن البرمجة لا تتعلم إلا بالتطبيق أما الحفظ فلن يفيدك
    في شيئ إذا أخي القارئ نصيحة قم بإضافة أشياء جديدة على الامثلة التي في
    الدورة و غير بعض الأشياء عليها واكتب ملاحظاتك عليها لأن هذا الأمر مهم
    جدا

    التمرين الأول
    فكرة هذا الترين تتمثل في إنشاء قاعدة بينات لحفظ المعلومات و يمثل هذه
    القاعدة قاموس نقوم بإنشائه و نفرض مثلا أن هذه القاعدة تستعمل لحفظ
    معلومات خاصة بالطلاب يستعملها الأستاذ لحفظ إسم الطالب و النقطة المتحصل
    عليها .

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

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

    إذن فالكود مقسم إلى أربع دوال لكل دالة عمل معين تقوم به و عند الإنتهاء من برمجة هذه الدوال نقوم بإستدعائها بإسمها فقط

    الكود


    أولا نقوم بتعريف المتغيرات الأساسية للبرنامج و التي ستستعملها كل الدوال


    كود PHP:




    import string
    database
    ={}
    alpha=string.letters
    digi
    =string.digits








    إستدعينا مكتبة string لكي نستفيد من مزايها ثم قمنا بإنشاء قاموس
    جديد إسمه database يقوم بحجز البيانات المدخلة من طرف الأستاذ ثم قمنا
    بتعريف متغيرين alpha و digi بحيث أن alpha يحتوي على كل الحروف الفرنسية
    فلقد استعملنا دالة letters التي تنتمي لمكتبة string و تقوم هذه الدالة
    بإسناد كل الحروف الأبجدية للمتغيرalpha نفس الشيئ بالنسبة digi بحيث أن
    الدالة digits تقوم بإسناد كل الأرقام لهذا المتغير و سنرى الفائدة
    المرجوة من هذا العمل

    أولا الدالة get_name()


    كود PHP:




    def get_name():
    i=0
    nb
    =int(raw_input("number of student :"))
    while
    i<nb :
    name=raw_input(" name :")
    note=raw_input(" note :")
    if (
    name[0] not in alpha) or (note[0] not in digi):
    print
    " erreur invalid name or note"
    continue
    else:
    info={name : note}
    database.update(info)
    i+=1








    إسم الدالة غير مهم بحيث أنك تستطيع تغير كما تشاء .
    أولا عرفنا العداد i و أسندنا له قيمة الصفر ثم طلبنا من المستخدم إدخال
    عدد الطلاب nb أو عدد البيانات التي يريد إدخالها لكي نقوم بعمل حلقة
    يتكرر عملها حسب عدد البيانات
    و انظرو بعد ذلك يبدئ عمل الحلقة بحيث ان شرط الحلقة أن يبقى العداد أقل من عدد الطلاب
    بعد ذلك يطلب البرنامج من المستخدم إدخال إسم الطالب و النقطة المتحصل
    عليها و هنا تأتي فائدة المتغير alpha و digi أنظرو جيدا إلى الجملة
    الشرطية


    كود PHP:




    if (name[0] not in alpha) and (note[0] not in digi):









    قمنا بإختبار الإسم و النقطة بحيث لو أدخل المستخدم إسم الطالب وكان أول
    حروفه رقم سيطبع البرنامج رسالة خطأ للمستخدم لأنه من غير المعقول أن يكون
    إسم طالب يبدئ برقم و نفس الشيئ بالنسبة للنقطة بحيث لو أدخل المستخدم بدل
    النقطة حرف سيقوم البرنامج بإرسال رسالة خطئ و هنا عند حدوث الخطأ لن
    يتوقف البرنامج او بالأحرى لن تتوقف الحلقة بل ستعيد الطلب من المستخدم
    وهذا بواسطة العبارة

    كود PHP:




    continue











    avatar
    DJONI
    المدير العام على مجموعة مواقع STARMEDIA
    المدير العام على مجموعة مواقع STARMEDIA

    ذكر
    عدد الرسائل : 358
    العمر : 33
    الجنسية : Tunisien
    السٌّمعَة : 1
    نقاط : 16059
    تاريخ التسجيل : 22/06/2008

    رد: أول دورة من نوعهــا على صعيد المواقع العربية : دورة Python

    مُساهمة من طرف DJONI في الأحد 8 مارس - 13:16

    أي استمر بإعادة هذا القسم من الحلقة حتى تكون المدخلات صحيحة و لو
    أردنا مثلا أن تتوقف الحلقة تماما و يتوقف البرنامج عند حدوث خطأ في
    المدخلات نقوم بإستبدال عبارةcontinue ب عبارة break

    كود PHP:




    else:
    info={name : note}
    database.update(info)
    i+=1








    هنا إذا كانت المدخلات صحيحة يقوم المتغيرinfo بحجز الإسم و النقطة
    و يكون الإسم و النقطة مترابطان مع بعضهما البعض بعد ذلك نحجز هذه
    المعلومات داخل القاموس بواسطة الدالةupdate
    و هكذا ستستمر هذه الحلقة حتى يبلغ العداد إي رقم الطلاب .

    ثانيا الدالة del_name()


    كود PHP:




    def del_name():
    del_n=raw_input(" name of student :")
    if
    del_n in database :
    print
    " delte " + database.pop(del_n)+ "..............."
    else:
    print
    " unknowable student"









    كما قلنا سابقا تقوم هذه الدالة بحذف بيانات طالب معين يحيث أنها تطلب من
    المستخدم إدخال إسم الطالب المراد حذفه ثم تقوم بالبحث داخل القاموس إن
    كان هذا الإسم موجود فعلا داخل القاموس فإن وجد ستقوم بحذفه بواسطة الدالة
    pop
    و إن لم يوجد سيقوم البرنامج بتنبيه المستخدم أن بيانات الطالب غير متوفرة داخل القاعدة

    ثالثا الدالة show_dico()


    كود PHP:




    def show_dico():
    for
    a,b in database.items():
    print
    "name " + a + " : " + "note " + b








    قمنا بإستعمال حلقة for في هذه الدالة و لقد قمنا بتقسيم القاموس
    إلى ثنائيات (حولناه إلى قائمة) ثم تقوم الدالة بطباعة الإسم و المتمثل
    بالمتغير a و العلامة المتمثلة بالمتغيرb

    رابعا الدالة search_name()


    كود PHP:




    def search_name():
    name=raw_input("name of student : ")
    if
    name in database:
    print
    "result :" + database.get(name)
    else:
    print
    "unknowable student"








    تقوم هذه الدالة بالبحث عن بيانات طالب معين و هذا بواسطة العبارة

    كود PHP:




    if name in database:








    فلو وجد هذا الإسم سيقوم البرنامج بطباعة إسم و نقطة الطالب
    للمستخدم و إن لم يوجد سيقوم البرنامج بتنبيه المستخدم بأن الإسم غير
    معروف داخل القاعدة .

    في هذه المرحلة أنهينا برمجة الدوال و ما بقي إلا استدعائها بواسطة اسمها فقط

    فمثلا نكتب
    get_name()
    سيقوم البرنامج باستدعاء هذه الدالة و ستقوم بتنفيد عملها و لو كتبنا بعدها الدالة الثانية
    del_name()
    ستقوم هي الأخرى بتنفيد عملها بعد الدالة الأولى حسب الترتيب
    و تستطيع أخي القارئ بعمل برنامج رئيسي بعد هذه الدوال فإذا كان المستخدم
    يريد إدخال بينات تقوم باستدعاء الدالة get_name() وإذا أراد البحث عن
    البيانات تقوم باستدعاء الدالة search_name() و هكذا
    وتستطيع عمل لائحة للمستخدم تسهل عليه الإختيار
    مثلا

    كود PHP:




    print " (1): add name \n (2): search \n (3): delte \n (4): show"

    choic=raw_input(' Choic :')
    if
    choic=='1':
    get_name()
    elif choic=='2':
    search_name()
    elif choic=='3':
    del_name()
    elif choic=='4':
    show_dico()








    يكتب هذا الكود بعد الإنتهاء من أكواد الدوال

    نكون هنا قد انهينا المثال الأول و في الحقيقة سنعود لهذا المثال بالذات عند دراسة الملفات لأن عمل هذا المثال مرتبط بالملفات .

    بقي لدينا تمرينين اثنين سنتعلم من خلالهما كيفية عمل مكتبة و استدعاء الدوال من خلالها و سنطبق مثال على هذا الكود الذي درسناه .


    تم بحمد الله











    avatar
    DJONI
    المدير العام على مجموعة مواقع STARMEDIA
    المدير العام على مجموعة مواقع STARMEDIA

    ذكر
    عدد الرسائل : 358
    العمر : 33
    الجنسية : Tunisien
    السٌّمعَة : 1
    نقاط : 16059
    تاريخ التسجيل : 22/06/2008

    رد: أول دورة من نوعهــا على صعيد المواقع العربية : دورة Python

    مُساهمة من طرف DJONI في الأحد 8 مارس - 13:18



    طريقة عمل مكتبة و استدعائها

    قم بكتابة الكود الخاص بالدوال على المفسر ثم اعطه اسما مثلا student و قم بحفظه في
    أي مكان بصيغة .py أي أن الملف يصبح student.py و بعد ذلك قم بنسخ هذا
    الملف و الصقه داخل ملف Lib الذي تجده داخل مجلد python25 و يحتوي مجلد
    Lib على كل المكاتب التي يستعملها المفسر و كل ملف تضعه داخل هذا المجلد
    سيعتبره المفسر مكتبة






    بعد ذلك افتح المفسر ثانيتا و قم باستدعاء هذه المكتبة التي انشئتها بواسطة العبارة



    كود PHP:




    Import student








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




    كود PHP:




    import student

    print " (1): add name \n (2): search \n (3): delte \n (4): show \(5):Quit"


    choic=raw_input(' Choic :')

    while
    choic!='5':

    if
    choic=='1':

    student.get_name()

    elif choic=='2':

    student.search_name()

    elif choic=='3':

    student.del_name()

    elif choic=='4':

    student.show_dico()

    choic=raw_input(' Choic :')








    و لقد بالتعديل عليه بحيث انه سيبقى ينتظر أوامر المستخدم حتى يطلب هذا الأخير الخروج من البرنامج و ذلك بإدخال رقم 5

    و أبشر يا أخي لأنك صرت تعرف كيف تنشئ مكتبة و تزيد في لغة البايثون أشياء جديدة













    avatar
    DJONI
    المدير العام على مجموعة مواقع STARMEDIA
    المدير العام على مجموعة مواقع STARMEDIA

    ذكر
    عدد الرسائل : 358
    العمر : 33
    الجنسية : Tunisien
    السٌّمعَة : 1
    نقاط : 16059
    تاريخ التسجيل : 22/06/2008

    التمرين الثاني

    مُساهمة من طرف DJONI في الأحد 8 مارس - 13:19



    التمرين الثاني
    فكرة هذا التمرين تكمن في برمجة اربع أوامر 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:




    فإذا كانت بداية العنوان هي www و نهايته هي com فهذا يعني أن العنوان صحيح فلو تلاحظوا مع العبارة جيدا سترون أننا قطعنا العنوان إلى قسمين القسم الأول يحتوي على الثلاث حروف الأولى من العنوان









    كود PHP:




    add[0:2]








    و القسم الثاني يحتوي على الثلاث حروف الأخيرة من العنوان

    كود PHP:




    add[-3]








    و دائما أأكد على معالجة مدخلات المستخدم فيجب عليك أخي القارئ أن
    تعتاد على هذه الطرق لان البرنامج لو تقبل كل ما يدخله المستخدم ستكون
    العواقب وخيمة لدى ضع في بالك دائما كل الإحتمالات الممكنة الوقوع و
    عالجها كلها حتى يكون برنامجك متكامل و منطقي
    بعد التحقق من العنوان نقوم بطبع رسالة للمستخدم تعلمه أن الإتصال نجح و
    لو حدث خطأ في الإتصال كإدخال عنوان خاطئ سيقوم البرنامج بطباعة رسالة خطئ
    للمستخدم


    mkdir(host)



    كود PHP:




    def mkdir(host):

    nf=raw_input("nom de fichier ")

    if
    nf not in host:

    host.append(nf)

    else:

    print
    " le fichier est d?ja exist dans le repertoire local"








    الأمر mkdir تجده في لينيكس و ftp و هو عبارة عن أمر
    يقوم بإنشاء مجلد جديد و هذه هي وضيفته في هذا البرنامج بحيث أن هذه
    الدالة تقوم بالطلب من المستخدم بإدخال إسم الملف الذي يريد إنشائه و
    حجزنا إسم الملف في المتغير nf ثم نقوم بالتحقق من عدم وجود الملف داخل
    السيرفر



    كود PHP:




    if nf not in host:








    فإذا تحقق الشرط تقوم الدالة بإنشاء عنصر جديد داخل
    القائمة بواسطة الدالة uppend


    avatar
    DJONI
    المدير العام على مجموعة مواقع STARMEDIA
    المدير العام على مجموعة مواقع STARMEDIA

    ذكر
    عدد الرسائل : 358
    العمر : 33
    الجنسية : Tunisien
    السٌّمعَة : 1
    نقاط : 16059
    تاريخ التسجيل : 22/06/2008

    رد: أول دورة من نوعهــا على صعيد المواقع العربية : دورة Python

    مُساهمة من طرف DJONI في الأحد 8 مارس - 13:20

    أما عن كان العنصر متواجد أصلا داخل القائمة
    سيقوم البرنامج بتنبيه المستخدم بأن الملف متواجد أصلا داخل المجلد
    و نلاحظ أن الدالة تحتوي بين القوسين الخاصين بها على كلمة 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 حقيقي

    بقي لنا مثال أخير قبل أن ننطلق في مرحلة جديدة فمن لديه سؤال أو استفسار حول كل مارأيناه سابقا لا يتردد بطرحه

    تم بحمد الله
    avatar
    DJONI
    المدير العام على مجموعة مواقع STARMEDIA
    المدير العام على مجموعة مواقع STARMEDIA

    ذكر
    عدد الرسائل : 358
    العمر : 33
    الجنسية : Tunisien
    السٌّمعَة : 1
    نقاط : 16059
    تاريخ التسجيل : 22/06/2008

    التمرين الثالث

    مُساهمة من طرف DJONI في الأحد 8 مارس - 13:23








    السلام عليكم و رحمة الله و بركاته

    التمرين الثالث

    هو تمرين بسيط لا يحتوي على شفرات طويلة و لكنه سيعلمنا كيفية التحكم في
    المدخلات و تحويلها من صيغة إلى أخرى و توجيهها إلى لآداء الخدمة التي
    نريدها
    التمرين عبارة عن لعبة لغوية نقو بإدخال كلمة مثلا 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














    avatar
    DJONI
    المدير العام على مجموعة مواقع STARMEDIA
    المدير العام على مجموعة مواقع STARMEDIA

    ذكر
    عدد الرسائل : 358
    العمر : 33
    الجنسية : Tunisien
    السٌّمعَة : 1
    نقاط : 16059
    تاريخ التسجيل : 22/06/2008

    رد: أول دورة من نوعهــا على صعيد المواقع العربية : دورة Python

    مُساهمة من طرف DJONI في الأحد 8 مارس - 13:24








    ثم نقوم بإضافة علامة | بين احرف الكلمة word كما بينا سابقا

    كود PHP:




    while i<c:

    tampon+=word[i]+"|"

    i+=1








    هنا في هذه المرحلة من الكود لدينا القائمة etoile تحتوي على
    [‘*’,’*’,’*’,’*’] بنفس حروف الكلمة و المتغير tampon يحتوي على الكلمة
    word و لكن مقسمة بواسطة علامة | كما رأينا في المقدمة « ‘p|y|t|h|o|n’ »
    في هذه المرحلة نستطيع تحويل المتغير word إلى قائمة بواسطة الدالة split


    كود PHP:




    word_split= tampon.split('|')








    الآن انتهينا من تهيئة المتغيرات و جاء دور القسم الرئيسي
    أولا نعمل حلقة تكون نهايتها أكبر من عدد الحروف ب 3 دورات حتى نعطي للمستخدم فرصة

    كود PHP:




    while l<c+3:








    ثم نطلب من المستخدم إدخال حرف

    كود PHP:




    car=raw_input(" char :")








    ثم يأتي الشرط الأساسي

    كود PHP:




    if car in word_split and car not in etoile :








    نقوم بدراسة الحرف المدخل فإذا كان ينتمي للكلمة و لا يوجد في
    القائمة etoile أي ان البرنامج لم يضعه في etoile من قبل سيقوم البرنامج
    بتنفيد أربع خطوات
    الخطوة الأولى تكمن في معرفة مكان تواجد هذا الحرف داخل القائمة word_split


    كود PHP:




    ind=word_split.index(car)








    و هذا بواسطة بواسطة الدالة Index و نحجز الرقم الممثل لهذا المكان في المتغير ind
    الخطوة الثانية نقوم بإدخال هذا الحرف داخل القائمة etoile مع مراعات المكان

    كود PHP:




    etoile.insert(ind,car)








    لاحظو جيدا قمنا بإدخال المتغير char داخل etoile و مكان إدخاله متوافق مع ind أي انه سيثبت في نفس مكان الكلمة الأصلية
    لكن لو تذكرو حين راينا الدالة insert من قبل و لو تعاملتم بها سترون انها
    تضيف عنصر جديد للقائمة و لا تستبدل هذا العنصر كالدالة replace أي ان
    القائمة etoile ستزيد بدرجة كلما ادخلنا عنصر جديد و لا نستطيع استعمال
    الدالة replace لأنها لا تتعامل مع القوائم
    هنا يواجهنا مشكل و الخطوة الثالثة تعالج هذا المشكل
    الخطوة الثالثة تقوم هذه الخطوة بحذف العنصر الأخير من القائمة etoile حتى نتخلص من مشكل ازدياد حجم القائمة مع كل عنصر جديد

    كود PHP:




    etoile.remove(etoile[c])








    استخدمنا الدالة remove لإزالة العنصر الأخير المبين في الصيغة
    etoile[c] بحيث اننا رأينا أن المتغير c يمثل آخر عنصر للقائمة
    الخطوة الرابعة تقوم بطابعة القائمة etoile
    print etoile
    و في الأخير نقوم بإختبار etoile و word_split فإذا كانا متساويين فهذا
    يعني ان المستخدم قد نجح في اكمال كل الكلمة فنطبع له رسالة تخبره بأنه
    فاز ثم نخرج من الحلقة بواسطة break


    كود PHP:




    if etoile[0:c]==word_split[0:c]:

    print
    "***** YoU WiN*******"

    break








    و إذا لم تتساوى القائمتين نقوم بزيادة العداد و تعاد نفس الخطوات السابقة
    I+=1

    قد يقوا قائل منا أن هذا الرنامج جميل لأنو افادنا في بعض الأمو و لكن
    كلعبة فليس له أي معنا لأننا نحن من ادخل الكلمة فنحن على علم مسبق بها أي
    أن عنصر التخمين معدوم في هذه اللعبة و هذا كلام صحيح .
    و لو أردنا اضافة عنصر التخمين على البرنامج يتوجب علينا استدعاء مكتبة
    random و هي مكتبة تحتوي على الكثير من الدوال التي تساعد على التعامل مع
    الأرقام و ما يهمنا من هذه المكتبة هو دالة randrage بحيث أن هذه الدالة
    تقوم باختيار اعداد بصفة عشوائية
    مثلا لو كتبنا
    random.ranrage(10)
    ستقوم الدالة باختيار عدد عشوائي محصور بين المجال (0-10)
    و للإستعانة بهذه الدالة نقوم بالتعديل على القسم الاول من الكود فقط

    كود PHP:




    import random

    words
    =['cat','dog','watch','house']

    r=random.randrange(3)

    word=words[r]

    word_split, etoile=[], []

    tampon=''

    i, l, y=0, 0, 0








    بحيث اننا انشئنا قائمة تحتوي على العديد من الكلمات
    ثم انشئنا المتغير r الذي ستسند له قيمة عشوائية من 0 إلى 3 و هنا يجب الإنتباه لأن العدد الأقصى يحب أن يكون مساوي لعدد الكلمات
    بعد ذلك يأخذ النتغير word الكلمة المختارة من القائمة words و باقي الكود يبقى على حاله دون تغير

    و هنا نكون قد انتهينا من التمرين الأخير في هذه
    المرحلة و حاول فهم هذا التمرين جيدا أخي القارئ لأنه يحتوي على فوائد
    كثيرة ستحتاجها في المراحل القادمة .

    أحيطكم علما أني جمعت كل ما رايناه في ملف pdf و بقي يحتاج لبعض التعديل
    فقط و سأضع رابط التحميل الخاص بهذا الملف غدا بإذن الله كما أني سأضع بعض
    التمارين التقيمية


    تم بحمد الله .
    avatar
    DJONI
    المدير العام على مجموعة مواقع STARMEDIA
    المدير العام على مجموعة مواقع STARMEDIA

    ذكر
    عدد الرسائل : 358
    العمر : 33
    الجنسية : Tunisien
    السٌّمعَة : 1
    نقاط : 16059
    تاريخ التسجيل : 22/06/2008

    رد: أول دورة من نوعهــا على صعيد المواقع العربية : دورة Python

    مُساهمة من طرف DJONI في الأحد 8 مارس - 13:25



    السلام عليكم و رحمة الله و بركاته
    أولا هذا رابط تحميل هذا الجزء من الدورة

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

    و لقد اخترت لكم بعض التمارين البسيطة تنفيدا لرغبة أخونا MUSLIM23

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

    2- اكتب كود لبرنامج يقوم بتحويل العملة إلى الدولار بحيث ان المستخدم
    يدخل كمية المبلغ و معامل التحويل فيقوم البرنامج بتحويل هذا المبلغ على
    الدولار و يخرج الناتج للمستخدم
    3-عدل على هذا البرنامج بحيث انه يطلب من المستخدم ادخال رمز العملة و معامل التحويل فينسخ البرنامج النتائج على الشكل التالي
    12345658$ Da 123123446 =
    -4
    نبقى مع نفس البرنامج قم بتطويره بحيث يصبح البرنامج يعرف معامل التحويل وما على المستخدم إلا ادخال رمز عملته و المبلغ
    مثلا يطلب البرنامج من المستخدم ادخال المبلغ ثم يطلب منه ادخال رمز عملته
    (ريال مثلا) فيقوم البرنامج بالتحويل مباشرتا دون طلب معاما التحويل .

    5- لاحظ القائمة التالية
    ['Mohamed, 'Amine', 'Samy', 'Ahmed', ‘Adibe', ‘Omar']

    قم بكتابة برنامج ينسخ كل إسم من هذه القائمة و ينسخ امامه عدد احرف الإسم

    6- عدل على هذا البرنامج بحيث ان البرنامج لا يسمح بالأسماء التي يفوق عدد
    احرفها 8 فإن وجد اسم يفوق عدد احرفه هذا الرقم يقوم البرنامج بحذفه من
    القائمة

    7- اكتب برنامج تسجيل الطلبة حيث ان المستخدم يدخل اسم الطالب و تاريخ تسجيل ثم اضف إلى هذا البرنامج خصائص البحث و الحذف

    8- هذا التمرين طرح في مسابقة خاصة بموقع الخوارزميات العربي ونص هذا التمرين كا التالي



    عند ارسال اي رسالة قصيرة SMS فانت ملزم بعدم كتابةاكثر من 160 حرف لذا فمن الملزم عليك غاليا الاختصار.

    سوف يتم اعطائك text و هو نص الرسالة و يجب ان تترجمها الى لغة SMS طبعا للقواعد التالية:

    1. حذف جميع علامات التنقيط('.',',','?' و'!').

    2. ارجاع الأحرف الكبيرة الى احرف صغيرة.

    3. تغيير جميع الكلمات 'and' ال '&'.

    4. تغيير جميع الكلمات 'ate' الى '8'.

    5. تغيير جميع الكلمات 'at' الى '@'.

    6. تغيير جميع الكلمات 'you' الى'U'.



    مثال على ذلك :

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

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

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


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












    avatar
    DJONI
    المدير العام على مجموعة مواقع STARMEDIA
    المدير العام على مجموعة مواقع STARMEDIA

    ذكر
    عدد الرسائل : 358
    العمر : 33
    الجنسية : Tunisien
    السٌّمعَة : 1
    نقاط : 16059
    تاريخ التسجيل : 22/06/2008

    رد: أول دورة من نوعهــا على صعيد المواقع العربية : دورة Python

    مُساهمة من طرف DJONI في الأحد 8 مارس - 13:29

    السلام عليكم و رحمة الله و بركاته

    قبل ان ننطلق في الجزء الثاني
    هذه بعض الأفكار لحل الخوارزمية المطروحة في التمارين

    اولا لحذف الحروف الغير مرغوب تستطيع استعمال طريقة مشابهة لهاته



    كود PHP:




    point=['!',':','@']

    text=""

    text=raw_input(' test :')

    sms=""

    c=len(text)

    i=0

    while i<c:

    if
    text[i]in point:

    sms=text.replace(text[i],'')

    i+=1


    print sms









    تستطيع ادراج هذا الكود في دالة و تسميها مثلا remove_char() و تقوم
    باستدعائه مرة او اثنبن حتى تتمكن الدالة من حذف كل الحروف الغير مرغوب
    بها


    و لتصغير حروف الرسالة نستعمل الدالة lower
    مثال


    كود PHP:




    message=" dergr fADS ZD fbfg hbZEEZ"

    sms=message.lower()

    print
    sms









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


    كود PHP:




    trans=['&','8','@','u']

    message='you and me at 10pm'

    sms=message.replace('you',trans[3])

    print
    sms









    المطلوب منك تجد طريقة يقوم بها البرنامج باستبدال جميع الكلمات مرة واحدة

    المهم هذه بعض الأفكار المساعدة و يبقى عليكم التعديل عليها و توجيهها لكي تؤدي العمل المطلوب .
    avatar
    DJONI
    المدير العام على مجموعة مواقع STARMEDIA
    المدير العام على مجموعة مواقع STARMEDIA

    ذكر
    عدد الرسائل : 358
    العمر : 33
    الجنسية : Tunisien
    السٌّمعَة : 1
    نقاط : 16059
    تاريخ التسجيل : 22/06/2008

    مدخل إلى الدوال

    مُساهمة من طرف DJONI في الأحد 8 مارس - 13:30



    السلام عليكم و رحمة الله و بركاته

    الجزء الثاني من الدورة


    سننطلق بإذن الله في الجزء الثاني من الدورة و سنبتدئ في
    هذا الجزء بدراسة الدوال بصورة معمقة كما اننا سنرى كيفية التحكم في
    الأخطاء و تنظيم الأكواد و اشياء اخرى جميلة تحسن من اسلوبنا في البرمجة و
    تكون أول خطوة لنا نحو الإحتراف .



    الدوال
    تكلمنا سابقا عن الدوال و رأينا انها تساعدنا في تنظيم
    اكواد البرنامج خاصتا الطويلة منها بحيث اننا نقسم كود البرنامج على عدة
    اقسام ثم نقوم ببرمجة كل قسم على حدى بحيث ان هذا القسم يكون داخل دالة و
    بعد الإنتهاء نقوم باستدعاء الدوال و ترتيبها حسب البرنامج كما رأينا في
    التمرين الأول (مشاركة 40) حيث قمنا ببرمجة اربع دوال لكل دالة عمل معين
    تقوم به و في الكود الرئيسي نقوم باستدعاء هذه الدوال حسب الرغبة بل رأينا
    اننا نستطيع حفظ هذه الدوال و استدعائها متى تدعوا الحاجة و هنا يتبين لنا
    ان الدوال لها فائدة كبيرة جدا بحيث انها تسهل علينا لاعمل كما انها تختزل
    الوقت في كتابة الأكواد بحيث انك تقوم ببرمجة الدوال التي ترى انك تحتاجها
    دائما ثم تحفظها في ملف و تستدعيها في أي مرة تحتاجها.
    و ل الدوال فائدة اخرى تتجلى في المساعدة على اكتشاف الأخطاء افرض مثلا
    انك كتبت برنامج يحتوي على 200 سطر و حدث خطا في هذا البرنامج كيف ستجد
    مصدر الخطأ سيكون هذا كاتلبحث عن ابرة في قومة قش فلو استعملت الدوال في
    الكود لن يتطلب اكتشاف الخطأ و قتا كبيرا لأنك تذهب مباشرتا الى الدالة
    التي لا تؤدي عملها و تقوم بتعديلها .


    ويوجد نوعان من الدوال
    الدوال الفارغة (الإجرائات procedure) هذه الدوال ا وان صح التعبير الإجرائات تقوم بعمل معين دون شرط ان تعطي نتيجة معينة أي انها لا تعود على قيمة معينة
    مثلا



    كود PHP:




    def add():

    a=raw_input(' A : ')

    b=raw_input(' B :')

    print
    "res : ",a+b


    print"***************"

    add()








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



    كود PHP:




    def add(x,y):

    return
    x+y

    print"***************"

    a=int(raw_input(' A : '))

    b=int(raw_input(' B :'))

    print
    add(a,b)








    الفرق الأول يكمن في تعريف الدالة في المرة الأولى
    كتبنا def add() بحيث ان الأقواس بقية خالية و نسمي ما بين الأقواس
    بالتعديلات الخاصة بالدالة parameter
    و يكون جسم الدالة كالتالي



    كود PHP:




    def function-name( parameter-list ):

    statements








    اولا نقوم باختيار اسم الدالة (يجب ان يكون الإسم غير محجوز من طرف اللغة)
    ثم نضع التعديلات التي نريدها (حسب عمل الدالة )
    بعد ذلك نقوم ببكتابة جسم الدالة و في الأخير ستعطينا الدالة النتائج
    المرجوة و في هذه المرحلة ستكونم قييمة الدالة مساوية لقيمة النتيجة التي
    تعود عليها
    نعود للمثال السابق


    اولا اعطينا اسما للدالة add ثم ادرجنا متغيرين x,y الذين يعتبران parameter للدالة add
    و هنا الدالة ستعود على قيمة x+y أي ان الدالة ستحجز قيمة جمع x مع y
    و عند استدعاء الدالة نقوم بتعويض x,y بالمتغيرات التي ادخلها المستخدم
    هنا ستقوم الدالة add بتعويض a,b مكان x,y أي ان الدالة add تصبح على
    الشكل التالي



    كود PHP:




    def add(a,b):

    return
    a+b








    و الدالة return كما يدل اسمها تجبر الدالة على الحجز ناتج الجمع و لهذا نقول ان الدالة add تعود بقيمة الجمع
    مثال آخر



    كود PHP:




    def count_name(name):

    c=0

    c
    =len(name)

    return
    c


    user
    =raw_input('Name : ')

    print
    count_name(user)









    تقوم الدالة count_name بحساب عدد احرف اسم او عبارة
    استعملنا البارامتر name الذي سيعوض عند استدعاء الدالة و قمنا بحساب عدد
    احرف name كأنه متغير حقيقي و في النهاية تعود الدالة بقيمة c الذي يحتوي
    على عدد حروف البارامتر
    و عند الاستدعاء نعوض البارامتر بالمتغير الذي نريد و ستقوم الدالة بحساب عدد احرف المتغير و طباعة عدد أحرفه
    و البارامتر يستطيع ان يكون واحد او اثنين او ثلاثة او اكثر حسب الحاجة و
    يجب علينا الحذر عند التعامل معه لان مجموعة البارمترات يجب ان تلبي رغبات
    الدالة أي تشمل كل ما تحتاجه الدالة لكي تؤدي عملها على اكمل وجه


    لا حظوا المثال التالي


    كود PHP:




    def max_value(a,b,c):

    mx=a

    if b>mx:

    mx=b

    if c>mx:

    mx=c

    return mx

    w
    =int(raw_input(' A : '))

    y=int(raw_input(' B : '))

    z=int(raw_input(' C : '))


    print
    "************** result******************"

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









    نفس الترتيب نقوم بتسمية الدالة ثم نعطيها البارامترات التي تحتاجها أو بالأحرى التي نحتاجها نحن
    ثم نقوم بكتابة الكود عادي جدا كأننا نتعامل مع متغيرات حقيقية
    و في النهاية تعود الدالة على النتيجة المرجوة وهي هنا تتمثل في أكبر قيمة من بين ثلاث قيم
    و عند استدعاء الدالة نعوض البارامترات بالمتغيرات التي ادخلها المستخدم
    ثم نقوم بطبعه النتيجة معتمدين على القيمة التي تحتويها الدالة (التي تعود
    إليها ).


    اظن ان فكرة الدوال بدئت تتضح قليلا و نضع تلخيص لما رايناه
    الإجراء عبارة عن دالة فارغة أي انها لا تعود على قيمة معينة
    الدالة تأخذ بارامتلرات و تعود على نتيجة معينة
    و نستطيع ان نتعامل مع الدالة كأي متغير آخر عكس الإجراءات
    مثلا



    كود PHP:




    def add(x,y):

    return
    x+y

    print"***************"

    a=int(raw_input(' A : '))

    b=int(raw_input(' B :'))

    print
    add(a,b)

    print
    add(a,b)*2








    لا حظوا لقد قمنا بضرب الدالة في 2 لأن الدالة في هذه المرحلة تعبر عن القيمة التي تحتويها
    كما أننا نستطيع التعامل معها بباقي المعاملات الرياضية و حتى في الجمل الشرطية

    كود PHP:




    def add(x,y):

    return
    x+y

    print"***************"

    a=int(raw_input(' A : '))

    b=int(raw_input(' B :'))

    print
    add(a,b)

    if
    add(a,b)>20:

    print
    " the result of A + B is bigger than 20"








    كما اننا نستطيع ان نسند قيمة الدالة للمتغير آخر

    كود PHP:




    y=add(a,b)








    و لهذا تجد ان استعمال الدوال شائع جدا حتى مع
    امكانية استعمال البرمجة الموجهة oop لان الدوال بسيطة مقارنتا مع class
    method… كما انها تتيح لنا عدة امكانيات و لغة البايثون كما ذكرت سابقا
    تتيح لك البرمجة بالنمطين معا على حسب اختيارك .



    طبعا هذه مقدمة بسيطة عن الدوال و مدخل سريع لهذا القسم الهام من البرمجة مازلنا نواصل مع الدوال في الدروس القادمة بإذن الله .

    تم بحمد الله












    avatar
    DJONI
    المدير العام على مجموعة مواقع STARMEDIA
    المدير العام على مجموعة مواقع STARMEDIA

    ذكر
    عدد الرسائل : 358
    العمر : 33
    الجنسية : Tunisien
    السٌّمعَة : 1
    نقاط : 16059
    تاريخ التسجيل : 22/06/2008

    المتغيرات في الدوال

    مُساهمة من طرف DJONI في الأحد 8 مارس - 13:32



    السلام عيكم و رحمة الله و بركاته

    نواصل مع الدوال و هذه المرة سنتحدث عن المتغيرات في الدوال و الموضوع مهم جدا لدى ارجوا منكم اخواني الكرام التركيز جيدا .

    عند استعمال الدوال يتغير استعمال المتغيرات بالطريقة التي اعتدنا عليها لأن المتغيرات تنقسم إلى قسمين
    المتغيرات الكلية global variable و تعرف هذه المتغيرات في الكود الرئيسي
    و تستطيع أي دالة استعمالها لأنها متغيرات كلية تابعة للبرنامج ككل
    مثلا


    كود PHP:




    x=2

    def a
    ():

    print
    x

    a
    ()








    كما نلاحظ عرفنا المتغير x في الكود الرئيسي و لقد
    استعملنا هذا المتغير داخل الدالة a دون مشاكل لأن المتغير x متاح لكل
    الدوال المكتوبة داخل كود البرنامج
    المتغيرات الداخلية local variable تسمى هذه الدوال بالدوال الداخلية
    لأنها تعرف داخل دالة و ليس في الكود الرئيسي و تستطيع الدالة التي عرف
    المتغير داخلها استعمال هذا المتغير بكل حرية و لكن الدوال الأخرى لا
    تستطيع استعمال هذا المتغير لأنه تابع للدالة التي عرف داخلها

    مثال


    كود PHP:




    def a():

    x=22

    print x

    def b
    ():

    print
    x*2

    a
    ()

    b()








    عند تنفيد هذا الكود سيرسل المفسر رسالة خطأ كالتالي

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

    و معنى الرسالة ان المتغير X غير معروف و سبب لنا هذا الخطأ الدالة b
    لأننا استعملنا المتغير x داخلها و ليس لها الصلاحية باستعمال هذا المتغير
    لأنه تابع للدالة a و هذه هي المتغيرات الداخلية local
    إذا نلخص
    تنقسم المتغيرات إلى قسمين المتغيرات ذات النوع global و هي التي تعرف في
    الكود الرئيسي و تستطيع أي دالة استعمالها و القسم الثاني يعتبر هي
    المتغيرات ذات النوع local و هي المتغيرات التي تعرف داخل الدوال و لا
    تستطيع الدوال الأخرى استعمالها لأنها تبقى تابعة للدالة التي عرفت داخلها


    الآن نركز قليلا
    نحن لما نعرف متغير في الكود الرئيسي و ننشئ دالة قطعا ستستطيع هذه الدالة
    التعامل مع هذا المتغير و لكن هل تستطيع التغير في محتواة ؟؟
    لا حظوا المثال التالي



    كود PHP:




    def a():



    print
    x*3

    x
    =2

    a
    ()

    print
    x








    انظروا مع ناتج هذا الكود سيطبعه البرنامج في المرة الأولى 6 و هذا هو الجزء التابع للدالة و في المرة الثانية يطبع 2
    لماذا ؟؟
    من المفروض ان يطبع 6 و في المرة الثانية 6 لأننا نتعامل مع متغير واحد أي
    ان الدالة a قد غيرت محتوى المتغير x فلماذا يعود لأصله في المرة الثانية
    ؟؟ !!
    هنا نستنتج ان الدالة لا تستطيع تغير محتوى المتغير حتى و ان كان متغير global سيحدث التغير داخل الدالة فقط ثم يعود لأصله
    مثال آخر



    كود PHP:




    def a():



    print
    x*3


    def b
    ():

    print
    x*9

    x
    =2

    a
    ()

    b()

    print
    x








    لاحظوا كل دالة استطاعة التعامل مع المتغير x و
    استطاعة تغير محتواه و لكن بصفة مؤقتة فقط او بالأحر استطاعة التغير عليه
    داخل صلاحياتها فقط اما خارج حدود الدالة سيعود المتغير لأصله و هي القيمة
    2
    نلخص مرة أخرى
    تستطيع الدالة التعامل مع المتغير global بكل حرية و لكنها لا تستطيع تغير
    قيمته بصورة نهائية و انما تستطيع التغير في قيمته داخل صلاحيتها فقط ثم
    يعود المتغير إلى قيمته الأصلية و هي التي عرف بها في الكود الرئيسي .
    الآن ماذا لو احتجنا لتغير قيمة المتغير داخل دالة كيف سنعطي الصلاحية لهذه الدالة لتغير قيمة المتغير بصورة نهائية ؟؟
    هنا يتوجب علينا استعمال العبارة global داخل الدالة لكي نبين للمفسر ان هذه الدالة لها الصلاحيات الكاملة في تغير محتوى المتغير
    مثال


    كود PHP:




    def a():

    global
    x

    print" global x in function a()",x

    x
    *=10

    print"global x*10 in function a()",x


    x
    =7

    print "global x in code of programme before fun a()",x

    a
    ()

    print
    "global x in code of programme after fun a()",x








    لا حظو جيدا
    اولا طبعنا رسالة تبين قيمة x قبل استدعاء الدالة a() =========>7
    ثانيا طبعنا رسالة تبين x داخل الدالة a لكن قبل التغير 7 <========= x
    ثالثا طبعنا رسالة تبين x داخل الدالة a بعد التغير 70<============x
    رابعا طبعنا رسالة تبين x خارج الدالة a (في الكود الرئيسي) بعد استدعاء الدالة a x=====>70
    و هنا نكون قد تعلمنا كيف نغير في قيمة المتغير الرئيسي داخل الدالة بصورة نهائية

    ملاحظة :
    ليس بالضرورة تغير قيمة المتغير داخل الدالة بصورة نهائية في كل مرة و
    انما عند الحاجة فقط أي اذا كانت تحتاج تغير قيمة المتغير داخل الدالة
    بصورة نهائية فاستعمل العبارة global اما اذا كنت لا تحتاج هذا التغير
    النهائي فاستعمل الطريقة التي رأيناها سابقا
    أي لك الخيار في استعمل هذه الطرق حسب الحاجة .

    و هنا الخبرة و الممارسة تلعب دور في اختيار نمط العمل و ستكتسب هذه
    الخبرة من كتابة الكثير من الأكواد لأن مهمة كتابة كود خالي من الثغرات
    تبدئ من اختيار المتغيرات و تحديد انواعها و التعامل بهذه المتغيرا بواسطة
    الدوال


    مازلنا مع الدوال و سندرس في المرة القادمة بإذن
    الله بعض الطرق الرائعة للتعامل مع الدوال و قبل هذا يجب عليك اخي القارئ
    فهم هذا الدرس جيدا لأن الدوال تعتبر من اهم النقاط و طريقة فهمك لها
    ستؤثر على كل مشوارك المستقبلي .

    تم بحمد الله











    avatar
    DJONI
    المدير العام على مجموعة مواقع STARMEDIA
    المدير العام على مجموعة مواقع STARMEDIA

    ذكر
    عدد الرسائل : 358
    العمر : 33
    الجنسية : Tunisien
    السٌّمعَة : 1
    نقاط : 16059
    تاريخ التسجيل : 22/06/2008

    رد: أول دورة من نوعهــا على صعيد المواقع العربية : دورة Python

    مُساهمة من طرف DJONI في الأحد 8 مارس - 13:32

    مثال شامل يوضح لنا المتغيرات بصورة احسن


    كود PHP:




    def a():

    x = 25

    print "\nlocal x in a is", x, "after entering a"

    x += 1

    print "local x in a is", x, "before exiting a"


    def b():

    global
    x

    print "\nglobal x is", x, "on entering b"

    x *= 10

    print "global x is", x, "on exiting b"

    print "global x is", x


    x
    = 7

    print "global x is", x

    a
    ()

    b()

    a()

    b()

    print
    "\nglobal x is", x








    استعملنا في هذا المثال دالتين
    الدالة a و الدالة b
    عرفنا متغيرين و المتغيرين لهما نفس الإسم x
    المتغير الأول تابع للدالة a()


    كود PHP:




    def a():

    x = 25

    print "\nlocal x in a is", x, "after entering a"

    x += 1

    print "local x in a is", x, "before exiting a"









    يبتدئ بقيمة 25 ثم يضاف لهذه القيمة 1
    و طبعا سيكون ناتج الطباعة 25 في المرة الأولى و 26 في المرة الثانية
    المتغير الثاني متغير X أيضا لكنه من نوع global و يبتدئ بقيمة 7


    كود PHP:




    x = 7








    الدالة b() تستعمل المتغير x الخاص بالكود الرئيسي
    (global) الذي يبتدئ بقيمة 7 كما ذكرنا سابقا و تقوم هذه الدالة بضرب
    المتغير في 10
    و ناتج الطباعة سيكون 7 في المرة الأولى و 70 للمرة الثانية و الثالثة


    و في الكود الرئيسي استدعينا الدوال وفق الترتيب التالي

    كود PHP:




    print "global x is", x

    a
    ()

    b()

    a()

    b()

    print
    "\nglobal x is", x








    في المرة الأولى سيطبع 7 عادي
    في المرة الثانية سيكبع 25 و 26 لأننا استدعينا الدالة a() التي لا تتعامل
    مع المتغير الرئيسي بل تستعمل متغير خاص بها و بالرغم من ان الإسم متشابه
    (X) فالمتغير يعتبر ان x التابعة ل a() مختلفة عن x التابعة للدالة b() و
    الكود الرئيسي

    في المرة الثانية سيطبع
    7 و 70 ثم 70 و هنا نكون قد عدلنا على المتغير الرئيسي x global و لم تبقي قيمته 7 بل تحولت إلى 70

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

    في المرة الاخيرة لا يطبع 7 70 70 لماذا ؟؟
    لأننا قلنا أن المتغير x قد تغيرت قيمته تماما و اصبحت 70 بدل 7
    أي انه في هذه المرة سيطبع 70 700 700


    ارجوا ان يكون هذا الشرح البسيط قد قرب الأمور إليكم و أجاب على بعض تساؤلاتكم
    avatar
    DJONI
    المدير العام على مجموعة مواقع STARMEDIA
    المدير العام على مجموعة مواقع STARMEDIA

    ذكر
    عدد الرسائل : 358
    العمر : 33
    الجنسية : Tunisien
    السٌّمعَة : 1
    نقاط : 16059
    تاريخ التسجيل : 22/06/2008

    التعامل مع الأخطاء try-except

    مُساهمة من طرف DJONI في الأحد 8 مارس - 13:51



    تسير الأخطاء
    تعتبر الأخطاء في البرمجة من أكبر الأخطار التي تهدد البرنامج سواء من الجهة الأمنية (الثغرات) أو من جهة الفعالية (السرعة و الثبات)
    كما أن الأخطاء تسبب الإحباط للمبرمج و تنقص من فعاليته و تركيزه أثناء
    كتابة الكود و هذا ما يؤدي إلى انخفاض مستوى انتاجية المبرمج و تهدر وقته
    و جهده
    و المبرمج المتمكن هو الذي يستطيع كتابة أكواد بأقل عدد من الأخطاء
    و المبرمج المحترف هو الذي يستطيع كتابة أكواد دون أخطاء تقريبا و يستطيع
    أن يكتشف الأخطاء بنوعيها (سنتكلم عن الأنواع) من النظرة الأولى للكود
    و في الحقيقة يعتبر هذا المبرمج من صنف المطورين و لقد تكلمت في المقال عن الفرق بين المبرمج و المطور
    و تنقسم الأخطاء في البرمجة إلى نوعين
    الأخطاء الكتابية : و هي الأخطاء الكتابية
    في الكود كنسيان حرف أو كتابة عبارة مجهولة لا تحتويها اللغة مثلا في
    العوض ان نكتب 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 "", line 1, in ?

    NameError: name 'value' is not defined








    النوع الثاني –التقسيم على الصفر- ZeroDivisionError
    يحدث هذا الخطئ عند تقسيم عدد على الصفر و قد يرى البعض أنه خطئ مستحيل أن
    نقع فيه لأن الكل يعلم أنه لا يوجد عدد يقسم على الصفر لكنه ممكن الحدوث
    في قلب البرنامج فمثلا لو تطلب منا عمل حلقة و العدد المقسم عليه ينقص
    بدرجة كل مرة فهنا ممكن ان ننسى هذا الخطئ
    رسالة الخطئ

    كود PHP:




    Traceback (innermost last):

    File "", line 1, in ?

    ZeroDivisionError: integer division or modulo by zero








    النوع الثالث – الأخطاء الكتابية- SyntaxError
    كما رأيناها سابقا هي أخطاء تحدث عند الخطئ في كتابة عبارة معينة
    رسالة الخطئ


    كود PHP:




    SyntaxError: invalid syntax








    النوع الرابع –أخطاء الفهرس- IndexError
    تحدث هذه الأخطاء عند التعامل مع السلاسل أو القوائم و يحدث خطئ في تحديد
    الفهرس او رتبة العنصر مثلا تكون عندنا سلسلة تحتوي على 5 عناصر و نحدد
    العنصر رقم 9
    رسالة الخطئ

    كود PHP:




    Traceback (innermost last):

    File "", line 1, in ?

    IndexError: list index out of range








    النوع الخامس-أخطاء عناصر القواميس- KeyError
    هذا النوع من الأخطاء متعلق بالقواميس و يحدث هذا النوع عند تحديد عنصر غير موجود بالقاموس
    مثال


    كود PHP:




    aDict = {'host': 'earth', 'port': 80}

    print
    aDict['server']








    رسالة الخطئ

    كود PHP:




    Traceback (innermost last):

    File "", line 1, in ?

    KeyError: server








    النوع السادس-أخطاء المدخلات و المخرجات- IOError
    هذا النوع من الأخطاء شائع كثيرا و يحدث عندما يوجد خلل في مدخلات المستخدم أو في التعامل مع الملفات و قواعد البيانات
    فمثلا لو طلبنا من المستخدم ادخال عدد و ادخل حرف او طلبنا من المفسر فتح
    ملف و هذا الملف لا يوجد بالجهاز او طلبنا منه حجز بينات و لا يوجد اتصال
    مع قاعدة البيانات.....
    طبعا لكل حالة من هذه الحالات رسالة معينة لكنها تشترك ب IOError فكلما تجد هذه العبارة اعلم ان الخطئ يكمن في المدخلات او المخرجات
    و هذا مثال يوضح ذلك بحيث اننا طلبنا من المفسر فتح ملف غير موجود أصلا بالجهاز
    رسالة الخطئ


    كود PHP:




    f = open("blah")

    Traceback (innermost last):

    File "", line 1, in ?

    IOError: [Errno 2] No such file or directory: 'blah'








    النوع السابع- اخطاء اسناد الكلاس- AttributeError
    هذا النوع من الأخطاء مرتبط بالبرمجة الموجهة بحيث انه يحدث عندما نسند لكلاس ميثود غير معرفة أو غير موجودة أصلا.
    سنرى هذا مستقبلا
    رسالة الخطئ


    كود PHP:




    Traceback (innermost last):

    File "", line 1, in ?

    AttributeError








    هنا نكون قد بينا كل انواع الأخطاء البرمجية و يفيدنا هذا في معرفة
    سبب الخطئ و تحديد مكانه كما سيفيدنا أيضا معرفة نوع الخطئ في اختيار
    الرسالة المثلى للخطئ كما سنرى.













      الوقت/التاريخ الآن هو الثلاثاء 16 يناير - 16:39