PythonGuide/Python Basics
من PFWiki
محتويات |
مقدمة
هنتناول فى الفصل دا مفاهيم اساسية زى الvariables وال Loops وال Conditions وهى جزء حيوى من كل اللغات وبعض انواع البيانات
انواع البيانات
المتغيرات
اولا ماهو ال variable (متغير)؟ هو قيمة متغيرة فى برنامج وبيهمك انك تتابعها وتتابع اى تغير يتم فيها. مثلا حساب بنكى فيه فلوس "قيمة" قابلة للتغيير فلازم نعبر عنها بمتغير وليكن "money” ونشوف قيمته خلال برنامجنا سواء بالزيادة او النقص
افتح ال IDLE .. هشنتغل بنظام تفاعلى فى الأكواد الصغيرة.. <WRAP :en>
>>>balance=90000 #an integer
نطبع القيمة كالتالى
>>> print balance 90000
نضيف ليه قيمة ولتكن 100 (زيادة)
>>> balance = balance + 100 >>> print balance 90100
ننقص منه اى قيمة وليكن 890 (نقص)
>>> balance = balance - 890 >>> balance 89210
على فرض اننا عندنا variable بإسم name بيعبر عن قيمة معينة لل name دا ملحوظة ال variable ماهو الا اسم لقيمة متغيرة فى برنامجك
>>> name="ahmed" #a string >>> print name ahmed
وهكذا تقدر تعمل متغير يعبر عن العمر مثلا age
>>> age=50 >>> print age 50
القوائم Lists
طب جميل موضوع المتغيرات هيدفعنا نتكلم عن ال 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 او التجميع للبيانات المشتركة بمعنى ان كل دول students صح ؟
>>> students=[“Ahmed”, “Wael”, “Ayman”, “Tina”] >>> type(students) <type 'list'>
لاحظ ان اول عنصر فى ال list ال index (الترتيب) له هو 0 والتانى هو 1 والتالت هو 2
القاعدة العامة
idx=n-1
مثلا عندنا list كالتالى
>>>friends=["St0rM", "Squall", "Tina", "Ayman"]
لاحظ موضوع ال indexing لأنه بسيط وهو بنستخدمه للوصول لعنصر فى ترتيب معين فى اى sequence
>>> friends[0] # 1st 'St0rM' >>> friends[2] # 3rd 'Tina'
ال List بتقدملنا العديد من الوظائف او التسهيلات فى التعامل على فرض ان عندنا List كالتالى
>>> students=["Ahmed", "Ayman", "Tina", "Wael"] >>> students ['Ahmed', 'Ayman', 'Tina', 'Wael']
.append(element)
لإضافة عنصر بنستخدم ال append ميثود كالتالى
>>> students.append("Gina") >>> students ['Ahmed', 'Ayman', 'Tina', 'Wael', 'Gina']
-- تقدر تضيف عنصر كالتالى
>>> students += ['Marian'] >>> students ['Ahmed', 'Ayman', 'Tina', 'Wael', 'Gina', 'Marian']
فى الواقع تقدر تضيف عدة عناصر
>>> students += ["Omar", "Waleed"] >>> students ['Ahmed', 'Ayman', 'Tina', 'Wael', 'Gina', 'Marian', 'Omar', 'Waleed']
او بإستخدام extend
.extend(iterable)
>>> students.extend(["Omar", "Waleed"]) >>> students ['Ahmed', 'Ayman', 'Tina', 'Wael', 'Gina', 'Marian', 'Omar', 'Waleed']
بتقوم بدمج ال iterable على الlist الحالية كالتالى مثلا
.remove(value)
بيتم حذف اول ظهور لل value فى ال list مباشرة كما فى المثال
>>> students.remove("Ayman") >>> students ['Ahmed', 'Tina', 'Gina', 'Marian', 'Omar', 'Waleed']
للحذف بنقوم بتحديد ال index (الترتيب) الخاص بالعنصر ليتم حذفه كالتالى مثلا
>>> del students[3] >>> students ['Ahmed', 'Ayman', 'Tina', 'Gina', 'Marian', 'Omar', 'Waleed']
.insert(idx, item)
لإضافة عنصر معين فى ترتيب معين بنستخدم ال insert ميثود كالتالى مثلا هيتم إضافة Ayman فى الترتيب ال 3 (العنصر ال4)
>>> students.insert(3, "Ayman") >>> students ['Ahmed', 'Tina', 'Gina', 'Ayman', 'Marian', 'Omar', 'Waleed']
.pop(idx=-1)
بتقوم بحذف + اعادة عنصر فى ال list بإستخدام ال idx وفى حال عدم توفيره هيتم التطبيق على آخر عنصر بال list
>>> popped=students.pop() >>> popped 'Waleed' >>> popped=students.pop(2) >>> popped 'Tina' >>> students ['Ahmed', 'Ayman', 'Wael', 'Omar']
.reverse()
بيتم عكس الترتيب من الآخر للأول كالتالى
>>> students ['Ahmed', 'Ayman', 'Wael', 'Omar'] >>> students.reverse() >>> students ['Omar', 'Wael', 'Ayman', 'Ahmed']
.sort()
بتقوم بترتيب العناصر
>>> students.sort() >>> students ['Ahmed', 'Ayman', 'Omar', 'Wael']
.index(value)
الحصول على الترتيب الخاص باول ظهور للعنصر
>>> students.index("Ayman") 1
.count(value)
للحصول على عدد مرات ظهور عنصر معين فى ال list
>>> students.append("Ayman") >>> students ['Ahmed', 'Ayman', 'Omar', 'Wael', 'Ayman'] >>> students.count("Ayman") 2
الأزاوج المرتبة Tuples
ال Tuple هى Container حاوية اخرى زى ال List ولكن الفرق هى إنها غير قابلة للتغيير..
التعريف بيتضع العناصر بين ( )
>>> t=(1, 2, 3, 4, 5) >>> t (1, 2, 3, 4, 5)
او تقدر تعرفها كالتالى مثلا
>>> t=1, 2, 3, 4, 5 >>> t (1, 2, 3, 4, 5)
len(tup) هتقوم بإعادة عدد عناصر ال tup (نفس السلوك مع اى كونتينر) احنا قلنا انها غير قابلة للتغيير يعنى لو حاولنا نعدل اى عنصر المفروض يحصل مشكلة
>>> t=1, 2, 3, 4, 5 >>>t[0]=9 #Try to set the first element to 9
هنا حاولنا نخلى العنصر اللى فى الترتيب الأول قيمته تساوى 9 رد بايثون هيكون مشابه للتالى
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
السلاسل النصية Strings
بيثون بتقدملك نوع من البيانات ليعبر عن ال String ولكن اولا ماهو ال String ؟ هو بكل بساطة مجموعة من الحروف
لغات مثل سى لاتعترف بال String ولكن تعتبره مصفوفة (او ليست) من الحروف
انشاء string
تقدر تعرفه كالتالى
>>> astring="Hello, World!"
هنا تم انشاء متغير بإسم astring وتم تخزين القيمة Hello, World داخله لاحظ لإنشاء اى سترينج استخدم علامات التنصيص " “ او ' ' او "”” “”” هنشرح الفرق خلال الكتاب زى مااليست بتقدملنا خدمات تسهل علينا التعامل فكذلك الstrings اولا اسم الداتاتايب هو str (اختصار string)
>>> type(astring) <type 'str'>
len(string)
تقوم بحساب عدد الحروف الموجودة بال string
>>> len("Hello, World")
12
.capitalize() تقوم بإعادة اوبجكت جديد تحول فيه اول حرف إلى حرف uppercase
>>> "hello".capitalize() 'Hello'
.count(sub)
حساب عدد مرات تكرار مقطع معين
>>> "Hello".count('l') 2
.lower()
اعادة اوبجكت بيه كل الحروف lowercase
>>> "HELlO".lower() 'hello'
.upper()
اعادة اوبجكت بيه كل الحروف uppercase
>>> "helLo".upper() 'HELLO'
.swapcase()
بتقوم بإعادة اوبجكت بعكس حالة الأحرف
>>> "hElLo".swapcase() 'HeLlO'
.title() بتعيد اوبجكت على صورة title
>>> "hello, world".title() 'Hello, World'
.startswith(sub)
بتختبر هل السترينج يبدأ بمقطع معين او لأ
>>> "hello".startswith("he") True
.endswith(sub)
بتختبر هل السترينج ينتهى بمقطع معين او لأ
>>> "hello".endswith('lo') True
سؤال: إيه اللى يخلينى استخدم tuple مكان list ؟ مع إنها بتقدملى امكانيات اقل؟ لأنك غالبا مش هتستخدمها ك list ولكن هتحتاج ميزة عدم التعديل عليها
.find(sub) بتقوم بإعادة ال index الخاص بأول ظهور لمقطع معين
>>> 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
المشكلة:
somestring="hola" print somestring, ", ", id(somestring) somestring += " guyZ" print somestring, ", ", id(somestring)
الناتج
hola , 3084138464 hola guyZ , 3084161896
لاحظ اختلاف ال id الخاصة بالsomestring بعد اضافة مقطع ليه ، والسبب ان تم انشاء اوبجكت جديد من ال str class وتم دمج القيمة القديمة + المقطع الجديد
الحل UserString Module
زى ماحنا عارفين إن فى python ال Strings are immutable زى العديد من اللغات زى Java/C# .. etc
بمعنى إن اى تعديل هيتم على String مثل ال Concatenation (الدمج)بيحذف ال Variable ويعمل Variable جديد كالتالى
>>> 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
لاحظ بعد ال دمج مع ال string الجديد إتغير موقعه .. لكن اللى حصل بالفعل هو إن اتعمل شئ مشابه للتالى
>>> s ="I'm a string" >>> del s >>> s ="I'm a string, and you?"
طب جميل ولكن على فرض إنك عايز تعمل mutable string او فى بعض اللغات إسمه
StringBuffer/StringBuilder ؟
الحل هو إنك تستخدم class من UserString Module ودى Module موجودة عندك فى PythonPath/Lib/UserString.py
استدعى ال Module كالتالى
>>> import UserString as us
استخدمت as us لتعبر عن alias لل UserString module
ال Module بتتكون من 2 Classes هماUserString,MutableString ال UserString هو ال base cla*s و immutable تقدر تستخدمه بصورة مشابه لل str type ال MutableString هو sub cla*s من ال UserString و mutable
ملاحظة : ال MutableString معمول فيه اعادة تعريف remove(override) ل hash function لأنه طالما Mutable يبقة unhashable !
def __hash__(self): raise TypeError, "unhashable type (it is mutable)"
ال MutableString فيه method بإسم immutable ودى بتدى return ل immutable string !
>>> m_string=us.MutableString("Hello, ")
بنعمل Object بإسم m_string
تحديد ال location
>>> id(m_string) 13511136
نعمل ref ليه
>>> ref_m_string=m_stringتحديد ال id ل ref هنلقيه نفس ال id الخاص ب m_string
>>> id(ref_m_string) 13511136
عمل Concatenation
>>> m_string += "CRUEL WORLD!"
نحدد ال id تانى هنلقيه مازال هو هو
>>> id(m_string) 13511136
ال id الخاص بال ref مازال زى ماهو
>>> ref_m_string 'Hello, CRUEL WORLD!' >>> id(ref_m_string) 13511136
عمل Object ولكن immutable يعنى ال id بتاعه هيتغير فى اى اى تغيير هيتم عليه
>>> im_string=m_string.immutable() # Return immutable string! >>> im_string 'Hello, CRUEL WORLD!'
تحديد ال id
>>> id(im_string) 13532856
عمل ref ليه وتحديد ال id
>>> ref_im_string=im_string >>> id(ref_im_string) 13532856
عملية الدمج
>>> im_string +=" blah blah blah"
تحديد ال id هنلاقيه إنه إتغير
>>> id(im_string) 13553416
ال ref مازال زى ماهو بدون اى تغيير لأنه بيشير لمكان Object تم الإستغناء عنه واصبح اسم im_string بيشير ل 'Hello, CRUEL WORLD! blah blah blah'
>>> ref_im_string 'Hello, CRUEL WORLD!' >>> id(ref_im_string) 13532856 >>> im_string 'Hello, CRUEL WORLD! blah blah blah'
يفضل اعادة قراءة الفصل بعد قراءة جزئية الكائنات
القواميس Dicts
انشائه
>>> d={}
اسم الداتاتيب هو dict
>>> type(d) <type 'dict'>
وبيخزن فيه البينات على صورة مفاتيج وقيم Key, Values زى القاموس بالظبط (من هنا جت التسمية)
>>> d['Name']='Ahmed' >>> d['Age']=19 >>> d['Sex']='m'
هنا خزنا فى القاموس بتاعنا 3 keys وهما 'Name' , “Age', 'Sex'
.keys()
للحصول على الKeys او الكلمات الدليلية فى صورة ليست
>>> d.keys() ['Age', 'Name', 'Sex']
.values()
للحصول على ال Values فى صورة ليست
.get(key) بتعيد لك الvalue الخاصة ب key معين
>>> d.get('Name') 'Ahmed'
فى حال عدم وجوده هيتم إعادة None
>>> print d.get('Team') None
Indexing
تقدر تحصل على القيمة الخاصة ب key معين من خلال ال Indexing كالتالى مثلا
>>> d['Name'] 'Ahmed'
او تقدر تضيف مفتاح جديد مثلا
>>> d['Lang']='Ruby'
او تقدر تعدل على قيمة موجودة
>>> d['Name']='Youssef'
.pop(key)
بتقوم بحذف ال Key والValue بتاعته من القاموس وبتعيدلك ال value
.update(d) بتقوم بعمل تحديث للقاموس ببيانات قاموس d
d.update({'Lang':'Python', 'Singer':'Delta'}) >>> d {'Lang': 'Python', 'Age': 19, 'Singer': 'Delta', 'Name': 'Youssef'}
.has_key(key)
بتختبر وجود key معين فى القاموس
>>> d.has_key('Lang') True
.items()
بتعمل list مكونة من tuples بتشمل ال key, value فى صورة زوج
>>> print d.items() [('Lang', 'Ruby'), ('Singer', 'Delta'), ('Name', 'Youssef'), ('Country', 'EG'), ('Age', 19), ('Sex', 'm')]
.iteritems()
بتستخدم غالبا فى ال Iterations (سنتعرض ليها لاحقا)
for key, val in d.iteritems(): print key, " => ", val Lang => Ruby Singer => Delta Name => Youssef Country => EG Age => 19 Sex => m
مثال اخر
>>> i=d.iteritems() >>> i.next() ('Lang', 'Ruby') >>> i.next() ('Singer', 'Delta')
الشروط والحلقات
الشرط
حياتنا مبنية على الإحتمالات والبرمجة مش خارج نطاقها.. مثلا اذا الخدمات اللى بتطلب تسجيل الدخول منك مبنية على احتمال "هل انت او لأ"
الصورة العامة
if condition is True then if_suite
مثلا "مع فارق التشفير وقواعد البيانات فى الإستخدام"
>>> if name=="ahmed" and password=="123456": print "Welcome ahmed" #output Welcome ahmed
لاحظ هنا اختبرنا هل الإسم قيمته مساوية "==” لاحمد و الباسورد قيمته "123456” فإذا الناتج True يتنفذ البلوك اللى بعدها وهو print Welcome ahmed
فى حال ال ناتج الأساسى للشرط مش True يعنى False مش هيتنفذ حاجة.
تمام.. طب اذا حبينا نعالج موضوع ان الشرط يكون False ؟ بمعنى اننا لو غيرنا مثلا الباسورد لأى قيمة مخالفة ل 123456 ال condition قيمته هتكون False وفى الحالة دى مش هيحصل شئ.. ولكن احنا عايزين نعرف ان الcondition كان False مثلا؟
تابع المثال التالى وهو إستخدام if, else الصورة العامة
if condition is True then if_suite else then else_suite
لاحظ المثال التالى
>>> name="ayman" >>> pa*sword=147859 >>> if name=="ahmed" and password=="123456": print "Welcome ahmed" #if_suite else: print "Welcome, Who R U?" #else_suite Welcome, Who R U?
طب فى حال وجود عدة احتمالات قد تكون سليمة او لأ هنستخدم if, else if, else
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
تابع المثال التالى
>>> if name=="ahmed" and password=="123456": print "Welcome ahmed" #if_suite elif name=="tina" and password=="36987456": print "Welcome tina" #elif_suite elif name=="ayman" and password==147859: print "Welcome, Ayman" #elif_suite else: print "Who R U?" Welcome, Ayman
الأول تم أختبار البلوك دا
if name=="ahmed" and password=="123456":
ولكنه مش True فيتعمل Escape انتقال للأختبار التالى
elif name=="tina" and password=="36987456":
ولكنه مش True بردو فيتعمل Escape للى بعده وهو
elif name=="ayman" and password==147859:
والبلوك دا قيمته True فيتنفذ البلوك تبعه وهو
print "Welcome, Ayman" #elif_suite
<note important> لإختبار التساوى بنستخدم ==
لإسناد قيمة بنستخدم =
</note>
الحلقات
زى الشروط معظم حياتنا مبنية على التكرار.. مثل كل يوم تصحى الصبح وتاخد دش وتفطر وتنزل شغلك وهكذا لحد الأجازة مثلا تنام للمغرب :D
طالما انت فى دراسة او شغل "مش فى اجازة" اصحى الساعة 6 خد دش افطر انزل شغلك
الصيغة العامة
while condition is True do while_suite
تعالى نجرب ابسط لوب ممكن
>>> 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 وطالما الشرط دا حقيقى (صحيح) هيتنفذ البلوك التابع لل لوب
print "i: ", i i += 1
السبب فى إننا بنزود ال I اننا نخلى ال I توصل ل 10 بحيث ان ال loop تقف وإلا الشرط هيكون True للأبد.
Foreach element in container do
for_suite
اللوب دى بنطبقها على Containers زى ال string او list او tuple مثلا
>>> string="Hello, World!" >>> for char in string: print char H e l l o , W o r l d !
معناها كالتالى : لكل (حرف) فى ال string اطبع (الحرف) دا
على فرض ان عندنا list كالتالى بإسم students
>>> students=["Ahmed", "Tina", "St0rM", "Salma"] >>> for student in students: print student Ahmed Tina St0rM Salma
List Comprehension
اذا اخدت كورس رياضيات من قبل فربما تكون واجهت ال List Comprehension
[img]
[/img]
هنا تنقسم ال LC الى جزئين جزء ماقبل ال بايب | وجزء مابعدها ماقبلها يسمى function يتم تطبيقها على كل x
>>> [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
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 اذا حيث تقوم بتطبيق العملية بحذافيرها ماقبل ومابعد البايب وربما تقوم بتحديد شرط ما (هنا لكل الأعداد الزوجية)
>>> [number*3 for number in range(20) if number%2==0] [0, 6, 12, 18, 24, 30, 36, 42, 48, 54]
كود haskell
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 اطبع ال عنصر دا
ملحوظة: لطباعة عناصر الحاوية بدون اضافة سطر جديد ضيف كومة لل print كالتالى
>>> 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
الصيغة العامة
raw_input(prompt)
حيث ان الprompt هى الرسالة اللى هتظهر للمستخدم مثال
>>> name=raw_input("Enter your name: ") Enter your name: ahmed >>> print "Hola, ", name Hola, ahmed
س: ايه الفرق بين raw_input, input ؟ استخدامك ل input بيساوى بالظبط التالى
eval(raw_input(prompt))
لايوجد افضل من التجربة العملية تابع المثال التالى
>>> val=raw_input("Enter: ") Enter: 2+13+541 >>> print val 2+13+541
لكن مع استخدامنا ل input هيتعمل eval -اختصار ل evaluate- للمدخلات ك Python Expression كالتالى
>>> val=input("Enter: ") Enter: 2+13+541 >>> print val 556
تم تحقيق ال 2+13+541 من خلال python واعادة الناتج ليك
eval(expression)
>>> eval("1+2") 3
eval بتاخد expression وتحاول اعادة الناتج ليك اذا كان ليه معنى
break
بنستخدم break للخروج من حلقة عند استيفاء شرط معين (مثلا تمت قراءة كل البيانات من ملف فلاداعى لمحاولة القراءة او تم قراءة 100 رقم فردى فلا داعى للإستمرار) لدينا كلمة مثل "hellopython” نريد ان نعرف موقع حرف ال t فيها فالفكرة ان نقوم بعمل حلقة على الأحرف ونختبر ماذا كان t او لا.. واذا كان t نقم بتخزين قيم المركز الحالى ونخرج من الحلقة "لعدم احتياجنا لها بعد الآن"
word="hellopython" whereist=0 count = 0 while count < len(word): if word[count]=='t': whereist=count break #no need to keep going on count += 1
الناتج
striky@striky-desktop:~/workspace/pytut/src$ python tstbreak.py Now count is 1 Now count is 2 Now count is 3 Now count is 4 Now count is 5 Now count is 6 Now count is 7 t was found at word[7]
continue
بتستخدم continue للهروب من الحلقة الحالية (ربما لعدم استيفاء عنصر الشروط المطلوبة للعمل عليه) واستكمالها على العنصر الذى يليه مثلا
tstvars=['123mx', 'hello', 'acc', '9'] for var in tstvars: if var[0].isdigit(): continue #no work will be done on this item, maybe the next? else: print var, " => ", "is valid."
هنا نختبر كل عنصر من عناصر tstvars ماإذا كان يصلح ان يكون اسم متغير فى بايثون فنقوم بعمل حلقة على العناصر
for var in tstvars:
ونختبر ماإذا كان يبدأ برقم (احد الشروط عدم بدا تسمية المتغيرات فى بايثون برقم) فإذا كان رقم نهرب من الحلقة الحالية ونستكمل على العنصر التالى فى القائمة tstvar
if var[0].isdigit(): continue #no work will be done on this item, maybe the next?
تدريب:
اكتب برنامج لتسجيل الدخول بالبينات التالية
user_name=”Ahmed”
user_pass=”123456”
ل 3 محاولات وفى حالة الفشل تطلع رسالة ب Account Suspended!
- أستخدم raw_input للحصول على الداتا من المستخدم
