الشروط والتحكم في تدفق البرنامج
مقدمة: لماذا نحتاج الشروط؟
الفصل الأول: مقدمة – لماذا نحتاج إلى الشروط؟
في الدرس السابق، تعلمنا كيف نخزن البيانات في متغيرات ونتعامل مع أنواعها المختلفة. لكن البرنامج الذي لا يتخذ قرارات هو مجرد سطر أوامر ثابت. تخيل أنك تبني تطبيقاً لتسجيل الدخول: كيف ستتحقق من صحة كلمة المرور؟ أو تطبيقاً للطقس: كيف ستقرر عرض رسالة "الجو بارد" إذا كانت الحرارة أقل من 15 درجة؟
هنا يأتي دور الشروط (Conditions). الشروط تسمح لبرنامجك باتخاذ قرارات بناءً على قيم المتغيرات أو مدخلات المستخدم. بدونها، سيكون الكود الخاص بك جامداً وغير قادر على التفاعل مع العالم الحقيقي. في هذا الدرس، سنتعلم كيف نجعل برنامجنا "يفكر" ويتخذ قرارات منطقية.
ما هي الجملة الشرطية if؟
الجملة الشرطية الأساسية في بايثون هي if. تكتبها بالشكل التالي:
if condition:
# الكود الذي سيتم تنفيذه إذا كان الشرط صحيحاً
لاحظ أن المسافة البادئة (Indentation) مهمة جداً في بايثون. أي كود تريد تنفيذه داخل الشرط يجب أن يكون مسبوقاً بـ 4 مسافات أو علامة tab واحدة. هذه هي الطريقة التي تعرف بها بايثون أي جزء من الكود يتبع الشرط.
مثال عملي: التحقق من عمر المستخدم
لنفترض أننا نريد كتابة برنامج يتحقق من عمر المستخدم ويقرر إذا كان يمكنه الدخول إلى موقع مخصص للبالغين.
# طلب العمر من المستخدم
age = int(input("أدخل عمرك: "))
# الشرط
if age >= 18:
print("مرحباً بك! يمكنك الدخول.")
print("تذكر أن تتصفح بمسؤولية.")
print("هذه الرسالة تظهر دائماً خارج الشرط.")
الشرح:
- السطر الأول: نطلب من المستخدم إدخال عمره. الدالة
input()ترجع نصاً، لذلك نستخدمint()لتحويله إلى رقم صحيح. - السطر الثالث: نتحقق إذا كان العمر أكبر من أو يساوي 18.
- السطر الرابع والخامس: إذا تحقق الشرط، يتم طباعة هاتين الرسالتين. لاحظ المسافة البادئة.
- السطر السابع: هذا السطر ليس له مسافة بادئة، لذلك سيتم تنفيذه دائماً بغض النظر عن نتيجة الشرط.
إضافة مسار بديل: else
ماذا لو كان العمر أقل من 18؟ في المثال السابق، لن يحدث شيء. لمعالجة هذه الحالة، نستخدم else.
age = int(input("أدخل عمرك: "))
if age >= 18:
print("مرحباً بك! يمكنك الدخول.")
else:
print("عذراً، هذا الموقع مخصص لمن هم فوق 18 عاماً.")
print("نتمنى لك يوماً سعيداً.")
الآن، البرنامج لديه مساران: واحد للقبول، وآخر للرفض. هذا هو التحكم الأساسي في تدفق البرنامج.
شروط متعددة: elif
في الحياة الواقعية، القرارات ليست دائماً ثنائية (صح/خطأ). أحياناً تحتاج إلى عدة خيارات. هنا يأتي دور elif (اختصار لـ else if).
مثال: نظام تقييم الطلاب بناءً على درجاتهم.
score = int(input("أدخل درجتك: "))
if score >= 90:
grade = "A"
print("ممتاز! استمر.")
elif score >= 80:
grade = "B"
print("جيد جداً.")
elif score >= 70:
grade = "C"
print("جيد.")
elif score >= 60:
grade = "D"
print("مقبول.")
else:
grade = "F"
print("راسب. حاول مرة أخرى.")
print(f"تقديرك هو: {grade}")
ملاحظات مهمة:
- يتم فحص الشروط بالترتيب من الأعلى إلى الأسفل.
- بمجرد أن يتحقق شرط ما، يتم تنفيذ الكود الخاص به ويتجاهل البرنامج باقي الشروط.
- يمكن أن يكون لديك أي عدد من
elif، لكنelseاختياري ويوضع في النهاية.
العوامل المنطقية: and, or, not
في كثير من الأحيان، تحتاج إلى دمج أكثر من شرط في جملة واحدة. لهذا نستخدم العوامل المنطقية.
- and: يتحقق الشرط فقط إذا كان كلا الجزأين صحيحين.
- or: يتحقق الشرط إذا كان أحد الجزأين صحيحاً على الأقل.
- not: يعكس قيمة الشرط (يجعل الصحيح خطأ والعكس).
مثال عملي: التحقق من صلاحية الدخول إلى نادي رياضي.
age = int(input("أدخل عمرك: "))
has_membership = input("هل لديك عضوية؟ (نعم/لا): ")
# استخدام and: يجب أن يكون العمر فوق 16 ولديه عضوية
if age >= 16 and has_membership == "نعم":
print("أهلاً بك في النادي!")
else:
print("عذراً، لا يمكنك الدخول.")
# استخدام or: مثال آخر - الدخول مجاني للأطفال تحت 5 سنوات أو لكبار السن فوق 65
if age < 5 or age > 65:
print("الدخول مجاني لك.")
else:
print("رسوم الدخول: 10 دولار.")
أخطاء شائعة يجب تجنبها
- نسيان النقطتين الرأسيتين (:) بعد الشرط: هذا هو الخطأ الأكثر شيوعاً. تذكر دائماً أن تنهي سطر الشرط بنقطتين.
- المسافة البادئة غير المنتظمة: لا تخلط بين المسافات وعلامات التبويب (tab). استخدم 4 مسافات باستمرار.
- استخدام علامة = بدلاً من ==: في الشرط،
=تستخدم لتعيين قيمة، بينما==تستخدم للمقارنة. - نسيان تحويل input إلى int: إذا كنت تقارن رقماً، تأكد من تحويل الإدخال إلى عدد صحيح باستخدام
int().
💡 نصيحة عملية
عند كتابة الشروط، حاول أن تجعلها بسيطة ومباشرة. إذا أصبح الشرط طويلاً جداً، فكر في تقسيمه إلى متغيرات منفصلة. مثلاً:
# بدلاً من هذا:
if age >= 18 and has_id == "نعم" and not is_blacklisted:
# استخدم هذا:
is_eligible = age >= 18 and has_id == "نعم" and not is_blacklisted
if is_eligible:
هذا يجعل الكود أكثر قابلية للقراءة والفهم.
تمرين صغير: تطبيق عملي
حان وقت التطبيق! اكتب برنامجاً يقوم بما يلي:
- يطلب من المستخدم إدخال رقمين (عدد صحيح).
- يطلب من المستخدم إدخال عملية حسابية (+, -, *, /).
- بناءً على العملية المدخلة، يقوم بإجراء العملية الحسابية المناسبة وطباعة النتيجة.
- إذا قام المستخدم بإدخال عملية غير معروفة، اطبع رسالة "عملية غير صالحة".
- تأكد من معالجة حالة القسمة على صفر.
تلميحات:
- استخدم
input()لجمع البيانات. - استخدم
ifوelifوelseللتحقق من العملية. - تذكر تحويل الأرقام إلى
intأوfloat.
حاول كتابة الكود بنفسك قبل النظر إلى الحل أدناه.
اضغط هنا لعرض الحل المقترح
# طلب الأرقام من المستخدم
num1 = float(input("أدخل الرقم الأول: "))
num2 = float(input("أدخل الرقم الثاني: "))
operation = input("أدخل العملية (+, -, *, /): ")
# تنفيذ العملية بناءً على الشرط
if operation == "+":
result = num1 + num2
print(f"النتيجة: {num1} + {num2} = {result}")
elif operation == "-":
result = num1 - num2
print(f"النتيجة: {num1} - {num2} = {result}")
elif operation == "*":
result = num1 * num2
print(f"النتيجة: {num1} * {num2} = {result}")
elif operation == "/":
if num2 == 0:
print("خطأ: لا يمكن القسمة على صفر!")
else:
result = num1 / num2
print(f"النتيجة: {num1} / {num2} = {result}")
else:
print("عملية غير صالحة. الرجاء إدخال +, -, *, / فقط.")
الخلاصة
في هذا الدرس، تعلمنا كيف نجعل برامجنا تتخذ قرارات باستخدام الجمل الشرطية. أتقنت استخدام if و elif و else، وتعلمت كيفية دمج الشروط باستخدام العوامل المنطقية. هذه المهارة أساسية لأي برنامج تفاعلي. في الدرس القادم، سنتعلم كيف نكرر تنفيذ الأوامر باستخدام الحلقات (Loops)، مما سيمكننا من معالجة كميات كبيرة من البيانات بكفاءة.
جاري تحميل التقييمات...