التحكم في التدفق
Control Flow
التحكم في التدفق — 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("يمكنك الدخول")
حلقة 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
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" إذا كان الاثنان.
لاحظ أننا نفحص 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
انتبه من التداخل الزائد — إذا وجدت ثلاث حلقات متداخلة أو أكثر، فكّر في تقسيم الكود إلى دوال.
خلاصة
التحكم في التدفق هو ما يجعل برنامجك ذكياً. if/elif/else للقرارات، for للتكرار على عناصر معروفة، while للتكرار حتى تحقق شرط، break للخروج المبكر، وcontinue لتخطي حالات معينة. تذكر دائماً المسافة البادئة — Python تعتمد عليها لفهم بنية الكود. في الدرس القادم ستتعلم كيف تُنظّم كودك في دوال قابلة لإعادة الاستخدام.