======================================================================================= ============================ Start Programing using Python ============================ ============================ Course Prepared by: StrikerX ============================ ======================================================================================= السلام عليكم ورحمة الله وبركاته لاي استفسـارت او اسئلـه بامكـانك وضعهـا هنـا : http://www.linuxac.org/forum/showthread.php?t=1686 ويمنـع وضـع الاسئله هنــا . الدورة إهداء لكل من St0rm, NouR,hackobacko,Safa7,ACiD,Raiden,DarkLinux,BlackR ay,Ne0,r0ck MaSter ,MySQL ,Pioneer,Binary Darken,Spidy, All Of SG ,fakir,and Linuxac احد إبداعات الأنظمة الحره فبايثون حققت المعادلة الصعبه بين المرونه والقوة والحريه .. بتقدر تدعمها بدون اى مقابل تتميز بسهولة القواعد بتاعتها , كأنها إنجلش بالظبط سهلة التطوير سهولة إستخدام الكائنات ( سنتعرض لها إن شاء الله قريبا ) الدخول بالعديد من التطبيقات كالويب وإدارة النظم وتطبيقات النوافذ وغيرهم كتير :) اللغة ذات اصل هولندى ,, تبع الطواحين وفان باستن :P إسم كاتب اللغة Guido van Rossum صحيح سبب تسمية اللغة بهذا الإسم على إسم برنامج كانت بتقدمه ال CNN إسمه Monty python's Flying Circus فهى لغة تفسيريه تحتاج مفسر للأكواد Interpreter للتعامل معاها إختار الإصدار حسب نظام تشغيلك : http://www.python.org/download/ تتميز بأنها portable اى تعمل على العديد من الأنظمة مما يدل على قوتها .. لغة لاتعمل على 3 انظمة تشغيل مختلفه ع الأقل = لغة ضعيفه من الانظمة التى تعمل عليها اللغة Windows, Linux/Unix, Mac OS X, OS/2, Amiga, Palm Handhelds, and Nokia mobile phones وتأتى اللغة بكم هائل من ال modules ده غير اللى إنت تقدر تضيفه بنفسك ... اهم شئ لك هو قراءه ال Documentation الخاصه باللغة http://python.org/doc ------------------------------------------------------------------------------------------------------------------------------ بيئة التشغيل :: إذا كنت مستخدم لينكس ياريت تراجع الموضوع ده http://www.diveintopython.org/instal...on/source.html بالنسبة لمستخدمى ويندوز .. هتستب الإصدار عادى جدا ولكن تضيف المسار بال PATH وده عن طريق Start >>> Run >>> CMD وتكتب set path=%path%;C:\python25 لاحظ إن C:\python25 هو المسار اللى تم التستيب فيه ... تقدر تغيره حسب المسار اللى تم فيه تستيب البايثون إفتح بعد كده Start >>> programs >>>Python25 هتلقى قدامك :: python docs وده بتحتوى على الوثائق الخاصة باللغة Interactive Mode وده طور ( مود ) تفاعلى .. بحيث إنك تكتب الأمر ويتنفذ لحظتها python IDLE , python Command line ف طريقة تانيه للتعامل وهى Python Scripts وهى إنك تكتب البرنامج بأى محرر نصوص text editor بس ياريت يكون متقدم شوية مش تقولى ال Notepad مثلا ارشحلك ال Notepad++ على نظام Windows http://notepad-plus.sourceforge.net/uk/download.php وعلى Linux ... عندك مليون text editor انا بحب vim ... اى محرر نصوص ينفع .. وللى عايز واحد سهل ف gedit و kate ------------------------------------------------------------------------------------------------------------------------------ برنامجك الأول مع بايثون إفتح محرر النصوص الخاص بك كما تحدثنا ..وإكتب التالى كود PHP: #!usr/bin/python #this is My first program with python print "Hello ,World !" قم بحفظ الملف بإسم Hello.py شرح الكود بإختصار :: * اول سطر يسمى تعليق خاص .. ده بيتم فيه تحديد مسار المفسر الخاص بالبايثون ، لو إنت شغال مثلا سكريبت بيرل هيكون كود PHP: #!usr/bin/perl تقدر تستبدلها ب كود PHP: #!bin/python * تانى سطر بالبرنامج يسمى تعليق Comment وده بيستخدم ف تسهيل قراءة الكود البرمجى .. يعنى إذا كتبت برنامج من سنتين وجيت تقراه .. التعليقات ده بتسهل عليك التذكر .. وبرده لو ف حد بيطلع ع الكود .. التعليقات ده بتوضحله العديد من الأشياء * تالت سطر ... إستخدمنا جملة الطباعة الخاصه بالبايثون وهى print لتقوم بطباعة كلمة Hello ,World! على سطر الأوامر *قم بإعطاء التصاريح لتنفيذ البرنامج عن طريق كود PHP: chmod x+w Hello.py لن تعطى التصاريح ف ويندوز ::bleh قم بالتنفيذ بالأمر التالى كود PHP: python Hello.py ال output الناتج :: Hello,World! ------------------------------------------------------------------------------------------------------------------------------ المتــغيرات ماهى المتغيرات : هى اماكن محجوزة بالذاكرة وتخزن داخلها قيم تستخدمها ف برنامجك ملحوظه : بايثون لاتهتم بتعريف نوع المتغير ! يعنى مش زى السى او الجافا لازم تذكر int ,char ,...... كل ماعليك هو ذكر إسم المتغير و إعطاؤه قيمة الصيغة العامة رمز: variable=value كود PHP: x=5 s="Hello" string='hello' string2='''Hello world , python r0x''' إكتب السكريبت التالى ولاحظ النتيجه كود PHP: #!bin/python print "The X variable equals ",x print "The string equals ",string print "string 2 equals ",string2 لاحظ معى ان الأرقام التى تسند للمتغير لاتوضع بين علامتى تنصيص ! لاحظ :: السلاسل النصية strings يجب وضعها بين علامات تنصيص وهنا يوجد فرق بين كل نوع ' ' و " " و ''' ''' نتكلم عن إستخدام عملى كود PHP: s='hi ,i am StrikerX' s="Hi , i'm StrikerX" لاحظ هنا إنك إذا إستخدمت علامة ال ' ف المثال الأول وخليته كده 'Hi , i'm StrikerX' البايثون هتعتبر إن ال string إنتهت عند Hi , i وبيعطيك رسالة error ف الباقى ولكن إذا إستخدمت " " بتقدر تستخدمها براحتك كما بالمثال كود PHP: s="Hi , i'm StrikerX" بالنسبة للتنصيص الثلاثى :: ''' ''' ... ده ف حالة لو السلسلة اكثر من سطر .. وده بتستخدم غالبا ف ال Help بتاعت البرنامج او الأوبشنز مثل كود PHP: Options=''' 1- Start 2-edit 3-exit 4-help ''' print Options الآن سنتعامل مع الإدخال والإخراج I/O اى Input/Output ف احيان كثيرة البرنامج لايحتاج إضافات من المستخدم .. بمعنى إنه يشغله ويتركه .. لكن بتلاحظ حاليا وف كثير من البرامج بيطلب منك إدخال قيم وهو بينفذ عمله عليها يعنى مثلا ... ف برنامج مصمم على إنه يقول Hello User لكن انا عايز البرنامج ده يبقى متفاعل معايا بمعنى يسألنى انا مين إستفسار من البرنامج Who are u ? هنا قمت بإدخال قيمة بتدل على شخصيتى Hello هذا هو الناتج النهائى تطبيق بسيط للتوضيح :: كود PHP: #!bin/python #example for I/O user=raw_input("Who are u ? ") print "Hello",user الشرح ... اول شئ إستخدمنا دالة الإدخال raw_input بحيث إن المدخلات اللى هندخلها يتم إضافت علامت التنصيص بما إن المدخل عبارة عن string سلسله نصيه يعنى ... ويتم تخزين المدخلات بالمتغير user تقدر تستخدم الدالة الرئيسية input بس لما تيجى تدخل البيانات تضعها انت بين علامتى تنصيص وإلا ستجدد خطأ اثناء التنفيذ ... ثم بنستخدم جملة الطباعه print لطباعة كلمة Hello مضاف إليها القيمة المخزنة داخل المتغير user ------------------------------------------------------------------------------------------------------------------------------ سؤال ؟؟؟ لو المدخلات عدديه مثلا مسألة لحل مساحة أى مربع يعنى البرنامج هيطلب قيمة العرض و الطول بالبايسك بتتكتب كده مثلا INPUT x INPUT y z=x*y print z كيف يكتب بالبايثون ؟ طب بداية الكود بالبايثون هيكون كده كود PHP: length=input("Enter the length: ") width = input("Enter the width: ") area=length*width print area اول حاجه المتغير length يعبر عن الطول وبما إنه رقم فلن نضعه بين " " فإستخدمنا input ثانيا المتغير width يعبر عن العرض المتغير area يعبر عن مساحة المستطيل اللى = الطول * العرض ------------------------------------------------------------------------------------------------------------------------------ Strings Part 1 السلاسل النصية ... ال Strings هى عبارة عن مجموعه احرف او كلمات او جملة ... يتم وضعها بين علامتى تنصيص S=' ' هذا متغير يشمل سلسلة نصية فارغة S=" Hello ,World" >> هذا متغير يشمل كلمة Hello World S=''' ……… ''' ده بلوك ( block) لأنها تقدر تمتد لأكثر من سطر كود PHP: S1+S2 = >>> هنا يتم دمج سلسلتين نصيتين S1 ,S2 بإستخدام المعامل + S1='Hello' S2='World' >>>S1+S2 HelloWorld S*n بيتم تكرار السلسلة S عدد n من المرات كود PHP: >>>S='Hello World ! " >>>S*4 'Hello World ! Hello World ! Hello World ! Hello World ! تدريب على العمليات الأساسيه كود PHP: $ python >>> len('Hello') # عدد احرف كلمة Hello 5 >>> 'Hello' + 'World' # دمج سلسلتين نصيتين 'HelloWorld' >>> 'Hello!' * 4 # تكرار السلسلة 4 مرات ' Hello! Hello! Hello! Hello!' دالة len تقوم بإعادة عدد ولنا عودة تفصيليه ليها إن شاء الله ولكن يكفينا الآن ان كود PHP: len(string) بتعنى القيام بعد احرف السلسله string واعادت قيمتها نيجى لمثال آخر كود PHP: >>>string = Hello World " >>> for char in string : print char الناتج هيكون عرض كل الأحرف رأسيا كود PHP: H E L L O W O R L D كود PHP: >>>string = Hello World " >>> for char in string : print char, # لاحظ الكوما وضعنها لجعل الحروف على سطر واحد # H e l l o w o r l d الشرح ليها .. ان لكل حرف ف السلسلة String قم بكتابته فيقوم هو بكتابه كل الأحرف داخل string وهى حروف جملة Hello world كود PHP: >>> H in ٍString # it returns 1 or 0 1 ودى قمنا بإختبار هل حرف H موجود داخل السلسه String او لأ ف فى حال وجوده يعاد إلينا القيمة 1 وف حال غير ذلك يعاد 0 ------------------------------------------------------------------------------------------------------------------------------ Strings2 ارجو إن يكون الجزء الأول مفهوم ... ندخل بالجزء الثانى كود PHP: >>> s = Hello " >>>s[0] # تم إعادة القيمة لأول حرف بالسلسلة وهو H H >>>s[1] # يتم إعادة ثانى حرف وهو e e >>>s[-2] l # يتم إعادة ثانى حرف للسلسله من اليمين إلى اليسار >>>s[1:3] # بيتم إعادة الأحرف من الحرف الثانى على اليسار حتى الحرف الرابع دون إشتماله # el >>>s[1:] # بتقوم بإعادة احرف السلسلة من اول الحرف الثانى على اليسار إلى آخر السلسله # ello >>>s[:-1] # يتم إعادة جميع الأحرف من الحرف التانى على اليمين لآخر السلسلة# hell مش تستغرب ... هما دول الجزء التانى بس ------------------------------------------------------------------------------------------------------------------------------ ملاحظات بسيطة خاصة باالبايثون مثلا رمز: n=0 n=n+10 فى هذا الكود قمنا زيادة n بمقدار = 10 تستطيع ان توفر على نفسك وتكتبه هكذا كود PHP: n +=10 كود PHP: x = 3 x = x**2 هى نفسها كود PHP: x ** = 2 نيجى لشئ آخر ... مثلا هذا الكود رمز: name = raw_input("Ur name :") print "Ur name is ", name هذا الكود هو ماتعودنا عليه اثناء تعاملنا سابقا ... وليس بيه اى خطأ هذه مجرد طريقة اخرى للكتابة وهى بإستخدام + وهى كما اسلفنا بالذكر تسمى عملية ال Concatenation نيجى بقى للى يهمنى وهو عملية إرجاع القيمة كود PHP: print "Ur name is %s" %name هذا الكود يعنى إن ف متغير نصى هيحل محل %s واخبرنا ان قيمته نصية string هتكون عائدة من السلسلة name سامعك وإنت بتقول لو إستبدلنا %s دى %f ده بتعنى إن قيمته هتكون float وهكذا بنفس النظام ... وبردو لو %i هتعنى إن القيمة هتكون integer تابع الكود التالى كود PHP: >>> x = 15 >>> print " x value = %i " %x رمز: X value =15 مثال تطبيقى عليها كود PHP: >>> Distro, since = 'Slackware', 3 >>> print "i 've been Using %s for %i years now" %(Distro, since) i ve been Using Slackware for 3 years now تعليق على المثال السابق كود PHP: Distro, since = 'Slackware', 3 قمنا بتعريف متغيرين على نفس السطر المهم تفصل بينها بالكومه , كود PHP: print "i 've been Using %s for %i years now" %(Distro, since) قمنا بصياغة النص كما نريد وتركنا اماكن التى ستحل محلها المتغيرات Distro, since وقمنا بعمل إرجاع للقيمة داخل النص بإستخدام %( , ) ارجو إن يكون الكلام واضح ولنا عودة اليوم إن شاء الله مع Lists ------------------------------------------------------------------------------------------------------------------------------ بعتذر عن التأخر بالرد لظروف خاصة .. المهم تابع معى كود PHP: for x in 'Hello' : print x لاحظ ان القسم التانى من الكود هو جزء من for وليتم إثبات الجزئية بيتاخد مسافة عشان تبقى باينه إنها كده for : do ولكن فى حال إننا مش اخدنا مسافة ده بيعنى إننا بدأنا بأمر تانى دون ان نقوم بإنهاء for والأمر اللى بداخلها كود PHP: for x in 'Hello' : print x ------------------------------------------------------------------------------------------------------------------------------ تقدر تستخدم رمز: int(raw_input(" " ) ) لتحويل السلسة لعدد صحيح وإذا احببت إنك تخليها raw لما هتستخدم if هتضع الرقم بين علامتى تنصيص رمز: if x == '1': print 'single' ------------------------------------------------------------------------------------------------------------------------------ يمكنك ان تعمل وقت للانتظار قبل الاغلاق رمز: >>> import time >>> time.sleep(1) مكان الرقم 1 (ويعني ثانيه واحده) ادخل عدد الثواني اللي بريحك .. تحياتي ------------------------------------------------------------------------------------------------------------------------------ احد اهم انواع البيانات هى ال LISTS ماهى ال LIST او القوائم ؟؟ هى مصفوفة تشمل مجموعة من العناصر بمعنى ! [1,2,3,4,5] هذه مصفوفة من الأرقام من 1 إلى 5 كود PHP: Distros = ['Slackware','SuSE','Debian','Ubuntu','Gentoo','arabian'] هذه مصفوفة بإسم Distros وتقوم بالتعبير عن بعض التوزيعات ... لاحظ الأسم الخاص فى التوزيعة String لذا يجب وضعه بين علامتى تنصيص ! واحد هيسألنى طب وإيه الإستفادة منها ؟؟ تابع :: كود PHP: Distro_0 = 'Slackware' Distro_1 = 'SuSE' Distro_2 = 'Debian' Distro_3 = 'Ubuntu' Distro_4 = 'Gentoo' Distro_5 = 'arabian' هل تتخيل نفسك تقوم بتعريف مجموعة متغيرات بالطريقة السابقة ام بطريقة المصفوفة افضل واسرع واسهل واقل حجما ؟؟ طب ماذا عن كيفية إستخدام عناصر المصفوفة ؟؟ كود PHP: >>> print Distros # ليقم بطبع عناصر المصفوفة ['Slackware','SuSE','Debian','Ubuntu','Gentoo','arabian'] >>>print Distros[1] # هتطبع العنصر الثانى بالمصفوفة 'SuSE' >>>print Distros[0] # طباعة العنصر الأول بالمصفوفة 'Slackware' >>> len(Distros) # يقوم بطبع عدد العناصر داخل المصفوفة 6 >>>Distros.append('Fedora') # يقوم بإضافت العنصر فيدورا داخل عناصر المصفوفة >>>print Distros ['Slackware', 'SuSE', 'Debian', 'Ubuntu', 'Gentoo', 'arabian', 'Fedora'] >>> del Distros[0] # يقوم بحذف العنصر الأول من المصفوفة >>> print Distros ['SuSE', 'Debian', 'Ubuntu', 'Gentoo', 'arabian', 'Fedora'] >>> a=range(0,11,2) # عمل مصفوفة من الإعداد بين 0 حتى 11 بزيادة مقدارها 2 >>> a # طبع المصفوفة [0, 2, 4, 6, 8, 10] # الناتج >>> b=range(0,11,3) # عمل مصفوفة من الأعداد 0 إلى 11 بزيادة مقدرها 3 >>> b #طبع المصفوفة [0, 3, 6, 9] # الناتج >>> a.append(b) # adding The LIST b to The LIST a >>> a # عرض المصفوفة بعد ان اصبحت تشمل المصفوفة b [0, 2, 4, 6, 8, 10, [0, 3, 6, 9]] # الناتج >>> a[6][3] #a عرض العنصر الرابع من المصفوفة التى تحتل الترتيب السابع بالمصفوفة 9 >>>a[6][1] # a عرض العنصر الثانى من المصفوفة التى تحتل المركز السابع بالمصفوفة 3 >>> del a[6] # remove b >>> a [0, 2, 4, 6, 8, 10] >>> a.extend(b) # a دمج عناصر المصفوفتين داخل المصفوفة [0, 2, 4, 6, 8, 10, 0, 3, 6, 9] >>> >>> a.sort() # لترتيب العناصر >>> a [0, 0, 2, 3, 4, 6, 6, 8, 9, 10] >>> del a[0] # لحذف العنصر الأول من المصفوفة >>>a [0, 2, 3, 4, 6, 6, 8, 9, 10] >>> a.append(1) # إضافة رقم 1 إلى المصفوفة >>> a [0, 2, 3, 4, 6, 6, 8, 9, 10, 1] # تم الإضافة >>> a.sort() # الترتيب >>> a [0, 1, 2, 3, 4, 6, 6, 8, 9, 10] >>> a.reverse() # عكس الترتيب >>> a [10, 9, 8, 6, 6, 4, 3, 2, 1, 0] تعليق بسيط : إستخدامنا لدالة range كود PHP: range(start,end,step) هذه الدالة تقوم بإعادة مصفوفة من الأرقام محددة ببداية ونهاية فهى بتأخذ 3 معاملات start اول عدد تبدأ عنده المصفوفة end العدد الذى تنتهى عنده المصفوفة step مقدار الزيادة وفى حال عدم تحديده بتفرضه بايثون بقيمة = 1 بعض الأمثلة عليها كود PHP: >>> range(0,11) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> range(0,11,2) [0, 2, 4, 6, 8, 10] >>> range(0,100,3) [0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99] >>> range(0,10,4) [0, 4, 8] >>> هذا ماعندى اليوم بخصوص ال Lists .. بالتوفيق ----------------------------------------------------------------------------------------------------------------- ال Tuples هى مصفوفة زى ال List ولكن بتختلف عنها ف اشياء وهى إن لايمكن ليك التعديل فيها ! بمعنى إن مش فيها دالة زى append اللى تعرضنا ليها مع ال Lists كيفية تعريف ال Tuple كود PHP: Tuple1=( ) # empty tuple وده إختلاف بردو ف التعريف لأن ال List بتكون محصورة بين [ ] طب نتعرض لأمثلة ليها .. كود PHP: >>>Tuple1=(0) # لاينصح بهذه الطريقة >>>Tuple2=(2, ) # بعنصر واحد >>>Tuple3=0,1,2,3, # تشمل 4 عناصر Tuple >>>Tuple3[0] # Tuple3هتعيد لنا اول عنصر بال 0 >>>Tuple3[3] # Tuple3هتعيد لنا رابع عنصر بال 3 >>>Tuple3[1:3] # يقوم بإعادة العناصر من الثانى إلى الرابع (1,2,3) Tuple4=(0,1,2,3) # مثل اللى فوق >>>len(Tuple4) # Tuple يعيد لنا عدد عناصر ال 4 Tuple5=(1,2,(3,4)) # Tuple تحتوى على 3 عناصر اول 2 مجرد ارقام والثالث Tuple Tuple5[2][1] # اللى واخدة محل العنصر التالت Tuple بالأساسية هتعيد لينا تانى عنصر بال >>>Tuple4 =(6) # لاينصح بهذه الطريقه >>>Tuple3 + Tuple4 # لدمج العناصر معا Traceback (most recent call last): File "", line 1, in t3 + t4 TypeError: can only concatenate tuple (not "int") to tuple # لهذا قلت إن لاينصح بيها >>> Tuple4=(6, ) # هذه الطريقة السليمة >>> Tuple3 + Tuple4 (0, 1, 2, 3, 4, 6) >>> Tuple3 *2 # مرتين Tuple تكرار عناصر ال (0, 1, 2, 3, 4, 0, 1, 2, 3, 4) حقيقة لقد غفلت عن ذكر جزئية متعلقة بدالة range سقطت منى سهوا ... وقمت بإضافتها وهى كود PHP: >>>range(5) # تعيد مصفوفة من الأرقام من صفر إلى 5 نختم كلامنا بسؤال واحد ... لما نستخدم ال Tuple طالما توجد ال List ؟ هذا سؤال كتير مهم ... وانا كنت اطرحه ايضا والإجابة هى التالى .. إستخدامك لل Tuple بيعنى منع اى تغييرات عليها مهما حدث فهى لاتقبل دوال ال List فهذا يعتبر اءمن إضافة إلى السرعة .. وفوق كل هذا .. احيانا تطلب منا بعض الدوال كا apply وهى تتعامل مع ال Tuples وليس ال lists هذا الموضوع معتمد بصورة كبيره على Learning Python ----------------------------------------------------------------------------------------------------------------- برنامج بسيط ... دالتي ord, hex كود PHP: >>> ord('a') 97 بيعطينا قيمة a بجدول ال ASCII كود PHP: >>> hex(ord('a')) '0x61' بيحول قيمة ال 97 من النظام العشرى الى الست عشرى ----------------------------------------------------------------------------------------------------------------- بجانب ال List وال Tuple يوجد لدينا نوع آخر من ال Data Types ويسمى Dictionaries هذه لمن لديه تجربة مع Perl او PHP تسمى associative arrays or hashes ولمن ليس لديه تجربة سابقه معها .. فلاتتعجل .. كيفية التعريف :: كود PHP: Dictionary = { key : value } Dic1 = { } # قاموس فارغ Dic2 = { 'week' : 7 , 'month' : 30 } # قاموس من عنصرين ( مفتاحين ) >>> Dic2['week'] # week الخاصة بالمفتاح value الحصول على ال 7 >>> Dic2.has_key('week') # True or false قيمة منطقية True # week يوجد مفتاح بإسم >>> Dic2.keys() # list يقوم بإعادة جميع المفاتيح داخل ['week', 'month'] >>> Dic2.values() # List يقوم بإعادة جميع القيم داخل [7, 30] >>> len(Dic2) # تقوم بإعادة عدد العناصر داخل القاموس ... لاحظ إن العنصر = المفتاح والقيمة 2 >>> Dic2['day'] = 24 # وإعطاؤه القيمة 24 day إضافة مفتاح جديد بإسم >>> Dic2 {'week': 7, 'day': 24, 'month': 30} >>> del Dic2['day'] >>> Dic2 {'week': 7, 'month': 30} Dic3 = { 'year' : { 'month' : 30 , 'week': 7 } } # value قاموس يشمل قاموس آخر ك >>> Dic3['year']['month'] # month الحصول على قيمة 30 مثال ... المثال من Learning Python كود PHP: >>> table = {'Python': 'Guido van Rossum', ... 'Perl': 'Larry Wall', ... 'Tcl': 'John Ousterhout' } ... >>> language = 'Python' >>> creator = table[language] >>> creator 'Guido van Rossum' >>> for lang in table.keys(): print lang, '\t', table[lang] Tcl John Ousterhout Python Guido van Rossum Perl Larry Wall ----------------------------------------------------------------------------------------------------------------- السلام عليكم أخي عندي سؤال بالنسبة للقواميس و هو بخصوص ترتيب ظهور مدخلات النتائج. انظر هذا المثال : رمز: >>> myDict = {'a':1 , 'b':2, 'c':3, 'd':4, 'e':5} >>> print myDict {'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4} لاحظ أن المدخلات تخرج غير موافقة للترتيب الذي أدخلت به. لماذا؟ اخى امين ... قم بتحميل هذا الرابط : http://www.voidspace.org.uk/cgi-bin/voidspace/downman.py?file=odict.py وإكتب التالى داخل البرنامج : كود PHP: >>> from downman import * >>> od = OrderedDict() >>> od OrderedDict([]) >>> od['a'] = 1 >>> od OrderedDict([('a', 1)]) >>> od['b']= 2 >>> od OrderedDict([('a', 1), ('b', 2)]) >>> od['d']= 4 >>> od OrderedDict([('a', 1), ('b', 2), ('d', 4)]) >>> od['c']=3 >>> od OrderedDict([('a', 1), ('b', 2), ('d', 4), ('c', 3)]) >>> od.sort() >>> od OrderedDict([('a', 1), ('b', 2), ('c', 3), ('d', 4)]) >>> هذا النوع من البيانات ليس اساسيا بالبايثون ولكنه موجود وبدلا من عمل قاموس بيتم عمل قاموس منتظم .. وتستطيع إستخدام بعض الخواص من المصفوفات معه ك sort ارجو ان يكون ساعدك هذا الحل .. السلام عليكم . ------------------------------------------------------------------------------------------------------------------------------ بسم الله الرحمن الرحيم بداية اعتذر عن التقصير بسبب الدراسة فلايوجد لدى وقت كثير .. ندخل بالموضوع The OS Module ! ماهى ال Module او المكتبية قبل اى شئ ؟؟ الموديل ... هى عبارة عن مجموعة من الدوال والمتغيرات المخزنة ... ستتضح اكثر إن شاء الله حينما نقوم بعمل Modules خاصة فينا المهم هذه الموديل بتعطينا معلومات كتير عن النظام وبتسمح لينا بتحكم كبير فيه ! اظنه موضوع ممتع .. وليه تطبيقات كثيرة ... سنشرح جزء بسيط اليوم وإن شاء الله لنا تكملة بسبب مشاغل الدراسة ملحوظة كتير مهمة :: الموديل تعمل على Posix و NT وللأسف التطبيق على ال NT بسبب إنه المتوافر لدى حاليا ... وبالنسبة للتطبيق على اللينكس هنتعرض ليه إن شاء الله ! الأول نستدعى المكتبية بالأمر import ونتبعه بإسم المكتبية os كود PHP: >>> import os >>> os.name # متغير داخل المكتبية داخله يتم تخزين نوع النظام 'nt' # NT system … if IT's A posix system .. it return posix كود PHP: >>>from os import * # لنقوم بإستدعاء جميع الدوال والمتغيرات داخل المكتبية وعدم الحاجة لذكرos فى بداية كل امر كود PHP: >>> from os import* >>> name # don't have to write os.name 'nt' >>> environ # تقوم بإعادة متغيرات النظام داخل قاموس ! ستجد جميع متغيرات الخاصة بالنظام ... وتستطيع إستدعاءها كما تعرضنا للشرح مع القواميس رمز: [php]>>> environ['COMPUTERNAME'] # إسم الجهاز STRIKERX >>> environ['USERNAME'] # إسم المستخدم 'StikerX' >>> environ['WINDIR'] # الفولدر الخاص بالويندوز مسار 'C:\\WINDOWS' >>> environ['SYSTEMDRIVE'] # البارتيشن الخاص بالسيستم 'C:' >>> environ['OS'] # إسم النظام ... لاحظ إن إكس بى تحت عائلة ال NT 'Windows_NT' >>>environ # هيعيد لك قاموس تستطيع الإستدلال على النواتج من المفاتيح داخله >>> getcwd() # المسار اللى احنا فيه 'C:\\Python25' >>> chdir('D:\He') # تغير المسار إلى المسار المحصور بين القوسين بإستخدام دالة # chdir >>> getcwd() # لعرض المسار الحالى 'D:\\He' >>>getlogin( ) # عرض إسم المستخدم ... خاص بلينكس لنا تكملة إن شاء الله مع OS Module مرة اخرى ... وسنتعرض هكذا لبعض الموديلز مثل system ,String و مفاجأة ايضا ... إن شاء الله قريبا الله الموفق ... ----------------------------------------------------------------------------------------------------------------- File Handling / Python بعض الفراغ فى الوقت .. قلت اكتب الجزئية دى عشان نكون بقينا على ارض صلبة فى ال Python بداية هبدأ بتعبير قاله سامى N.H.2004 بخصوص التعامل مع الملفات ، لو إنت عندك كتاب إيه التفكير المنطقى عشان توصل لصفحة معينة داخله ؟؟ هتقوم من مكانك وتروح عند المكتبه بتاعتك ..... الخطوة الأولى .. إفتح ال Python او إعمل Script للكود بتاعك هتفتح الكتاب ، .... ودى الخطوة التانية إنك تخلى Python تفتح الملف اللى إنت عايزه تشوف الجزئية اللى عايز تقراها ... ودى الخطوة التالته .. إنك تتعامل مع الملف اخيرا غلق الكتاب .... ودى الخطوة النهائية فى الموضوع كله  نبدأ التطبيق .. انا التعامل حاليا على Win32 ولكن ليس هناك اختلاف كبير سوى مسار الملف ليس اكثر . اعمل ملف txt بأى Editor واكتب جواه LinuxAC.ORG Live Free || Die احفظ الملف بإسم rul3z.txt مثلا شغل الPython Start -> Programs -> Python -> Python او من ال Terminal على ال Linux إكتب Python الخطوة الأولى .. نفتح الملف rul3z.txt ونجعله بوضع القراءة read يعنى هنستقبل بيانات من الملف مش هنضيف إليها رمز: myFile = open("C:\rul3z.txt","r") احنا عملنا إيه الوقتى ؟؟ عملنا حاجة إسمها File Handler زى متغير بيعبر عن الملف rul3z.txt وهو مفتوح .. وهو دا اللى هنتعامل بيه طول البرنامج إستخدمنا ال Function ... Open وهى مختصة بفتح الملفات وصيغتها العامة هى التالى رمز: open( path, permission ) path هو مسار الملف Permission هى ماذا سنقوم بعمله مع الملف ؟ هل قراءة ، ام كتابه ام اضافة للملف R .... read للقراءة w .... write للكتابة يوجد function اخرى تقوم بنفس الوظيفة وهى file ولكنها غير محبذة برأيى .. وبتأخد نفس ال parameters زى open بالظبط طب الخطوة التالية إيه ؟؟ احنا فتحنا الملف الوقتى .. عايزين نتعامل معاه ؟ نبدأ بعرض كل الأسطر اللى بالملف رمز: For line in myFile.readlines() : print line نوضح بشئ من التفصيل شوية myFile اللى زى ماقلنا إنها ال File handler دى عبارة عن Class ... بيشمل العديد من ال methods .. نقدر نقول functions ولكن طالما بنقول Class تبقة Methods اصح فى التعبير من ضمن ال methods دى method بإسم readlines() ودى بتقرا كل مافى الملف من سطور فالأمر اللى نفذناه كان عبارة عن إننا قولنا ل Python لكل سطر داخل الميثود readlines() تم قرائته إطبعيه هتلقى ال Output كالتالى LinuxAC.ORG Live Free || Die كدا إحنا خلصنا اللى عايزينه من الملف صح ؟ نقفل الملف ودى الخطوة الأخيرة رمز: myFile.close() كدا إحنا الأمر بقة سهل تحبوا نصمم Tool زى Cat مثلا بال Python ؟؟ رمز: #!bin/python Path = raw_input("Enter the File Path : ") myFile = open(Path, "r") For line in myFile.readlines() : print line myFile.close() احفظ ال Script وقم بتشغيله ستجده يقوم بوظيفة مشابهه ل Cat ندخل على التعامل بالكتابة داخل ملف إنشاء ملف بإسم hi.txt فى حالة عدم وجودة ... وان كان موجودا سيتم محو كل مابداخله وفتحه للكتابه رمز: myFile = open("C:\hi.txt","w") رمز: myFile.write("Hello,World " ) الكتابة داخل الملف بإستخدام method إسمها write بتبقة تحت ال class ... ال file handler رمز: myFile.write("\n " ) لوضع سطر جديد رمز: myFile.write("Hello,World " + "\n") انت فهمت اكيد ... كتابة الجملة ووضع سطر جديد بعدها لاتنسى ابدا غلق الملف بعد الإنتهاء من إعداده ! رمز: myFile.close() تطبيق عملى : سكربت يقوم بعمل copy من ملف لآخر احنا هنعمل copy من الملف rul3z إلى الملف hi فهنفتح ملف rul3z للقراءة وهنفتح ملف hi للكتابة رمز: myFile1 = open("C:\rul3z.txt","r") myFile2 = open("C:\hi.txt", "w") for line in myFile1 : myFile2.write(line + "\n") print "Done ! " نقوم بغلق الملفات .. الصراحة لأنى مكسل هكتبها كدا رمز: list = [myFile1, myFile2] for x in list : x.close() تقدر تقفلها بطريقة عادية جدا myFile1.close() myFile2.close() Done ! ----------------------------------------------------------------------------------------------------------------- OOP , Python بسم الله الرحمن الرحيم ماهو ال class هو بمعنى صنف ولكن يعنى إيه صنف ! ؟ لو بصيت حواليك هتلقى مثلا الإنسان دا صنف من الكائنات .. والإنسان بصورة عامة ليه صفات attributes وهى إنه ب 2 إيد و2 رجل وبعيون وبأذن وبأنف .. دى صفات اساسية لكل إنسان لكن بردو كل إنسان ليه صفات مميزة ليه مثلا الإسم واللون بنستخدم كلمة class لتعريف اى صنف رمز: >>> class person: # Person تعريف الصنف pass # لن نعرف الصفات الآن رمز: >>> person.name = 'rul3z' قمنا بعمل صفة خاصة بال class تبعنا وهى name وقمن بإعطاءها القيمة rul3z رمز: >>> person.age = '18' قمنا بعمل صفة اخرى وهى ال age وقمنا بإعطاءها القيمة 18 رمز: >>> person.study = 'engineering ' قمنا بعمل صفة اخرى تعبر عن المرحلة الدراسية وهى study وقمنا بإعطاءها القيمة engineering رمز: >>>person.color = 'white' قمنا بعمل صفة اخرى تعبر عن اللون وهى color وقمنا بإعطاءها القيمة white رمز: >>> person #class -> exist or not اختبار ال # محجوز فى الذاكرة بالعنوان الناتج >>> person.name # إستدعاء قيمة صفة الإسم من الكلاس 'rul3z' >>> person.age # إستدعاء قيمة صفة العمر من الكلاس '18' >>> person.study 'engineering' >>>person.color 'white' طريقة اخرى ... رمز: >>> class person: def __init__(this, name, age, color, study): this.name = name this.age = age this.color = color this.study = study >>> Ahmed = person('ahmed', 18, 'white', 'Engineering') نفصل الكود كلمة كلمة Class person -> تعريف الكلاس رمز: def __init__ (this, name,age,color ,study) بتنشئ الكلاس وبتقول إن الكلاس دا هيكون فيه صفات Name,age,color,study نيجى للمشكلة اللى معقدة ناس كتير وهى this او self دى بتبقى حسب ال coder نفسه ليه this او self موجودة ! ... عشان نستخدمها كوسيط داخل الكلاس سواء فى الصفات او الدوال methods هنتعرض ليها بعد قليل رمز: >>> Ahmed = person('ahmed', 18, 'white', 'Engineering') هنا عملنا فرع من الكلاس الرئيسى بإسم Ahmed وقمنا بإدخال الصفات مباشرة مرة واحدة وتقدر تعمل كذا واحد .. المهم تقوم بإدخال الصفات الرئيسية مثلا دا فرع كمان رمز: >>> rul3z = person('rul3z', 17, 'Black', 'high School') تقدر تضيف صفات كتييييييييييييرة جداااااااا جداااااااا لأى كلاس Methods الميثود او الوظائف ( تقدر تقول دوال ) functions ولكنها فى ال OOP إسمها ميثود لكن إيه هى الميثود بقة ؟ الميثود هى الوظيفة اللى بيأديها الكلاس يعنى مثلا لو فى كلاس إنسان ... الوظايف او الأفعال اللى بيعملها هى إيه ؟ إنه بياكل وبيشرب وبيمشى وبيشتغل ! يبقى الأكل دا ميثود والشرب ميثود والمشى ميثود وهكذا ... رمز: >>> class person: def __init__(this,name,age): this.name =str(name) this.age = int(age) def eat(this): print "i'm eating " def drink(this): print "i'm drinking " def walk(this): print "i'm walking " رمز: >>> ahmed = person('ahmed',18) >>> ahmed.walk() i'm walking >>> ahmed.eat() i'm eating >>> ahmed.drink() i'm drinking مثال واقعى بقة شوية عشان اتأكد إننا فهمنا الموضوع كويس رمز: class circle: def __init__(this, radius): this.radius = radius def get_area(this): # to use this.radius area = 3.14 * (this.radius**2) return area هنا انشأنا class إسمه circle الكلاس دى فيه صفة واحدة بتميزه وهى radius وبتعبر عن نصف القطر للدائرة عرفنا method خاصة بالدائرة وهى المساحة get_area عرفنا قيمة المساحة انها ط X مربع نصف القطر تعقيب بسيط فقط على الإستخدام هنا رمز: area = 3.14 * (this.radius**2) جرب تستبدل this.radius ب radius شوف هيقلك إيه ! .. هيقلك إنه مش متغير عام global فى الكلاس عشان كدا لما بنعرف اى ميثود فى الكلاس بنضيف this بين القوسين كدا يعنى رمز: get_area(this) ننشأ objects من ال class اللى عملناه وهو circle رمز: >>> c1 = circle(4) >>> c1.get_area() 50.240000000000002 >>> c2 = circle(7) >>> c2.get_area() 153.86000000000001 اى إستفسار لاتتأخر بخصوص هذا الموضوع كتطبيق قم بعمل class يعبر عن مستطيل ملحوظة هامة جدا: Python انت المفروض بتستخدم معاها كلمة self ولكن فى الدورة هنا انا إستخدمت this عشان تبقة اسهل عليك بدل ماتقعد تفكر .. لأنك هتستخدمها كتير سواء فى السى شارب او الجافا يعنى لمجرد التسهيل عليك ليس اكثر ! ----------------------------------------------------------------------------------------------------------------- The While Statement رمز: #!/usr/bin/python # Filename: while.py number = 23 running = True while running: guess = int(raw_input('Enter an integer : ')) if guess == number: print 'Congratulations, you guessed it.' running = False # this causes the while loop to stop elif guess < number: print 'No, it is a little higher than that.' else: print 'No, it is a little lower than that.' else: print 'The while loop is over.' # Do anything else you want to do here print 'Done' الكود واضح جدا .. طالما قيمة running = True نفذ اختبار الشروط if , elif ,else فى حال إن الرقم == 23 ... قم بتغير running إلى False كدا إتغيرت قيمة running يبقة كدا مش هيتنفذ ال loop دى وهتقف بعد ماطلع ان الرقم = 23 بس كدا ----------------------------------------------------------------------------------------------------------------- Math Module هنتكلم عن موديل math النهاردة وبعض ال functions اللى فيها .. واضح جدا إنها موديل خاصة بالرياضيات فهى تشمل عديد من الثوابت مثل PI = 3.1416 وتشمل الدوال مثل دالة الصحيح والجذر وهكذا .. نستدعى الموديل بالطريقة المعتادة بإستخدام the "import" Keyword رمز: >>>import math >>> math.floor(3.8) # دالة الصحيح .. 3.0 >>> math.sqrt(16) # دالة الجذر 4.0 >>> math.fabs(-19) # القيمة المطلقة 19.0 >>> math.exp(4) # e**4 54.598150033144236 >>> math.pi 3.1415926535897931 >>> math.e 2.7182818284590451 >>> math.log10(100) # لوغاريتم 100 للأساس 10 2.0 >>>math.log(100,10) # المعامل الأول هو العدد والتانى هو الأساس 2.0 >>> math.pow(2, 3) # تقوم بإعادة 2 مرفوعة لأس 3 8.0 >>> math.hypot(3,4) # تقوم بإعادة جذر مجموع مربعات القيمتين 3 و 4 ( الوتر من فيثاغورث ) 5.0 >>> math.radians(30) # تقوم بإعادة الزاوية 30 بالتقدير الدائرى 0.52359877559829882 >>> math.degrees(0.52359877559829882) # إعادة الزاوية إلى التقدير الستينى 29.999999999999996 درس بسيط وخفيف ... يوجد العديد من الدوال حاول إكتشافها مع نفسك .. Done ! ----------------------------------------------------------------------------------------------------------------- انتهت الدورة الحمد لله ... وهنبدأ فى جزئية ال GUI ارجو ان تكون افادتكم ولو قليلا ... هنختار Tkinter Module فى الشرح لإلتحاقها ضمنيا داخل ال Python وإنها سهلة كدا وسلسلة وتعمل على معظم الأنظمة UNIX, UNIX-Like, Windows, Macintosh كيف نقوم بإستدعاء الموديل ؟؟ رمز: import Tkinter او عن طريق رمز: from Tkinter import * وهى الطريقة المستخدمة غالبا .. برنامجنا الأول افتح اى Editor وإكتب فيه التالى رمز: from Tkinter import * window = Tk() lbl = Label(window, text = "Hello, World") lbl.pack() window.mainloop() اول سطر إستخدمنا ال Tkinter Module تانى سطر عرفنا Window على إنها Tk() ودى فنكشن خاصة برسم ويندو عرفنا lbl وهو كنترول من نوع Label ووضعناه فى ال Window وال text اللى عليه اسندنا إليه قيمة Hello, World lbl.pack() بتعنى إضافة ال label للويندو بالإعدادت اللى حطيناها وهنا فى المثال هى ال text window.mainloop() خاصة ببدأ تشغيل البرنامج .. أضغط على الصورة لتكبيرها png1 ودى صورة التطبيق ----------------------------------------------------------------------------------------------------------------- البرنامج الثانى عمل Window عليها 2 Buttons رمز: #!bin/python from Tkinter import * window = Tk() b1 = Button (window, text = "Hi") b2 = Button (window, text = "Bye") b1.pack() b2.pack() window.mainloop() صورة التطبيق png2 ----------------------------------------------------------------------------------------------------------------- رمز: #!bin/python from Tkinter import * window = Tk() b1 = Button (window, text = "Hi") b2 = Button (window, text = "Bye") b1.pack(side = LEFT, padx = 10, pady = 5) b2.pack(side = RIGHT,padx = 10, pady = 5) window.mainloop() الشئ الوحيد الغريب فى هذا الكود هو كلمة side و padx و pady side هى مكان الكنترول على ال Window padx هى الإزاحة على جانب ال window على محور السينات pady هى الإزاحة من محور الصادات كما بالصورة png3 ----------------------------------------------------------------------------------------------------------------- http://docs.python.org/lib/os-process.html اختصارا كود PHP: system("command"); ----------------------------------------------------------------------------------------------------------------- ========================================================================================================================== ==================================================== The End ============================================================= ==========================================================================================================================