Programming Freaks  | دورات ومقالات برمجيه

Please login or register.

Login with username, password and session length
Advanced search  

News:

Please Read our FAQ

Author Topic: اساسيات  (Read 2329 times)

Striky

  • Helping Freak
  • Administrator
  • Posting Freak
  • *****
  • Posts: 283
    • View Profile
    • Weblog
    • Email
اساسيات
« on: October 26, 2008, 04:06:15 AM »


هنتناول فى الفصل دا مفاهيم اساسية زى الvariables وال Loops وال Conditions وهى جزء حيوى من كل اللغات وبعض انواع البيانات
اولا ماهو ال variable (متغير)؟
هو قيمة متغيرة فى برنامج وبيهمك انك تتابعها وتتابع اى تغير يتم فيها.
مثلا حساب بنكى فيه فلوس "قيمة" قابلة للتغيير فلازم نعبر عنها بمتغير وليكن "money” ونشوف قيمته خلال برنامجنا سواء بالزيادة او النقص

افتح ال IDLE .. هشنتغل بنظام تفاعلى فى الأكواد الصغيرة..
>>>balance=90000 #an integer

نطبع القيمة كالتالى
>>> print balance
90000

نضيف ليه قيمة ولتكن 100 (زيادة)
>>> balance = balance + 100
>>> print balance
90100

ننقص منه اى قيمة وليكن 890 (نقص)
>>> balance = balance - 890
>>> balance
89210


على فرض اننا عندنا variable بإسم name بيعبر عن قيمة معينة لل name دا
ملحوظة ال variable ماهو الا alias لقيمة متغيرة فى برنامجك
>>> name="ahmed" #a string
>>> print name
ahmed

وهكذا تقدر تعمل متغير يعبر عن العمر مثلا age
>>> age=50
>>> print age
50







List

طب جميل موضوع المتغيرات هيدفعنا نتكلم عن ال Lists او القوائم هى عبارة عن Enhanced Array لمبرمجى ال C
اقرب مثال هو طلاب الفصل او زملاء العمل هل تعتقد ان اذا عندنا 30 طالب اننا نعمل شئ مشابه للتالى
student_1=”Ahmed”
student_2=”Wael”
student_3=”Ayman”
student_4=”Tina”
............
student_30=”Youssef”

هل تتوقع اننا نعمل 30 متغير ل30 طالب بالصورة دى ؟ ممكن بس يفضل تكتب استقالتك بعدها :D

بالطبع لأ.. وهنا تيجى اهمية ال List وهى بإختصار ال Grouping لل Data Types المشتركة بمعنى ان كل دول students صح ؟
>>> students=[“Ahmed”, “Wael”, “Ayman”, “Tina”]
>>> type(students)
<type 'list'>

لاحظ ان اول عنصر فى ال list ال index بتاعه هو 0 والتانى هو 1 والتالت هو 2


القاعدة العامة
idx=n-1

مثلا عندنا list كالتالى
Code: ($2) [Select]
>>>friends=["St0rM", "Squall", "Tina", "Ayman"]

لاحظ موضوع ال indexing لأنه بسيط وهو بنستخدمه للوصول لعنصر فى ترتيب معين فى اى sequence
Code: ($2) [Select]
>>> friends[0] # 1st
'St0rM'
>>> friends[2] # 3rd
'Tina'


ال List بتقدملنا العديد من الوظائف او التسهيلات فى التعامل على فرض ان عندنا List كالتالى
Code: ($2) [Select]
>>> students=["Ahmed", "Ayman", "Tina", "Wael"]
>>> students
['Ahmed', 'Ayman', 'Tina', 'Wael']


.append(element)
لإضافة عنصر بنستخدم ال append ميثود كالتالى
Code: ($2) [Select]
>>> students.append("Gina")
>>> students
['Ahmed', 'Ayman', 'Tina', 'Wael', 'Gina']

-- تقدر تضيف عنصر كالتالى
Code: ($2) [Select]
>>> students += ['Marian']
>>> students
['Ahmed', 'Ayman', 'Tina', 'Wael', 'Gina', 'Marian']

فى الواقع تقدر تضيف عدة عناصر
Code: ($2) [Select]
>>> students += ["Omar", "Waleed"]
>>> students
['Ahmed', 'Ayman', 'Tina', 'Wael', 'Gina', 'Marian', 'Omar', 'Waleed']


او بإستخدام extend
.extend(iterable)
Code: ($2) [Select]
>>> students.extend(["Omar", "Waleed"])
>>> students
['Ahmed', 'Ayman', 'Tina', 'Wael', 'Gina', 'Marian', 'Omar', 'Waleed']
بتقوم بدمج ال iterable على الlist الحالية كالتالى مثلا


.remove(value)
بيتم حذف اول ظهور لل value فى ال list مباشرة كما فى المثال
Code: ($2) [Select]
>>> students.remove("Ayman")
>>> students
['Ahmed', 'Tina', 'Gina', 'Marian', 'Omar', 'Waleed']

للحذف بنقوم بتحديد ال index (الترتيب) الخاص بالعنصر ليتم حذفه كالتالى مثلا
Code: ($2) [Select]
>>> del students[3]
>>> students
['Ahmed', 'Ayman', 'Tina', 'Gina', 'Marian', 'Omar', 'Waleed']


.insert(idx, item)
لإضافة عنصر معين فى ترتيب معين بنستخدم ال insert ميثود كالتالى مثلا هيتم إضافة Ayman فى الترتيب ال 3 (العنصر ال4)
Code: ($2) [Select]
>>> students.insert(3, "Ayman")
>>> students
['Ahmed', 'Tina', 'Gina', 'Ayman', 'Marian', 'Omar', 'Waleed']




.pop(idx=-1)
بتقوم بحذف + اعادة عنصر فى ال list بإستخدام ال idx وفى حال عدم توفيره هيتم التطبيق على آخر عنصر بال list
Code: ($2) [Select]
>>> popped=students.pop()
>>> popped
'Waleed'
>>> popped=students.pop(2)
>>> popped
'Tina'
>>> students
['Ahmed', 'Ayman', 'Wael', 'Omar']


.reverse()
بيتم عكس الترتيب من الآخر للأول كالتالى
Code: ($2) [Select]
>>> students
['Ahmed', 'Ayman', 'Wael', 'Omar']
>>> students.reverse()
>>> students
['Omar', 'Wael', 'Ayman', 'Ahmed']


.sort()
بتقوم بترتيب العناصر
Code: ($2) [Select]
>>> students.sort()
>>> students
['Ahmed', 'Ayman', 'Omar', 'Wael']


.index(value)
الحصول على الترتيب الخاص باول ظهور للعنصر
Code: ($2) [Select]
>>> students.index("Ayman")
1


.count(value)
للحصول على عدد مرات ظهور عنصر معين فى ال list
Code: ($2) [Select]
>>> students.append("Ayman")
>>> students
['Ahmed', 'Ayman', 'Omar', 'Wael', 'Ayman']
>>> students.count("Ayman")
2






Tuples(YET ANOTHER CONTATINER)

ال Tuple هى Container اخر زى ال List ولكن الفرق هى إنها غير قابلة للتغيير..

التعريف بيتضع العناصر بين (    )
Code: ($2) [Select]
>>> t=(1, 2, 3, 4, 5)
>>> t
(1, 2, 3, 4, 5)

او تقدر تعرفها كالتالى مثلا
Code: ($2) [Select]
>>> t=1, 2, 3, 4, 5
>>> t
(1, 2, 3, 4, 5)



len(tup)
هتقوم بإعادة عدد عناصر ال tup  (نفس السلوك مع اى كونتينر)
احنا قلنا انها غير قابلة للتغيير يعنى لو حاولنا نعدل اى عنصر المفروض يحصل مشكلة
Code: ($2) [Select]
>>> t=1, 2, 3, 4, 5
>>>t[0]=9 #Try to set the first element to 9

هنا حاولنا نخلى العنصر اللى فى الترتيب الأول قيمته تساوى 9
رد بايثون هيكون مشابه للتالى
Code: ($2) [Select]
Traceback (most recent call last):
  File "<pyshell#5>", line 1, in <module>
    t[0]=9 #Try to set the first element to 9
TypeError: 'tuple' object does not support item a*signment

Code: ($2) [Select]





Strings
بيثون بتقدملك نوع من البيانات ليعبر عن ال String ولكن اولا ماهو ال String ؟
هو بكل بساطة مجموعة من الحروف

لغات مثل سى لاتعترف بال String ولكن تعتبره مصفوفة (او ليست) من الحروف

انشاء string


تقدر تعرفه كالتالى

Code: ($2) [Select]
>>> astring="Hello, World!"

هنا تم انشاء متغير بإسم astring وتم تخزين القيمة Hello, World داخله
لاحظ لإنشاء اى سترينج استخدم علامات التنصيص " “ او '  ' او "””  “”” هنشرح الفرق خلال الكتاب
زى مااليست بتقدملنا خدمات تسهل علينا التعامل فكذلك الstrings
اولا اسم الداتاتايب هو str (اختصار string)

Code: ($2) [Select]
>>> type(astring)
<type 'str'>


len(string)
تقوم بحساب عدد الحروف الموجودة بال string
>>> len("Hello, World")
12

.capitalize()
تقوم بإعادة اوبجكت جديد تحول فيه اول حرف إلى حرف uppercase

Code: ($2) [Select]
>>> "hello".capitalize()
'Hello'


.count(sub)
حساب عدد مرات تكرار مقطع معين

Code: ($2) [Select]
>>> "Hello".count('l')
2


.lower()
اعادة اوبجكت بيه كل الحروف  lowercase

Code: ($2) [Select]
>>> "HELlO".lower()
'hello'


.upper()
اعادة اوبجكت بيه كل الحروف  uppercase

Code: ($2) [Select]
>>> "helLo".upper()
'HELLO'



.swapcase()

بتقوم بإعادة اوبجكت بعكس حالة الأحرف

Code: ($2) [Select]
>>> "hElLo".swapcase()
'HeLlO'



.title()
بتعيد اوبجكت على صورة title

Code: ($2) [Select]
>>> "hello, world".title()
'Hello, World'


.startswith(sub)
بتختبر هل السترينج يبدأ بمقطع معين او لأ

Code: ($2) [Select]
>>> "hello".startswith("he")
True


.endswith(sub)
بتختبر هل السترينج ينتهى بمقطع معين او لأ

Code: ($2) [Select]
>>> "hello".endswith('lo')
True

سؤال: إيه اللى يخلينى استخدم tuple مكان list ؟ مع إنها بتقدملى امكانيات اقل؟
لأنك غالبا مش هتستخدمها ك list ولكن هتحتاج ميزة عدم التعديل عليها

.find(sub)
بتقوم بإعادة ال index الخاص بأول ظهور لمقطع معين

Code: ($2) [Select]
>>> s="Hello, World"
>>> s.find('W')
7


.strip([chars])
بتقوم بحذف ال chars من السترينج وفى حال عدم تحديدها هيعتبر انها المسافات
.lstrip([chars])
مثل الأولى ولكن من على اليسار فقط
rstrip([chars])
مثل الأولى ولكن من اليمين فقط

.isalpha()
بتختبر هل السترينج مكون من حروف الأبجدية او لأ
.isalnum()
بتختبر هل السترينج مكون من حروف من الأبجدية او ارقام او لأ
.isdigit()
بتختبر هل الحروف المكونة للسترينج عبارة عن ارقام او لأ

.isupper()
بتختبر هل السترينج فى حالة uppercase او لأ
.islower()
بتختبر اذا كان السترينج فى حالة lowercase أو لأ

.isspace()
بتختبر هل السترينج دا مسافة
.istitle()
بتختبر هل السترينج دا title أو لأ

ويوجد العديد بكل تأكيد تقدر تطلع على باقى الميثودز فى الوثائق الخاصة بالبيثون

ملحوظة هامة ال string مش mutable!
لتستخدم mutable strings تابع فصل ال UserString

UserString

المشكلة:

Code: ($2) [Select]
somestring="hola"
print somestring, ", ", id(somestring)

somestring += " guyZ"
print somestring, ", ", id(somestring)

الناتج

Code: ($2) [Select]
hola ,  3084138464
hola guyZ ,  3084161896


لاحظ اختلاف ال id الخاصة بالsomestring بعد اضافة مقطع ليه ، والسبب ان تم انشاء اوبجكت جديد من ال str class وتم دمج القيمة القديمة + المقطع الجديد

الحل  UserString Module


زى ماحنا عارفين إن فى python ال Strings are immutable زى العديد من اللغات زى Java/C# .. etc
بمعنى إن اى تعديل هيتم على String مثل ال Concatenation بيحذف ال Variable ويعمل Variable جديد كالتالى


Code: ($2) [Select]
>>> s="I'm a string"
>>> s
"I'm a string"
>>> id(s) # get the location
13511240
>>> s +=", and you ?"
>>> s
"I'm a string, and you ?"
>>> id(s) #get the location now!
13522272

لاحظ بعد ال Concatenation مع ال string الجديد إتغير ال location بتاعه .. لكن اللى حصل بالفعل هو إن اتعمل شئ مشابه للتالى

Code: ($2) [Select]
>>> s ="I'm a string"
>>> del s
>>> s ="I'm a string, and you?"

طب جميل ولكن على فرض إنك عايز تعمل mutable string او فى بعض اللغات إسمه
 StringBuffer/StringBuilder ؟

الحل هو إنك تستخدم cla*s من UserString Module ودى Module موجودة عندك فى
PythonPath/Lib/UserString.py


استدعى ال Module كالتالى

Code: ($2) [Select]
>>> import UserString as us

استخدمت as us لتعبر عن alias لل UserString module

ال Module بتتكون من 2 Cla*ses هماUserString,MutableString
ال UserString هو ال base cla*s و immutable تقدر تستخدمه بصورة مشابه لل str type
ال MutableString هو sub cla*s من ال UserString و mutable

ملاحظة : ال MutableString معمول فيه remove(override)  ل hash function لأنه طالما Mutable يبقة
unhashable !

Code: ($2) [Select]
    def __hash__(self):
        raise TypeError, "unhashable type (it is mutable)"



ال MutableString فيه method بإسم immutable ودى بتدى return ل immutable string !


Code: ($2) [Select]
>>> m_string=us.MutableString("Hello, ")

بنعمل Object بإسم m_string

تحديد ال location

Code: ($2) [Select]
>>> id(m_string)
13511136


نعمل ref ليه

Code: ($2) [Select]
>>> ref_m_string=m_string

 تحديد ال id ل ref هنلقيه نفس ال id الخاص ب m_string

Code: ($2) [Select]
>>> id(ref_m_string) 
13511136

عمل Concatenation
Code: ($2) [Select]
>>> m_string += "CRUEL WORLD!"

نحدد ال id تانى هنلقيه مازال هو هو

Code: ($2) [Select]
>>> id(m_string)
13511136


ال id الخاص بال ref مازال زى ماهو

Code: ($2) [Select]
>>> ref_m_string
'Hello, CRUEL WORLD!'
>>> id(ref_m_string)
13511136


عمل Object ولكن immutable يعنى ال id بتاعه هيتغير فى اى اى تغيير هيتم عليه

Code: ($2) [Select]
>>> im_string=m_string.immutable() # Return immutable string!
>>> im_string
'Hello, CRUEL WORLD!'

تحديد ال id

Code: ($2) [Select]
>>> id(im_string)
13532856

عمل ref ليه وتحديد ال id

Code: ($2) [Select]
>>> ref_im_string=im_string
>>> id(ref_im_string)
13532856

عملية Concatenation

Code: ($2) [Select]
>>> im_string +=" blah blah blah"

تحديد ال id هنلاقيه إنه إتغير

Code: ($2) [Select]
>>> id(im_string)
13553416

ال ref مازال زى ماهو مش تم عليه اى تغيير لأنه بيشير لمكان Object تم الإستغناء عنه واصبح اسم
im_string بيشير ل 'Hello, CRUEL WORLD! blah blah blah'


Code: ($2) [Select]
>>> ref_im_string
'Hello, CRUEL WORLD!'
>>> id(ref_im_string)
13532856
>>> im_string
'Hello, CRUEL WORLD! blah blah blah'

يفضل اعادة قراءة الفصل بعد قراءة جزئية الكائنات


Dictionaries


انشائه

Code: ($2) [Select]
>>> d={}

اسم الداتاتيب هو dict

Code: ($2) [Select]
>>> type(d)
<type 'dict'>


وبيخزن فيه البينات على صورة Key, Values زى القاموس بالظبط (من هنا جت التسمية)

Code: ($2) [Select]
>>> d['Name']='Ahmed'
>>> d['Age']=19
>>> d['Sex']='m'

هنا خزنا فى القاموس بتاعنا 3 keys وهما 'Name' , “Age', 'Sex'


.keys()
للحصول على الKeys او الكلمات الدليلية فى صورة ليست

Code: ($2) [Select]
>>> d.keys()
['Age', 'Name', 'Sex']


.values()
للحصول على ال Values فى صورة ليست

.get(key)
بتعيد لك الvalue الخاصة ب key معين

Code: ($2) [Select]
>>> d.get('Name')
'Ahmed'

فى حال عدم وجوده هيتم إعادة None

Code: ($2) [Select]
>>> print d.get('Team')
None


Indexing
تقدر تحصل على القيمة الخاصة ب key معين من خلال ال Indexing كالتالى مثلا

Code: ($2) [Select]
>>> d['Name']
'Ahmed'

او تقدر تضيف Key جديد مثلا
Code: ($2) [Select]
>>> d['Lang']='Ruby' 

او تقدر تعدل على قيمة موجودة
Code: ($2) [Select]
>>> d['Name']='Youssef'


.pop(key)
بتقوم بحذف ال Key والValue بتاعته من القاموس وبتعيدلك ال value

.update(d)
بتقوم بعمل تحديث للقاموس ببيانات قاموس d
Code: ($2) [Select]
d.update({'Lang':'Python', 'Singer':'Delta'})
>>> d
{'Lang': 'Python', 'Age': 19, 'Singer': 'Delta', 'Name': 'Youssef'}


.has_key(key)
بتختبر وجود key معين فى القاموس

Code: ($2) [Select]
>>> d.has_key('Lang')
True


.items()
بتعمل list مكونة من tuples بتشمل ال key, value فى صورة زوج

Code: ($2) [Select]
>>> print d.items()
[('Lang', 'Ruby'), ('Singer', 'Delta'), ('Name', 'Youssef'), ('Country', 'EG'), ('Age', 19), ('Sex', 'm')]


.iteritems()
بتستخدم غالبا فى ال Iterations (سنتعرض ليها لاحقا)

Code: ($2) [Select]
for key, val in d.iteritems():
print key, " => ", val

Lang  =>  Ruby
Singer  =>  Delta
Name  =>  Youssef
Country  =>  EG
Age  =>  19
Sex  =>  m


   

مثال اخر

Code: ($2) [Select]
>>> i=d.iteritems()
>>> i.next()
('Lang', 'Ruby')
>>> i.next()
('Singer', 'Delta')




Conditions

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

الصورة العامة

Code: ($2) [Select]
if condition as True then
if_suite


مثلا "مع فارق التشفير وقواعد البيانات فى الإستخدام"

Code: ($2) [Select]
>>> if name=="ahmed" and pa*sword=="123456":
print "Welcome ahmed"

#output
Welcome ahmed


لاحظ هنا اختبرنا هل الإسم قيمته مساوية "==” لاحمد  و  الباسورد قيمته "123456” فإذا الناتج True يتنفذ البلوك اللى بعدها وهو print Welcome ahmed
فى حال ال ناتج الأساسى للشرط مش True يعنى False مش هيتنفذ حاجة.
تمام.. طب اذا حبينا نعالج موضوع ان الشرط يكون False ؟ بمعنى اننا لو غيرنا مثلا الباسورد لأى قيمة مخالفة ل 123456 ال condition قيمته هتكون False وفى الحالة دى مش هيحصل شئ.. ولكن احنا عايزين نعرف ان الcondition كان False مثلا؟

تابع المثال التالى وهو إستخدام if, else
الصورة العامة

Code: ($2) [Select]
if condition as True then
if_suite
else then
else_suite

لاحظ المثال التالى

Code: ($2) [Select]
>>> name="ayman"
>>> pa*sword=147859
>>> if name=="ahmed" and pa*sword=="123456":
print "Welcome ahmed" #if_suite
else:
print "Welcome, Who R U?" #else_suite


Welcome, Who R U?


طب فى حال وجود عدة احتمالات قد تكون سليمة او لأ هنستخدم if, else if, else

Code: ($2) [Select]
if condition as True then
if_suite
else_if condition as True then
else if suite
else_if condition as True then
else_if suite
else then
else_suite

تابع المثال التالى

Code: ($2) [Select]
>>> if name=="ahmed" and pa*sword=="123456":
print "Welcome ahmed" #if_suite
elif name=="tina" and pa*sword=="36987456":
print "Welcome tina" #elif_suite
elif name=="ayman" and pa*sword==147859:
print "Welcome, Ayman" #elif_suite
else:
print "Who R U?"

Welcome, Ayman


   

الأول تم أختبار البلوك دا

Code: ($2) [Select]
if name=="ahmed" and pa*sword=="123456":

ولكنه مش True فيتعمل Escape للى بعده وهو

Code: ($2) [Select]
elif name=="tina" and password=="36987456":

ولكنه مش True بردو فيتعمل Escape للى بعده وهو

Code: ($2) [Select]
elif name=="ayman" and password==147859:

والبلوك دا قيمته True فيتنفذ البلوك تبعه وهو

Code: ($2) [Select]
	print "Welcome, Ayman" #elif_suite



ملحوظة:
 لإختبار التساوى بنستخدم ==
لإسناد قيمة بنستخدم =



Loops

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

طالما انت فى دراسة او شغل "مش فى اجازة"
   اصحى الساعة 6
   خد دش
   افطر
   انزل شغلك

الصيغة العامة

Code: ($2) [Select]
while condition as True do
while_suite

تعالى نجرب ابسط لوب ممكن

Code: ($2) [Select]
>>> i=0
>>> while i<10:
print "i: ", i
i += 1


i:  0
i:  1
i:  2
i:  3
i:  4
i:  5
i:  6
i:  7
i:  8
i:  9

لاحط ان الكود بيتنفذ كالتالى
الشرط هو ان I تكون اقل من 10 وطالما الشرط دا حقيقى (صحيح) هيتنفذ البلوك التابع لل لوب

Code: ($2) [Select]
	print "i: ", i
i += 1

السبب فى إننا بنزود ال I اننا نخلى ال I توصل ل 10 بحيث ان ال loop تقف وإلا الشرط هيكون True للأبد.


Code: ($2) [Select]
Foreach element in container do
for_suite



اللوب دى بنطبقها على Containers  زى ال string او list او tuple مثلا


Code: ($2) [Select]
>>> string="Hello, World!"
>>> for char in string:
print char


H
e
l
l
o
,
 
W
o
r
l
d
!

معناها كالتالى : لكل (حرف) فى ال string اطبع (الحرف) دا

على فرض ان عندنا list كالتالى بإسم students

Code: ($2) [Select]
>>> students=["Ahmed", "Tina", "St0rM", "Salma"]
>>> for student in students:
print student


Ahmed
Tina
St0rM
Salma





List Comprehension


اذا اخدت كورس رياضيات من قبل فربما تكون واجهت ال List Comprehension


هنا تنقسم ال LC الى جزئين جزء ماقبل ال بايب | وجزء مابعدها
ماقبلها يسمى function يتم تطبيقها على كل x
Code: ($2) [Select]
>>> [number*3 for number in range(20)] 
[0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57]
ومابعدها يسمى قائمة المدخلات وبعض الشروط

فيما سبق قمنا بتطبيق ال LC فى بايثون حيث قمنا بتحديد الfunction (وهى ضرب كل عدد فى 3) لكل عدد ينتمى الى الفترة من صفر ل 20
Code: ($2) [Select]
Prelude> [number*3 | number <- [1..20] ] 
[3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60]

نفس الشئ بالنسبة لكود haskell اذا حيث تقوم بتطبيق العملية بحذافيرها ماقبل ومابعد البايب
وربما تقوم بتحديد شرط ما (هنا لكل الأعداد الزوجية)
Code: ($2) [Select]
>>> [number*3 for number in range(20) if number%2==0] 
[0, 6, 12, 18, 24, 30, 36, 42, 48, 54]

كود haskell
Code: ($2) [Select]
Prelude> [number*3 | number <- [1..20], even number] 
[6,12,18,24,30,36,42,48,54,60]


طبعا تقدر تستخدم الطرق العادية للفلترة ولكن دى on the fly solution

المعنى هنا: لكل Element او student موجود فى ال Container او ال students list اطبع ال عنصر دا

ملحوظة:
لطباعة اللى فى ال Container  بدون اضافة سطر جديد ضيف كومة لل print كالتالى

Code: ($2) [Select]
>>> string="Hello, World!"
>>> for  char in string:
print char,
#output: H e l l o ,   W o r l d !

   


raw_input
زى ماشفنا print وعرفنا انها مختصة بالطباعة هنشوف المسؤل عن الإدخال وهنا raw_input/input

الصيغة العامة

Code: ($2) [Select]
raw_input(prompt) 

حيث ان الprompt هى الرسالة اللى هتظهر للمستخدم
مثال

Code: ($2) [Select]
>>> name=raw_input("Enter your name: ")
Enter your name: ahmed
>>> print "Hola, ", name
Hola,  ahmed



س: ايه الفرق بين raw_input, input ؟
استخدامك ل input بيساوى بالظبط التالى
Code: ($2) [Select]
eval(raw_input(prompt))

مش فى احسن من التجربة العملية تابع المثال التالى

Code: ($2) [Select]
>>> val=raw_input("Enter: ")
Enter: 2+13+541
>>> print val
2+13+541

لكن مع استخدامنا ل input هيتعمل eval -اختصار ل evaluate- للمدخلات ك Python Expression كالتالى

Code: ($2) [Select]
>>> val=input("Enter: ")
Enter: 2+13+541
>>> print val
556

تم تحقيق ال 2+13+541 من خلال python واعادة الناتج ليك

Code: ($2) [Select]
eval(expression) 

Code: ($2) [Select]
>>> eval("1+2")
3

eval بتاخد expression وتحاول اعادة الناتج ليك اذا كان ليه معنى

break/continue

تدريب:
اكتب برنامج لتسجيل الدخول بالبينات التالية
user_name=”Ahmed”
user_pass=”123456”

ل 3 محاولات وفى حالة الفشل تطلع رسالة ب
Account Suspended!
*أستخدم raw_input للحصول على الداتا من المستخدم


« Last Edit: February 24, 2009, 05:29:58 PM by Ahmed Youssef »
Logged

Life is just a chance to grow a soul. - A. Powell
Weblog: http://ahmedyoussef.wordpress.com/