Python: الجمل الشرطية
في الدرس السابق تعلمنا كيفية إصدار أحكام صواب/خطأ باستخدام المنطق البولياني. الآن دعنا نتعلم الجمل الشرطية — جعل البرنامج ينفذ كوداً مختلفاً بناءً على شروط مختلفة. هذا أحد أهم هياكل التحكم في أي لغة برمجة.
1. جملة if: شرط بسيط
صيغة if واضحة ومباشرة:
if condition:
code to execute when condition is True
لاحظ النقطتين : و المسافة البادئة (عادة 4 مسافات) — المسافة البادئة تخبر بايثون أي كود ينتمي إلى if.
age = 18
if age >= 18:
print("You are an adult!")
print("This is also inside the if block.")
print("This is outside the if and always executes.")
المخرجات:
You are an adult!
This is also inside the if block.
This is outside the if and always executes.
{}). الكود داخل نفس كتلة if يجب أن يكون له نفس المسافة البادئة. إذا كنت معتاداً على C أو Java، قد تحتاج بعض الوقت لتعتاد، لكن بايثون تُجبرك على كتابة كود نظيف.
▶ مثال: فحص نجاح/رسوب (الصعوبة ⭐)
score = 75
if score >= 60:
print("Congratulations, you passed!")
print(f"Your score is {score}.")
print("Score recorded.")
المخرجات:
Congratulations, you passed!
Your score is 75.
Score recorded.
2. if-else: اختر بين اثنين
عندما يكون الشرط صحيحاً، افعل شيئاً؛ عندما يكون خاطئاً، افعل شيئاً آخر:
if condition:
execute when True
else:
execute when False
score = 45
if score >= 60:
print("Passed!")
else:
print("Failed, need to retake.")
المخرجات:
Failed, need to retake.
(1) المسافة البادئة لـ if و else
password = "123456"
if password == "123456":
print("Password correct, welcome back!")
else:
print("Wrong password, try again.")
print("If you forgot your password, click 'Forgot Password'.")
else تحتاج أيضاً إلى نقطتين :، ويجب أن تكون else محاذية لـ if المقابل (نفس مستوى المسافة البادئة).
3. if-elif-else: اختر من خيارات متعددة
السيناريوهات الواقعية غالباً ما يكون لها أكثر من احتمالين. استخدم elif (اختصار لـ else if) للتعامل مع فروع متعددة:
if condition1:
execute when condition1 is True
elif condition2:
execute when condition2 is True
elif condition3:
execute when condition3 is True
else:
execute when none of the above are True
تتحقق بايثون من الأعلى إلى الأسفل — أول شرط صحيح يتم تنفيذه، ثم يتم الخروج من هيكل if-elif-else بأكمله.
score = 85
if score >= 90:
print("Excellent!")
elif score >= 80:
print("Good!")
elif score >= 70:
print("Average.")
elif score >= 60:
print("Pass.")
else:
print("Failed, need to retake.")
# يُخرج: Good!
if score >= 60: أولاً، درجة 85 ستدخل فرع "Pass" ولن تصل أبداً إلى "Good" أو "Excellent." ضع الشروط الأكثر صرامة أولاً.
▶ مثال: نظام طلب المطعم (الصعوبة ⭐⭐)
print("=== Today's Meals ===")
print("1. Braised Beef Noodles $10")
print("2. Shredded Pork Rice $8")
print("3. Tomato Egg Rice $6")
print("4. Egg Fried Rice $4")
choice = 3
if choice == 1:
print("You ordered Braised Beef Noodles, $10.")
elif choice == 2:
print("You ordered Shredded Pork Rice, $8.")
elif choice == 3:
print("You ordered Tomato Egg Rice, $6.")
elif choice == 4:
print("You ordered Egg Fried Rice, $4.")
else:
print("Sorry, invalid option.")
print("Enjoy your meal!")
المخرجات:
=== Today's Meals ===
1. Braised Beef Noodles $10
2. Shredded Pork Rice $8
3. Tomato Egg Rice $6
4. Egg Fried Rice $4
You ordered Tomato Egg Rice, $6.
Enjoy your meal!
4. الشروط المتداخلة
يمكن أن تحتوي الشروط على شروط أخرى. هذا يُسمى التداخل.
age = 20
has_ticket = True
if age >= 18:
print("Adult, can enter.")
if has_ticket:
print("Has ticket, please proceed.")
else:
print("Please buy a ticket first.")
else:
print("Minor, entry denied.")
المخرجات:
Adult, can enter.
Has ticket, please proceed.
(1) لا تفرط في التداخل
التداخل بحد ذاته ليس خطأ، لكن أكثر من 3 مستويات يجعل الكود صعب القراءة:
# ❌ غير موصى به: تداخل كثير
user_input = "y"
is_admin = True
has_permission = True
if user_input == "y":
if is_admin:
if has_permission:
print("Operation successful!")
else:
print("No permission.")
else:
print("Not an admin.")
else:
print("Operation canceled.")
قم بتسويته باستخدام العوامل المنطقية:
# ✅ موصى به: استخدم and لتقليل التداخل
user_input = "y"
is_admin = True
has_permission = True
if user_input != "y":
print("Operation canceled.")
elif is_admin and has_permission:
print("Operation successful!")
else:
print("Insufficient permissions.")
and/or، أو استخراج المنطق العميق في دالة. الكود الجيد "مسطح"، وليس "عميقاً."
▶ مثال: حاسبة تكلفة الشحن (الصعوبة ⭐⭐)
# حساب الشحن بناءً على المنطقة والوزن ومستوى العضوية
region = "domestic" # "domestic" أو "international"
weight = 3.5 # kg
is_vip = False
if region == "domestic":
if weight <= 1:
shipping = 10
elif weight <= 5:
shipping = 15
else:
shipping = 20
else:
if weight <= 1:
shipping = 50
elif weight <= 5:
shipping = 80
else:
shipping = 120
# VIP يحصل على خصم 20%
if is_vip:
shipping *= 0.8
print(f"Region: {region}")
print(f"Weight: {weight}kg")
print(f"Shipping: ${shipping:.0f}")
المخرجات:
Region: domestic
Weight: 3.5kg
Shipping: $15
5. التعبير الثلاثي (التعبير الشرطي)
لدى بايثون صيغة if-else في سطر واحد تسمى التعبير الثلاثي:
# الطريقة العادية
age = 20
if age >= 18:
status = "adult"
else:
status = "minor"
# التعبير الثلاثي (سطر واحد)
status = "adult" if age >= 18 else "minor"
print(status) # adult
البنية:
value1 if condition else value2
إذا كان الشرط صحيحاً، خذ value1؛ وإلا، خذ value2.
(1) الاستخدام العملي
# أخرج نتيجة بناءً على الدرجة
score = 88
result = "passed" if score >= 60 else "failed"
print(f"Exam result: {result}") # Exam result: passed
# البحث عن القيمة الافتراضية
name = input("Enter your name: ") or "Guest"
greeting = f"Hello, {name}" if name else "Hello, Guest"
print(greeting)
elif) أو الفروع طويلة، التزم بـ if-elif-else العادي. الإيجاز ≠ قابلية القراءة.
6. pass: لا تفعل شيئاً
أحياناً تحتاج إلى عنصر نائب — بناء الجملة يتطلب كوداً، لكنك لم تقرر بعد ماذا تكتب. استخدم pass:
if age >= 18:
pass # TODO: أضف منطق البالغين لاحقاً
else:
print("Minor, cannot register.")
pass تعني "لا تفعل شيئاً هنا، استمر." تُستخدم غالباً لـ:
- عنصر نائب: الهيكل أولاً، املأ التفاصيل لاحقاً
- دالة فارغة:
def my_function(): pass - فئة فارغة:
class MyClass: pass
# استخدام في العالم الحقيقي
if user_age >= 18:
register_user() # تابع مع التسجيل
else:
pass # لا معالجة خاصة للقصر حتى الآن
# TODO مع pass. سيجمع VS Code جميع عناصر TODO للرجوع إليها لاحقاً.
7. حالات الاستخدام الشائعة
- التحقق من صحة النماذج: تحقق مما إذا كان الإدخال فارغاً، والتنسيق صحيحاً، والطول يفي بالمتطلبات.
- مستويات الأذونات: المستخدمون العاديون يرون واجهة A، مستخدمي VIP يرون واجهة B، المشرفون يرون واجهة C.
- آلة حالة اللعبة: تحقق مما إذا كانت اللعبة قد انتهت، أو تم اجتياز مستوى، أو تم كسب إنجاز.
- حساب السعر: الخصومات، عروض الأعضاء، العروض الموسمية — مجموعات شرطية مختلفة تؤدي إلى أسعار نهائية مختلفة.
- قائمة التنقل: المستخدم يدخل 1/2/3/4 على وحدة التحكم، والبرنامج يدخل وحدات وظيفية مختلفة.
❓ أسئلة شائعة
elif و if؟ لماذا لا نستخدم كلها if؟elif يُفحص فقط إذا لم تتحقق الشروط السابقة، بينما جمل if المستقلة تُفحص بغض النظر. مع ثلاث جمل if مستقلة لدرجة 85، "Excellent" و "Good" و "Average" كلها ستُنفّذ. مع if-elif-elif، فقط فرع "Good" الأول المتطابق سيشتغل. استخدم elif لـ "اختر واحداً"، استخدم جمل if متعددة لـ "افحص كل منها بشكل مستقل."📖 ملخص
ifيتبعه شرط؛ إذا كان صحيحاً، يتم تشغيل الكتلة ذات المسافة البادئةelseيعالج الحالة الخاطئة؛ لا يمكن استخدامه بمفردهelifيعالج فروعاً متعددة، يُفحص من الأعلى إلى الأسفل؛ أول شرط صحيح يُنفّذ- الشروط المتداخلة تعالج التسلسلات الهرمية المعقدة، لكن حافظ على التداخل تحت 3 مستويات
- التعبير الثلاثي
x if condition else yللاختيارات البسيطة في سطر واحد passعنصر نائب عندما يتطلب بناء الجملة كوداً لكن ليس لديك ما تفعله بعد- عادات جيدة: الشروط الأكثر صرامة أولاً، حافظ على التداخل تحت 3 مستويات، سوّ باستخدام
and/orعندما يمكن
📝 تمارين
-
أساسي (الصعوبة ⭐): اكتب برنامجاً للتحقق مما إذا كان الرقم فردياً أم زوجياً. أدخل عدداً صحيحاً؛ أخرج "فردي" أو "زوجي." تلميح:
n % 2 == 0تعني زوجي. -
متوسط (الصعوبة ⭐⭐): اكتب برنامج تقييم صحة BMI. أدخل الوزن (كجم) والطول (م)، احسب BMI، ثم أخرج:
- BMI < 18.5 ← "نحيف"
- 18.5 ≤ BMI < 24 ← "طبيعي"
- 24 ≤ BMI < 28 ← "وزن زائد"
- BMI ≥ 28 ← "سمنة"
-
تحدي (الصعوبة ⭐⭐⭐): اكتب آلة حاسبة بسيطة. يستقبل البرنامج ثلاث مدخلات: الرقم الأول، العامل (
+-*/)، الرقم الثاني. نفذ العملية وأخرج النتيجة. تعامل مع:- القسمة على صفر: أخرج "لا يمكن القسمة على صفر"
- عامل غير صالح: أخرج "عامل غير صالح"
- الحالة العادية: أخرج نتيجة العملية الحسابية