كل درس فيه شرح قصير، أمثلة بتقدر تشغّلها هون بالصفحة، وأسئلة بتكتب حلها وبتفحصه فوراً. التلميح والحل مقفولين بعدّاد، عشان تعطي حالك فرصة تفكر قبل ما تشوفهم.
اكتب وشغّلكل سؤال إله محرر. اضغط «شغّل» أو Ctrl + Enter وبتشوف الناتج تحته.
افحص الحلزر «افحص» بيجرّب كودك على عدة حالات وبيحكيلك وين الغلط بالزبط.
التلميح بعد شويالعدّاد بيبلش أول ما تكتب بالمحرر. التلميح بيفتح بعد نص دقيقة تقريباً.
الحل بعد ما تحاولالحل بيفتح بعد ٢ لـ ٦ دقايق حسب صعوبة السؤال، أو فوراً إذا نجحت بالفحص.
الملعب
مكان حر تجرب فيه أي كود. المشغّل بيشتغل جوّا الصفحة، فما بتحتاج تنزّل إشي. إذا البرنامج طلب input رح يطلعلك مربع كتابة بالناتج.
Ctrl + Enterالمشغّل عم يتحمّل…
01
الطباعة والمتغيرات
print بتطبع إشي على الشاشة. المتغير هو صندوق إله اسم، بتحط فيه قيمة وبترجعلها بعدين. الإشارة = معناها «خزّن هالقيمة بهالاسم»، مش «بيساوي» متل الرياضيات.
print("مرحبا يا عالم")
name = "سارة"
age = 19
print(name)
print("العمر:", age)
print(f"أنا {name} وعمري {age} سنة")
لما تحط f قبل النص، بتقدر تحط أي متغير جوّا {} وبينكتب مكانه. هاد اسمه f-string.
لو بلّشت بـ score >= 60، العلامة 95 كانت رح تطلع «ناجح»، لأنه أول شرط صحيح هو اللي بيتنفذ.
06
القوائم lists
القائمة بتخزن أكتر من قيمة بمتغير واحد. كل عنصر إله رقم (index) بيبلش من 0. الأرقام السالبة بتعد من الآخر.
fruits = ["تفاح", "موز", "برتقال"]
print(fruits[0]) # أول عنصر
print(fruits[-1]) # آخر عنصر
fruits.append("عنب") # زيد عنصر بالآخر
print(len(fruits)) # كم عنصر
print("موز" in fruits)
سهل
أول وآخر وطول
عندك القائمة nums = [4, 8, 15, 16, 23, 42]. اطبع أول عنصر، بعدين آخر عنصر، بعدين عدد العناصر، كل واحد بسطر.
for بتمشي على عناصر إشي واحد واحد، وبكل لفّة بتحط العنصر الحالي بمتغير وبتنفّذ الكود اللي جوّاها. منستعملها لما نكون عارفين على شو بدنا نلف: قائمة، نص، أو عدد مرات محدد.
fruits = ["تفاح", "موز", "برتقال"]
for fruit in fruits:
print("بحب", fruit)
for letter in "Hi!":
print(letter)
range: سلسلة أرقام
الكتابة
الأرقام
ملاحظة
range(5)
0 1 2 3 4
بتبلش من 0، والـ 5 مش داخلة
range(2, 6)
2 3 4 5
من 2 لحد قبل 6
range(0, 10, 2)
0 2 4 6 8
القفزة 2
range(5, 0, -1)
5 4 3 2 1
عد تنازلي
هاد مثال بيجمع الأرقام من 1 لـ 4. الجدول تحته بيبين شو بيصير بكل لفّة:
total = 0
for i in range(1, 5):
total += i
print("i =", i, " total =", total)
print("المجموع:", total)
اللفّة
i
total قبل
total بعد
1
1
0
1
2
2
1
3
3
3
3
6
4
4
6
10
سهل
من 1 لـ 10
اطبع الأرقام من 1 لـ 10، كل رقم بسطر، باستعمال for.
الناتج المتوقع
1
2
3
…
10
range(1, 10) بتوقف عند 9. الرقم التاني لازم يكون واحد أكتر من آخر رقم بدك ياه.
for i in range(1, 11):
print(i)
متوسط
مجموع 1 لـ 100
احسب مجموع كل الأرقام من 1 لـ 100 بحلقة for، واطبع المجموع بس (رقم واحد).
الناتج المتوقع
5050
اعمل متغير total = 0قبل الحلقة، وجوّا الحلقة زيد عليه total += i. اطبعه بعد الحلقة (بدون إزاحة)، مش جوّاها.
total = 0
for i in range(1, 101):
total += i
print(total)
لو حطيت print جوّا الحلقة، كان رح ينطبع 100 رقم بدل رقم واحد.
متوسط
الأسماء الطويلة
من القائمة الموجودة، اطبع بس الأسماء اللي فيها أكتر من 4 أحرف، كل اسم بسطر.
الناتج المتوقع
محمود
عبدالله
لف على القائمة بـ for name in names: وجوّاها حط if بتفحص len(name) > 4.
names = ["علي", "محمود", "ليلى", "عبدالله", "رنا"]
for name in names:
if len(name) > 4:
print(name)
08
حلقة while
while بتضل تعيد الكود طول ما الشرط صحيح. قبل كل لفّة بتفحص الشرط، وأول ما يصير غلط بتطلع. منستعملها لما ما بنعرف قديش رح نلف، بس بنعرف إمتى لازم نوقف.
count = 1
while count <= 5:
print("اللفة رقم", count)
count += 1
print("طلعنا من الحلقة، count صار", count)
حلقة ما بتخلص: إذا نسيت تغيّر المتغير اللي بالشرط (متل count += 1)، الشرط رح يضل صحيح للأبد. المشغّل هون بيوقف أي برنامج بعد 5 ثواني، وبتقدر توقفه بزر «وقّف».
for
while
منستعملها لما
عندنا قائمة أو عدد لفّات معروف
بنستنى شرط يتغيّر (جواب مستخدم، رقم يوصل حد)
العدّاد
بيتغيّر لحاله
إنت المسؤول تغيّره
مثال
اطبع كل الطلاب
اسأل لحد ما تنكتب كلمة السر الصح
سهل
عد تنازلي
باستعمال while، اطبع الأرقام من 10 نزولاً لـ 1، وبعدها اطبع انطلق!.
الناتج المتوقع
10
9
…
1
انطلق!
الشرط while n > 0:. جوّا الحلقة اطبع n بعدين نزّله n -= 1. «انطلق!» برّا الحلقة.
n = 10
while n > 0:
print(n)
n -= 1
print("انطلق!")
متوسط
كلمة السر
اطلب كلمة السر من المستخدم. طول ما هي مش python123، اطبع غلط، جرب كمان مرة واسأله من جديد. لما يكتبها صح اطبع أهلا فيك!.
مثال: لما يكتب abc بعدين python123
غلط، جرب كمان مرة
أهلا فيك!
اسأل مرة قبل الحلقة: password = input(). بعدين while password != "python123": وجوّاها اطبع رسالة الغلط واسأل من جديد بنفس المتغير.
break بتطلع من الحلقة كلها فوراً. continue بتترك اللفّة الحالية وبتنط عاللفّة اللي بعدها. الثنتين بيشتغلوا مع for و while.
for n in range(1, 10):
if n == 3:
continue # نط عن 3
if n == 6:
break # وقّف كل إشي عند 6
print(n)
print("بعد الحلقة")
متوسط
انط ووقّف
لف على الأرقام من 1 لـ 20. انط عن مضاعفات الـ 3 (ما تطبعها)، ولما توصل 17 وقّف الحلقة كلها بدون ما تطبعها.
الناتج المتوقع (كل رقم بسطر)
1 2 4 5 7 8 10 11 13 14 16
جوّا for n in range(1, 21): افحص أول إشي n == 17 مع break، بعدين n % 3 == 0 مع continue، وآخر إشي اطبع.
for n in range(1, 21):
if n == 17:
break
if n % 3 == 0:
continue
print(n)
10
for جوّا for
لما تحط حلقة جوّا حلقة، الحلقة الداخلية بتخلص كل لفّاتها بكل لفّة وحدة من الخارجية. فكّر فيها متل الساعة: عقرب الدقايق بيلف 60 مرة كاملة قبل ما عقرب الساعات يتحرك خطوة وحدة.
عدد مرات تنفيذ الكود الداخلي = لفّات الخارجية × لفّات الداخلية. بالمثال تحت: 3 × 4 = 12 مرة. اضغط «الخطوة الجاية» وراقب كيف j بترجع لـ 1 كل ما i تزيد.
for i in range(1, 4):
for j in range(1, 5):
print(i * j, end=" ")
print()
i = –
j = –
لفّات: 0 / 12
اضغط «الخطوة الجاية» لتبلش.
end=" " بتخلي print تحط مسافة بدل سطر جديد، عشان هيك الأرقام بتنطبع جنب بعض. و print() الفاضية بتنزل سطر. هاد المثال جاهز للتشغيل:
for i in range(1, 4):
for j in range(1, 5):
print(i * j, end=" ")
print()
متوسط
مثلث نجوم
اطبع مثلث من 5 أسطر. استعمل حلقتين: الخارجية للأسطر، والداخلية بتطبع النجوم واحدة واحدة. ممنوع تستعمل "*" * i.
الناتج المتوقع
*
**
***
****
*****
الخارجية for i in range(1, 6): رقم السطر هو عدد النجوم. الداخلية بتلف i مرات وبتطبع print("*", end=""). بعد الداخلية حط print() لتنزل سطر.
for i in range(1, 6):
for j in range(i):
print("*", end="")
print()
لاحظ إنه حدود الحلقة الداخلية بتعتمد على i، فكل سطر بيطلع أطول من اللي قبله.
متوسط
جدول الضرب
اطبع جدول الضرب من 1 لـ 5. كل سطر فيه 5 أرقام مفصولة بمسافة أو Tab.
نفس مثال الـ stepper فوق، بس الحلقتين من 1 لـ 5. استعمل end="\t" أو end=" ".
for i in range(1, 6):
for j in range(1, 6):
print(i * j, end="\t")
print()
صعب
كل الأزواج
اطبع كل الأزواج i j من الأرقام 1 لـ 4 بحيث i أصغر من j. كل زوج بسطر.
الناتج المتوقع
1 2
1 3
1 4
2 3
2 4
3 4
خلّي الحلقة الداخلية تبلش من i + 1 بدل 1: for j in range(i + 1, 5). هيك j دايماً أكبر من i بدون ما تحتاج if.
for i in range(1, 5):
for j in range(i + 1, 5):
print(i, j)
حل تاني صحيح: الحلقتين من 1 لـ 4 مع if i < j: قبل الطباعة. بيشتغل، بس بيلف 16 مرة بدل 6.
11
الدوال def
الدالة هي كود إله اسم، بتكتبه مرة وبتستعمله كل ما بدك. بتاخد مدخلات (parameters) وبترجع نتيجة بـ return. الفرق بين return و print: الأولى بترجع قيمة بتقدر تخزنها وتستعملها، التانية بس بتعرض على الشاشة.
def area(width, height):
return width * height
a = area(3, 4)
print("المساحة:", a)
print(area(10, 2) + 1)
صعب
دالتين صغار
اكتب دالة is_even(n) بترجع True إذا الرقم زوجي و False إذا فردي. واكتب دالة biggest(nums) بترجع أكبر رقم بالقائمة، بدون ما تستعمل max(). الفحص رح يستدعي الدالتين على عدة قيم.
مثال
is_even(10) → True
biggest([3, 9, 2, 7]) → 9
is_even سطر واحد: return n % 2 == 0. بـ biggest خلّي أول عنصر هو «الأكبر لهلأ»، ولف على القائمة: إذا لقيت رقم أكبر منه، بدّله.
def is_even(n):
return n % 2 == 0
def biggest(nums):
big = nums[0]
for x in nums:
if x > big:
big = x
return big
print(is_even(10))
print(biggest([3, 9, 2, 7]))
ليش ما بلّشنا big = 0؟ لأنه لو كل الأرقام سالبة، متل [-5, -2]، كان الجواب رح يطلع 0 وهو مش بالقائمة أصلاً.