AzLearn

التحكم في التدفق

Control Flow

مفهوم ~18 دقيقة

التحكم في التدفق — Control Flow

البرامج لا تسير في خط مستقيم دائماً. أحياناً تحتاج تقرير: “إذا كان كذا افعل هذا، وإلا افعل ذاك”. وأحياناً تحتاج تكرار عملية عشرات المرات. هذا ما يسمى التحكم في التدفق (control flow) — وهو قلب أي برنامج حقيقي.

الشروط بـ if/elif/else

الصيغة الأساسية:

# شرط بسيط — Simple condition
age = 18

if age >= 18:
    print("مسموح بالدخول")
else:
    print("غير مسموح")

لاحظ المسافة البادئة (indentation) — Python تعتمد عليها لتحديد ما ينتمي للشرط. استخدم دائماً 4 مسافات.

elif للشروط المتعددة:

# تقييم الدرجة — Grade evaluation
score = 75

if score >= 90:
    grade = "ممتاز"
elif score >= 80:
    grade = "جيد جداً"
elif score >= 70:
    grade = "جيد"
elif score >= 60:
    grade = "مقبول"
else:
    grade = "راسب"

print(f"تقديرك: {grade}")

Python تفحص الشروط بالترتيب وتتوقف عند أول شرط صحيح.

عوامل المقارنة

العاملالمعنىمثال
==يساويa == b
!=لا يساويa != b
<أصغر منa < b
>أكبر منa > b
<=أصغر أو يساويa <= b
>=أكبر أو يساويa >= b

العوامل المنطقية: and, or, not

# and — كلا الشرطين يجب أن يكونا صحيحَيْن
# and — both conditions must be true
age = 20
has_id = True

if age >= 18 and has_id:
    print("مسموح")

# or — يكفي أن يكون أحد الشرطين صحيحاً
# or — either condition is enough
is_admin = False
is_owner = True

if is_admin or is_owner:
    print("لديك صلاحية التعديل")

# not — عكس الشرط — not — negates the condition
is_banned = False
if not is_banned:
    print("يمكنك الدخول")
main.go

حلقة for — التكرار على عناصر

for تمشي على كل عنصر في متسلسلة (قائمة، نص، مجال):

# التكرار على نص — Iterate over a string
for char in "Python":
    print(char)

# التكرار على قائمة — Iterate over a list
fruits = ["تفاح", "موز", "برتقال"]
for fruit in fruits:
    print(f"الفاكهة: {fruit}")

range() — توليد أرقام متسلسلة

# range(n) — من 0 إلى n-1
for i in range(5):
    print(i)   # 0، 1، 2، 3، 4

# range(start, stop) — من start إلى stop-1
for i in range(1, 6):
    print(i)   # 1، 2، 3، 4، 5

# range(start, stop, step) — بخطوة محددة
for i in range(0, 10, 2):
    print(i)   # 0، 2، 4، 6، 8

# عكس — Reverse
for i in range(10, 0, -1):
    print(i)   # 10، 9، 8، ...، 1
main.go

while — الحلقة الشرطية

while تستمر طالما الشرط صحيح:

# عدّ تنازلي — Countdown
count = 5
while count > 0:
    print(f"العد التنازلي: {count}")
    count -= 1  # قلّل count بمقدار 1 — Decrease count by 1
print("انتهى!")

# مهم: تأكد أن الشرط سيصبح False في النهاية
# Important: ensure the condition will become False

while مفيدة عندما لا تعرف عدد التكرارات مسبقاً، كانتظار مدخل صحيح من المستخدم.

break — الخروج من الحلقة

# ابحث عن أول عدد قابل للقسمة على 7 — Find first divisible by 7
for n in range(1, 100):
    if n % 7 == 0:
        print(f"أول عدد: {n}")
        break  # اخرج من الحلقة فوراً — Exit loop immediately

continue — تخطي التكرار الحالي

# اطبع الأعداد الفردية فقط — Print only odd numbers
for n in range(1, 11):
    if n % 2 == 0:
        continue  # تجاهل الأعداد الزوجية — Skip even numbers
    print(n)
# سيطبع: 1، 3، 5، 7، 9

مثال FizzBuzz — اختبار شائع

FizzBuzz من أشهر التمارين البرمجية: اطبع الأعداد من 1 إلى 20، لكن اطبع “Fizz” بدلاً من المضاعفات الثلاثية، و"Buzz" بدلاً من المضاعفات الخماسية، و"FizzBuzz" إذا كان الاثنان.

main.go

لاحظ أننا نفحص n % 15 == 0 أولاً. إذا فحصنا n % 3 أولاً، ستُطبع “Fizz” للأعداد مثل 15 ولن نصل لـ “FizzBuzz” أبداً. ترتيب الشروط مهم.

الحلقات المتداخلة — Nested Loops

# مصفوفة 3×3 — 3×3 matrix
for row in range(1, 4):
    for col in range(1, 4):
        print(f"({row},{col})", end=" ")
    print()  # سطر جديد بعد كل صف — New line after each row

انتبه من التداخل الزائد — إذا وجدت ثلاث حلقات متداخلة أو أكثر، فكّر في تقسيم الكود إلى دوال.

تحدي — Challenge

خلاصة

التحكم في التدفق هو ما يجعل برنامجك ذكياً. if/elif/else للقرارات، for للتكرار على عناصر معروفة، while للتكرار حتى تحقق شرط، break للخروج المبكر، وcontinue لتخطي حالات معينة. تذكر دائماً المسافة البادئة — Python تعتمد عليها لفهم بنية الكود. في الدرس القادم ستتعلم كيف تُنظّم كودك في دوال قابلة لإعادة الاستخدام.