=======================================================================================
============================ 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 =============================================================
==========================================================================================================================