تخيّل النص قطاراً، وكل حرف فيه عربة. كل عربة عليها رقم مكتوب حتى نعرف مكانها.
لكن انتبه: في بايثون العدّ يبدأ من صفر وليس من واحد — تماماً مثل المصعد: الطابق الأرضي رقمه 0، والذي فوقه رقم 1.
هنا نشرح النصوص والقوائم والقواميس والشروط والحلقات خطوة خطوة، وكل فكرة نربطها بشيء تعرفه من حياتك: طابور المخبز، منيو المطعم، إشارة المرور، الحصّالة… لا تحتاج أن تحفظ شيئاً — فقط افهم الفكرة، ثم اضغط Run وجرّب بنفسك.
→ الرجوع للدرس الأساسيكل قسم في هذه الصفحة مرتّب بنفس الطريقة، حتى تعرف دائماً أين أنت:
نبدأ بمثال تعرفه قبل أي كود.
نفس الفكرة لكن بلغة بايثون. اضغط Run لتجرّبه.
جداول تبيّن ماذا يحدث داخل الكمبيوتر في كل سطر.
أسئلة قصيرة، والجواب مخفي حتى تفكر أولاً.
بعد ما تشغّل أي مثال، غيّر فيه شيئاً صغيراً (اسم، رقم، كلمة) وشغّله مرة ثانية. هكذا تتعلم البرمجة فعلاً — بالتجربة وليس بالحفظ.
النص هو أي كلام نكتبه بين علامتي تنصيص: "Ahmad" ، "مرحبا" ، "0791234567".
تخيّل النص قطاراً، وكل حرف فيه عربة. كل عربة عليها رقم مكتوب حتى نعرف مكانها.
لكن انتبه: في بايثون العدّ يبدأ من صفر وليس من واحد — تماماً مثل المصعد: الطابق الأرضي رقمه 0، والذي فوقه رقم 1.
نكتب اسم المتغير، ثم رقم العربة بين قوسين مربعين [ ]:
name = "Ahmad"
print(name[0]) # العربة رقم 0 = أول حرف
print(name[1]) # العربة رقم 1 = ثاني حرف
print(name[4]) # العربة رقم 4 = آخر حرف
print(len(name)) # len = كم عربة في القطار؟A h d 5
الاسم فيه 5 حروف، لكن آخر رقم هو 4 (لأننا بدأنا من 0). لو كتبت name[5] سيظهر خطأ، لأنه لا توجد عربة رقم 5:
name = "Ahmad"
print(name[5])IndexError: string index out of rangeلو سألتك «مين آخر واحد في الطابور؟» لا تحتاج أن تعدّ الطابور كله من أوله — تنظر مباشرة إلى آخره. في بايثون: -1 يعني آخر واحد، و -2 يعني الذي قبله.
name = "Ahmad"
print(name[-1]) # آخر حرف
print(name[-2]) # الحرف قبل الأخيرd a
رقم الهاتف 0791234567: أول 3 أرقام تخبرك بالشركة، والباقي هو رقم الشخص. والبنك عندما يرسل لك رسالة يعرض فقط آخر 4 أرقام من بطاقتك.
القاعدة: [من : إلى] — نبدأ من الرقم الأول، ونتوقف قبل الرقم الثاني.
phone = "0791234567"
print(phone[0:3]) # من 0 إلى ما قبل 3 → مفتاح الشركة
print(phone[3:]) # من 3 إلى النهاية → رقم الشخص
print(phone[-4:]) # آخر 4 أرقام → مثل رسالة البنك
print(phone[:3]) # إذا تركنا البداية فارغة = من الأول079 1234567 4567 079
بايثون تعطيك «أدوات» جاهزة تستعملها بكتابة نقطة بعد اسم المتغير:
| الأداة | ماذا تفعل؟ | مثال من الحياة |
|---|---|---|
| .upper() | كل الحروف كبيرة | مثل تشغيل زر Caps Lock |
| .lower() | كل الحروف صغيرة | حتى يتطابق Mouse و mouse عند البحث |
| .strip() | تحذف المسافات من الطرفين | المستخدم كتب اسمه ووضع مسافة بالغلط |
| .replace(a, b) | تستبدل كلمة بكلمة | «بحث واستبدال» في Word |
| .split(",") | تقطّع النص إلى قطع | تفصل قائمة مشتريات مكتوبة بسطر واحد |
| in | هل الكلمة موجودة؟ | هل كلمة «مبروك» موجودة في الرسالة؟ |
username = " Sara_2010 " # كتبت اسمها ومعه مسافات بالغلط
print(username.strip())
city = "amman"
print(city.upper())
print(city.capitalize()) # أول حرف فقط كبير
msg = "I love tea"
print(msg.replace("tea", "coffee"))
print("love" in msg)
shopping = "milk,bread,eggs"
print(shopping.split(","))Sara_2010 AMMAN Amman I love coffee True ['milk', 'bread', 'eggs']
هذه الأدوات لا تغيّر النص الأصلي. مثل أن تصوّر ورقة وتكتب على الصورة — الورقة الأصلية تبقى كما هي. إذا أردت حفظ التغيير، خزّنه في المتغير من جديد:
city = "amman"
city.upper() # عملنا نسخة كبيرة… لكن لم نحفظها!
print(city)
city = city.upper() # الآن حفظناها في نفس المتغير
print(city)amman AMMAN
word = "School"
word[0]؟ word[-1]؟ word[1:4]؟ len(word)؟ word.upper()؟ القائمة تخزّن أكثر من قيمة في متغير واحد، بين قوسين مربعين [ ] وبينها فواصل.
أمك لا تكتب كل غرض على ورقة لحاله، بل تكتب ورقة واحدة فيها: حليب، خبز، بيض. هذه الورقة هي القائمة. بدل ما يكون عندنا 3 متغيرات، يكون عندنا متغير واحد فيه كل الأغراض.
# بدون قائمة: متغير لكل غرض 😩
item1 = "milk"
item2 = "bread"
item3 = "eggs"
# مع قائمة: متغير واحد لكل شيء 😎
shopping = ["milk", "bread", "eggs"]
print(shopping)
print(shopping[0]) # نفس فكرة النصوص: العدّ من 0
print(shopping[-1]) # آخر غرض
print(len(shopping)) # كم غرض في الورقة؟['milk', 'bread', 'eggs'] milk eggs 3
في الطابور ناس يوصلون، وناس يطلعون، وأحياناً نعطي كبير السن أول الدور. القائمة في بايثون تتصرف بالضبط مثل هذا الطابور.
| ماذا حدث في الطابور؟ | الأمر في بايثون |
|---|---|
| وصل شخص جديد ووقف في آخر الطابور | queue.append("Sami") |
| أدخلنا شخصاً في مكان محدد | queue.insert(0, "Grandpa") |
| شخص باسمه زهق وترك الطابور | queue.remove("Omar") |
| الأول انخدم وطلع — ونعرف مين هو | first = queue.pop(0) |
queue = ["Ali", "Omar", "Lina"]
queue.append("Sami") # وصل سامي
print(queue)
queue.insert(0, "Grandpa") # جدّو له الأولوية
print(queue)
queue.remove("Omar") # عمر راح
print(queue)
first = queue.pop(0) # أول واحد انخدم
print("انخدم:", first)
print(queue)['Ali', 'Omar', 'Lina', 'Sami'] ['Grandpa', 'Ali', 'Omar', 'Lina', 'Sami'] ['Grandpa', 'Ali', 'Lina', 'Sami'] انخدم: Grandpa ['Ali', 'Lina', 'Sami']
المدرب يُخرج اللاعب رقم 1 ويُدخل مكانه لاعباً جديداً — في نفس المكان.
team = ["Ali", "Omar", "Lina"]
team[1] = "Sami" # سامي يأخذ مكان عمر
print(team)['Ali', 'Sami', 'Lina']
المعلم يريد أن يعرف: أعلى علامة، أقل علامة، المجموع، والمعدل. بدل الآلة الحاسبة، بايثون تعطيه الجواب بسطر واحد.
grades = [70, 85, 90, 60, 95]
print("أعلى علامة:", max(grades))
print("أقل علامة:", min(grades))
print("المجموع:", sum(grades))
print("المعدل:", sum(grades) / len(grades))
print("هل في أحد جاب 100؟", 100 in grades)
grades.sort() # ترتيب من الأصغر للأكبر
print(grades)
grades.sort(reverse=True) # من الأكبر للأصغر
print("الأوائل الثلاثة:", grades[0:3])أعلى علامة: 95 أقل علامة: 60 المجموع: 400 المعدل: 80.0 هل في أحد جاب 100؟ False [60, 70, 85, 90, 95] الأوائل الثلاثة: [95, 90, 85]
remove("Omar") تحذف بالاسم. pop(0) تحذف بالمكان وتعطيك الشيء الذي حذفته.
nums = [10, 20, 30]
nums.append(40) كيف تصبح القائمة؟ nums[0] = 5؟ nums.remove(30)؟ sum(nums) الآن؟ هما «أقارب» القائمة، لكن لكل واحد منهما شخصية مختلفة.
تاريخ ميلادك (السنة، الشهر، اليوم) ثابت — لا أحد يستطيع أن يغيّره. نفس الشيء لإحداثيات بيتك على الخريطة، أو أيام الأسبوع. لمثل هذه الأشياء نستخدم Tuple بأقواس عادية ( ).
birthday = (2010, 5, 17) # سنة، شهر، يوم
print("سنة الميلاد:", birthday[0])
print("الشهر:", birthday[1])سنة الميلاد: 2010 الشهر: 5
جرّب أن تغيّر سنة ميلادك… بايثون سترفض:
birthday = (2010, 5, 17)
birthday[0] = 2012TypeError: 'tuple' object does not support item assignmentعلي بصم مرتين، ولينا بصمت مرتين… لكن في كشف الحضور كل طالب يظهر مرة واحدة فقط. هذا هو الـ Set: يحذف التكرار تلقائياً، ولا يهمه الترتيب. نكتبه بأقواس معقوفة { }.
attendance = {"Ali", "Lina", "Ali", "Omar", "Lina"}
print("عدد الحاضرين:", len(attendance)) # 3 وليس 5!
attendance.add("Sami") # سامي وصل متأخر
print("هل علي حاضر؟", "Ali" in attendance)
print("هل هدى حاضرة؟", "Huda" in attendance)عدد الحاضرين: 3 هل علي حاضر؟ True هل هدى حاضرة؟ False
استعمال مفيد جداً: معرفة كم شيئاً مختلفاً في قائمة فيها تكرار:
votes = ["red", "blue", "red", "green", "blue", "red"] # تصويت الصف على لون
print("عدد الأصوات:", len(votes))
print("عدد الألوان المختلفة:", len(set(votes)))عدد الأصوات: 6 عدد الألوان المختلفة: 3
[ ]ورقة مكتوبة بقلم رصاص: تضيف، تمسح، تعدّل كما تريد.
( )كلام محفور على حجر: تقرأه فقط، لا تعدّله.
{ }كيس فيه أغراض: كل غرض مرة واحدة، وبلا ترتيب.
len({1, 1, 2, 2, 2})؟ القاموس يخزّن المعلومات على شكل اسم ← قيمة. الاسم يسمّى مفتاح key.
بطاقة الطالب مكتوب فيها: الاسم: لينا، العمر: 14، الصف: 8A. أنت لا تقول «أعطني المعلومة الثانية»، بل تقول «أعطني العمر». هذا هو القاموس: كل معلومة لها عنوان.
student_list = ["Lina", 14, "8A"]
print(student_list[2]) # 🤔 ما هو 8A؟ لازم أتذكر أن رقم 2 هو الصف
student = {
"name": "Lina",
"age": 14,
"class": "8A"
}
print(student["class"]) # 😎 واضح: أعطني الصف8A 8A
| المفتاح (العنوان) | القيمة (المعلومة) |
|---|---|
| "name" | "Lina" |
| "age" | 14 |
| "class" | "8A" |
في المنيو: كل أكلة ← سعرها. صاحب المطعم أحياناً يغيّر سعراً، أو يضيف أكلة جديدة، أو يشطب أكلة لأنها خلصت.
menu = {"falafel": 0.5, "shawarma": 2.5, "juice": 1}
print("سعر الشاورما:", menu["shawarma"])
menu["juice"] = 1.25 # غلي سعر العصير ← تعديل (المفتاح موجود)
menu["hummus"] = 1.5 # صنف جديد ← إضافة (المفتاح غير موجود)
del menu["falafel"] # الفلافل خلص ← حذف
print(menu)سعر الشاورما: 2.5
{'shawarma': 2.5, 'juice': 1.25, 'hummus': 1.5}نفس الكتابة menu["..."] = ... تُستعمل للتعديل والإضافة: إذا كان المفتاح موجوداً تعدّل، وإذا لم يكن موجوداً تضيف.
زبون سأل عن بيتزا… وهي غير موجودة في المنيو:
menu = {"shawarma": 2.5, "juice": 1.25}
print(menu["pizza"])KeyError: 'pizza'البرنامج توقف! الحل المهذّب: get — تسأل، وإذا لم تجد الشيء تعطي جواباً احتياطياً بدل الخطأ:
menu = {"shawarma": 2.5, "juice": 1.25}
print(menu.get("pizza", "مش موجودة بالمنيو 😅"))
print(menu.get("juice", "مش موجودة بالمنيو 😅"))مش موجودة بالمنيو 😅 1.25
menu = {"shawarma": 2.5, "juice": 1.25, "hummus": 1.5}
print("الأكلات:", list(menu.keys())) # كل المفاتيح
print("الأسعار:", list(menu.values())) # كل القيم
print("عدد الأصناف:", len(menu))الأكلات: ['shawarma', 'juice', 'hummus'] الأسعار: [2.5, 1.25, 1.5] عدد الأصناف: 3
phone_book = {"Ali": "0791111", "Lina": "0782222"}
phone_book["Sami"]؟ هنا الكمبيوتر يجاوب على أسئلة بـ نعم أو لا فقط. في بايثون: نعم = True، لا = False.
تضع شيئين على الميزان وتسأل: هل هذا أثقل؟ هل هما متساويان؟ الميزان لا يعطيك قصة طويلة — فقط نعم أو لا. عمليات المقارنة هي «ميزان» بايثون.
= و ==x = 5 إشارة واحدة«ضع 5 في الصندوق x». هذا أمر وليس سؤالاً.
x == 5 إشارتان«هل الذي في الصندوق x يساوي 5؟» هذا سؤال وجوابه True أو False.
| الرمز | نقرأه | سؤال من الحياة |
|---|---|---|
| == | يساوي؟ | هل كلمة السر صحيحة؟ |
| != | لا يساوي؟ | هل الجواب مختلف عن الصحيح؟ |
| > | أكبر من؟ | هل حرارتك أعلى من 37.5؟ |
| < | أصغر من؟ | هل علامتك أقل من 50؟ |
| >= | أكبر أو يساوي؟ | هل معك مصاري تكفي ثمن السندويشة؟ |
| <= | أصغر أو يساوي؟ | هل وزن الشنطة ضمن المسموح؟ |
my_money = 5
price = 3.5
print("معي مصاري تكفي؟", my_money >= price)
temperature = 38
print("عندي حرارة؟", temperature > 37.5)
password = "1234"
print("كلمة السر صحيحة؟", password == "1234")
print("Ali" == "ali") # بايثون تفرّق بين الحرف الكبير والصغير!معي مصاري تكفي؟ True عندي حرارة؟ True كلمة السر صحيحة؟ True False
and: الشرطان معاًحتى تسوق سيارة لازم تكون عمرك 18 أو أكثر و معك رخصة. واحد منهما لا يكفي!
| عمرك 18+؟ | معك رخصة؟ | تسوق؟ (and) |
|---|---|---|
| ✔ نعم | ✔ نعم | ✔ نعم |
| ✔ نعم | ✘ لا | ✘ لا |
| ✘ لا | ✔ نعم | ✘ لا |
| ✘ لا | ✘ لا | ✘ لا |
age = 19
has_license = False
print("بقدر أسوق؟", age >= 18 and has_license)بقدر أسوق؟ False
or: واحد منهما يكفيالدخول مجاني إذا كنت طفلاً أقل من 12 أو كبيراً 65 وأكثر. يكفي أن تنطبق عليك واحدة.
| طفل؟ | كبير سن؟ | مجاني؟ (or) |
|---|---|---|
| ✔ نعم | ✘ لا | ✔ نعم |
| ✘ لا | ✔ نعم | ✔ نعم |
| ✘ لا | ✘ لا | ✘ لا |
age = 70
print("الدخول مجاني؟", age < 12 or age >= 65)
age = 30
print("الدخول مجاني؟", age < 12 or age >= 65)الدخول مجاني؟ True الدخول مجاني؟ False
not: العكسis_raining = False
print("الجو حلو للطلعة؟", not is_raining) # مش ماطر = حلوالجو حلو للطلعة؟ True
10 == 10 ؟ 7 != 7 ؟ 5 > 3 and 2 > 4 ؟ 5 > 3 or 2 > 4 ؟ not True ؟ حتى الآن البرنامج ينفّذ كل الأسطر. مع if يصبح البرنامج يقرّر: ينفّذ هذا أو ذاك حسب الموقف.
تسأل نفسك كل يوم: إذا كانت تمطر ← آخذ المظلة. وبعدها في الحالتين أطلع من البيت. أنت تستعمل if كل يوم بدون ما تنتبه!
is_raining = True
if is_raining:
print("خذ المظلة ☂")
print("اطلع من البيت 🚶")خذ المظلة ☂ اطلع من البيت 🚶
1) النقطتان : في آخر سطر الـ if.
2) المسافة (4 مسافات) قبل الأسطر التي «تتبع» الشرط. السطر الذي بدون مسافة ليس تابعاً للشرط، ويُنفّذ دائماً. جرّب تغيير True إلى False في المثال أعلاه!
إذا المبلغ الذي طلبته أقل من رصيدك أو يساويه ← يعطيك المصاري. وإلا ← يقول لك «رصيدك لا يكفي». لا يوجد احتمال ثالث.
balance = 20
amount = int(input("كم بدك تسحب؟ "))
if amount <= balance:
print("تفضل مصاريك 💵")
else:
print("رصيدك ما بكفي ❌")كم بدك تسحب؟ 50 رصيدك ما بكفي ❌
الإشارة ليس لها لونان فقط، بل ثلاثة: أحمر ← قف، أصفر ← استعد، أخضر ← امشِ. عندما يوجد أكثر من احتمالين نستعمل elif (اختصار «else if» = وإلا إذا).
light = input("شو لون الإشارة؟ (red / yellow / green): ")
if light == "red":
print("قف 🛑")
elif light == "yellow":
print("استعد ⚠")
elif light == "green":
print("امشِ ✅")
else:
print("لون غريب! 🤔")شو لون الإشارة؟ (red / yellow / green): yellow استعد ⚠
| السؤال | الجواب | ماذا يحدث؟ |
|---|---|---|
| light == "red" | ✘ False | يتجاهل ويكمل للسؤال التالي |
| light == "yellow" | ✔ True | يطبع «استعد» ويتوقف عن السؤال |
| light == "green" | — | لا يسأله أصلاً |
بايثون تنفّذ أول شرط صحيح فقط وتتجاهل الباقي. انظر ماذا يحدث لطالب علامته 95 إذا رتّبنا الشروط بشكل خاطئ:
# ✘ ترتيب خاطئ
score = 95
if score >= 50:
print("ناجح")
elif score >= 90:
print("ممتاز") # لن يصل إليها أبداً!ناجح
# ✔ ترتيب صحيح: من الأصعب للأسهل
score = 95
if score >= 90:
print("ممتاز 🌟")
elif score >= 75:
print("جيد جداً")
elif score >= 50:
print("ناجح")
else:
print("راسب")ممتاز 🌟
تخيّل درجاً: تسأل أولاً عن أعلى درجة (90)، ثم التي تحتها (75)، ثم التي تحتها (50). لو بدأت من الأسفل، الكل «يوقف» على أول درجة.
أولاً يفحصون جواز السفر. فقط إذا كان الجواز سليماً، يسألونك عن التذكرة. إذا لم يكن معك جواز، لا أحد يسأل عن التذكرة أصلاً.
has_passport = True
has_ticket = False
if has_passport:
print("الجواز تمام ✔")
if has_ticket:
print("تفضل على الطيارة ✈")
else:
print("لازم تشتري تذكرة 🎫")
else:
print("ما بتقدر تسافر بدون جواز ❌")الجواز تمام ✔ لازم تشتري تذكرة 🎫
x = 15؟
x = 15
if x > 20:
print("A")
elif x > 10:
print("B")
elif x > 5:
print("C")
else:
print("D")x > 5 صحيح أيضاً، لكن B جاء أولاً.الحلقة تجعل الكمبيوتر يكرّر نفس العمل عدة مرات بدل ما نكتبه مرة بعد مرة.
المعلم لا يقول «يا علي خذ دفترك، يا لينا خذي دفترك، يا عمر خذ دفترك…» ويكتب ذلك 30 مرة. هو يفكر هكذا: لكل طالب في الصف ← أعطه دفتره. هذه الجملة بالضبط هي حلقة for.
students = ["Ali", "Lina", "Omar"]
for student in students:
print("تفضل دفترك يا", student)
print("خلص التوزيع ✔")تفضل دفترك يا Ali تفضل دفترك يا Lina تفضل دفترك يا Omar خلص التوزيع ✔
| الدورة | قيمة student | ماذا طُبع؟ |
|---|---|---|
| 1 | "Ali" | تفضل دفترك يا Ali |
| 2 | "Lina" | تفضل دفترك يا Lina |
| 3 | "Omar" | تفضل دفترك يا Omar |
| خلصت الأسماء ← نخرج من الحلقة ونطبع «خلص التوزيع» | ||
نحن اخترنا اسمه! في كل دورة، بايثون تضع فيه الاسم التالي من القائمة تلقائياً. يمكنك تسميته s أو kid أو أي اسم — لكن الاسم الواضح أفضل.
المسافة في بداية السطر تحدد: هل السطر يتكرر أم يُنفّذ مرة واحدة بعد الحلقة؟
for i in range(3):
print("داخل الحلقة 🔁", i) # عليه مسافة ← يتكرر
print("خارج الحلقة ⏹") # بدون مسافة ← مرة واحدة في النهايةداخل الحلقة 🔁 0 داخل الحلقة 🔁 1 داخل الحلقة 🔁 2 خارج الحلقة ⏹
المدرّب يقول: «اعمل 5 ضغطات». أنت لا تحتاج قائمة، تحتاج فقط أن تعدّ. range هي «العدّاد».
for i in range(1, 6):
print("ضغطة رقم", i, "💪")
print("برافو! خلصت التمرين")ضغطة رقم 1 💪 ضغطة رقم 2 💪 ضغطة رقم 3 💪 ضغطة رقم 4 💪 ضغطة رقم 5 💪 برافو! خلصت التمرين
| range | معناها بالعربي | الأرقام |
|---|---|---|
| range(5) | 5 مرات، ابدأ من 0 (مثل المصعد) | 0 1 2 3 4 |
| range(1, 6) | من 1، وتوقف قبل 6 | 1 2 3 4 5 |
| range(0, 11, 2) | اقفز درجتين درجتين | 0 2 4 6 8 10 |
| range(5, 0, -1) | عدّ تنازلي | 5 4 3 2 1 |
# العدّ التنازلي للصاروخ 🚀
for i in range(5, 0, -1):
print(i)
print("انطلق 🚀")5 4 3 2 1 انطلق 🚀
في أول الأسبوع الحصّالة فاضية (0). كل يوم تضع فيها مبلغاً. في آخر الأسبوع تريد أن تعرف كم صار فيها. هذا أهم نمط في البرمجة: نبدأ من صفر قبل الحلقة، ونضيف داخلها.
week = [2, 0, 5, 1, 3] # كم دينار وضعت كل يوم
piggy_bank = 0 # الحصالة فاضية في البداية
for money in week:
piggy_bank = piggy_bank + money # نفس piggy_bank += money
print("صار بالحصالة:", piggy_bank, "دينار 🐷")صار بالحصالة: 11 دينار 🐷
| اليوم | money | الحصالة قبل | الحساب | الحصالة بعد |
|---|---|---|---|---|
| 1 | 2 | 0 | 0 + 2 | 2 |
| 2 | 0 | 2 | 2 + 0 | 2 |
| 3 | 5 | 2 | 2 + 5 | 7 |
| 4 | 1 | 7 | 7 + 1 | 8 |
| 5 | 3 | 8 | 8 + 3 | 11 |
المعلم يمرّ على العلامات واحدة واحدة، وإذا كانت العلامة أقل من 50 يزيد العدّاد واحداً.
grades = [70, 45, 90, 30, 60]
weak = 0
for g in grades:
if g < 50:
weak += 1
print(g, "← يحتاج تقوية")
print("عدد الطلاب المحتاجين تقوية:", weak)45 ← يحتاج تقوية 30 ← يحتاج تقوية عدد الطلاب المحتاجين تقوية: 2
في دفتر الحضور كل اسم بجانبه رقم: 1- علي، 2- لينا، 3- عمر. enumerate تعطيك الرقم والاسم في نفس الوقت.
students = ["Ali", "Lina", "Omar"]
for number, name in enumerate(students, start=1):
print(number, "-", name)1 - Ali 2 - Lina 3 - Omar
ونستعملها عندما نريد تعديل كل عنصر في القائمة (مثل ملف Chapter_3.py) — نحتاج الرقم حتى نعرف أين نكتب:
names = ["Ahmad", "Sarah", "John"]
for i, name in enumerate(names):
names[i] = name + "'s car" # i = مكان الاسم الحالي
print(names)["Ahmad's car", "Sarah's car", "John's car"]
| الدورة | i | name | ماذا يُكتب؟ |
|---|---|---|---|
| 1 | 0 | "Ahmad" | في المكان 0 ← Ahmad's car |
| 2 | 1 | "Sarah" | في المكان 1 ← Sarah's car |
| 3 | 2 | "John" | في المكان 2 ← John's car |
لو كتبنا names[0] لكتبنا كل مرة فوق نفس المكان الأول، ولبقي الباقي بدون تغيير. | |||
الكاشير يمرّ على طلبك سطراً سطراً: كل أكلة وكميتها، يضرب بالسعر، ويجمع كل شيء في المجموع — بالضبط مثل الحصّالة، لكن على قاموس. .items() تعطينا المفتاح والقيمة معاً.
menu = {"shawarma": 2.5, "juice": 1.25, "hummus": 1.5}
order = {"shawarma": 2, "juice": 3} # الطلب: أكلة ← كمية
total = 0
for food, qty in order.items():
cost = menu[food] * qty
total += cost
print(f"{food} x{qty} = {cost}")
print(f"المجموع: {total} دينار 🧾")shawarma x2 = 5.0 juice x3 = 3.75 المجموع: 8.75 دينار 🧾
1) نسيان النقطتين : بعد سطر for ← SyntaxError
2) نسيان المسافة قبل السطر الذي يجب أن يتكرر ← IndentationError
3) وضع total = 0 داخل الحلقة ← الحصالة تنفضّ في كل دورة! مكانه قبل الحلقة دائماً.
for i in range(4): print("مرحبا")؟ range(2, 5)؟ t = 0 ثم for n in [1, 2, 3]: t += n ثم print(t) total = 0: قبل الحلقة أم داخلها؟ | البند | مثال من الحياة | تذكّر هذا |
|---|---|---|
| 7. النصوص | 🚃 قطار العربات | أول حرف [0]، آخر حرف [-1] |
| 8. القوائم | 🥖 طابور المخبز | append ، remove ، pop |
| 9. Tuple / Set | 🎂 تاريخ الميلاد / ☝️ البصمة | Tuple لا يتغير، Set بلا تكرار |
| 10. القواميس | 🥙 منيو المطعم | menu["shawarma"] ← السعر |
| 11. المقارنة | ⚖️ الميزان / 🚗 رخصة القيادة | == سؤال، = تخزين |
| 12. الشروط | 🚦 إشارة المرور | أول شرط صحيح يفوز |
| 13. for | 📚 توزيع الدفاتر / 🐷 الحصالة | المجموع يبدأ من 0 قبل الحلقة |
اكتب برنامجاً فيه قاموس لعلامات 4 طلاب، ثم بحلقة for اطبع لكل طالب: «ممتاز» أو «ناجح» أو «راسب»، وفي النهاية اطبع معدل الصف.
grades = {"Ali": 92, "Lina": 67, "Omar": 41, "Sara": 85}
total = 0
for name, g in grades.items():
total += g
if g >= 90:
print(name, "← ممتاز 🌟")
elif g >= 50:
print(name, "← ناجح ✔")
else:
print(name, "← راسب ✘")
print("معدل الصف:", total / len(grades))Ali ← ممتاز 🌟 Lina ← ناجح ✔ Omar ← راسب ✘ Sara ← ناجح ✔ معدل الصف: 71.25