اتخاذ القرارات في الكود
الجمل الشرطية تسمح لبرنامجك باتخاذ قرارات وتنفيذ كود مختلف بناءً على الشروط. هذا أساسي لإنشاء برامج ديناميكية ومتجاوبة.
جملة if
أبسط شكل للشرط - تنفذ الكود فقط إذا كان الشرط صحيحاً:
# جملة if أساسية
العمر = 20
if العمر >= 18:
print("أنت بالغ")
print("يمكنك التصويت")
# الكود أدناه يعمل بغض النظر عن الشرط
print("البرنامج يستمر...")
بايثون تستخدم المسافة البادئة (4 مسافات أو tab واحد) لتعريف كتل الكود. كل الكود داخل جملة if يجب أن يكون بمسافة بادئة. هذا يختلف عن اللغات الأخرى التي تستخدم الأقواس {}.
جملة if-else
تنفذ كتلة إذا كان صحيحاً، وأخرى إذا كان خاطئاً:
# جملة if-else
درجة_الحرارة = 25
if درجة_الحرارة > 30:
print("الجو حار!")
else:
print("الجو ليس حاراً جداً")
# مثال آخر
كلمة_السر = "سري123"
إدخال_المستخدم = "سري123"
if إدخال_المستخدم == كلمة_السر:
print("تم منح الوصول!")
else:
print("تم رفض الوصول!")
جملة if-elif-else
للتعامل مع شروط متعددة:
# حاسبة الدرجات
الدرجة = 85
if الدرجة >= 90:
التقدير = "ممتاز"
elif الدرجة >= 80:
التقدير = "جيد جداً"
elif الدرجة >= 70:
التقدير = "جيد"
elif الدرجة >= 60:
التقدير = "مقبول"
else:
التقدير = "راسب"
print(f"الدرجة: {الدرجة} -> التقدير: {التقدير}")
# نصيحة الطقس
درجة_الحرارة = 15
if درجة_الحرارة < 0:
print("الجو متجمد! ابقَ في الداخل.")
elif درجة_الحرارة < 10:
print("الجو بارد. ارتدِ معطفاً.")
elif درجة_الحرارة < 20:
print("الجو معتدل. جاكيت خفيف يكفي.")
elif درجة_الحرارة < 30:
print("الجو دافئ. استمتع بالطقس!")
else:
print("الجو حار! اشرب ماء كثيراً.")
بايثون تفحص الشروط من أعلى لأسفل وتنفذ أول كتلة مطابقة. بمجرد أن يكون شرط صحيحاً، يتم تخطي الباقي. ضع الشروط الأكثر تحديداً أولاً!
الشروط المتداخلة
يمكنك وضع جمل if داخل جمل if أخرى:
# مثال if متداخل
العمر = 25
لديه_رخصة = True
لديه_سيارة = True
if العمر >= 18:
print("عمرك يسمح لك بالقيادة")
if لديه_رخصة:
print("لديك رخصة")
if لديه_سيارة:
print("يمكنك قيادة سيارتك الخاصة!")
else:
print("تحتاج للحصول على سيارة")
else:
print("تحتاج للحصول على رخصة أولاً")
else:
print("أنت صغير جداً للقيادة")
# يمكن كتابة هذا أيضاً باستخدام 'and'
if العمر >= 18 and لديه_رخصة and لديه_سيارة:
print("يمكنك قيادة سيارتك الخاصة!")
elif العمر >= 18 and لديه_رخصة:
print("يمكنك القيادة، لكن تحتاج سيارة")
elif العمر >= 18:
print("عمرك مناسب، لكن تحتاج رخصة وسيارة")
else:
print("صغير جداً للقيادة")
دمج الشروط
استخدم العوامل المنطقية لإنشاء شروط معقدة:
# استخدام 'and' - كلاهما يجب أن يكون صحيحاً
العمر = 25
الدخل = 50000
if العمر >= 18 and الدخل >= 30000:
print("أنت مؤهل للقرض")
# استخدام 'or' - واحد على الأقل يجب أن يكون صحيحاً
عضو = False
لديه_كوبون = True
if عضو or لديه_كوبون:
print("تحصل على خصم!")
# استخدام 'not' - يعكس الشرط
محظور = False
if not محظور:
print("مرحباً بك في الموقع!")
# شروط معقدة
اليوم = "السبت"
الطقس = "مشمس"
لديه_مال = True
if (اليوم == "السبت" or اليوم == "الجمعة") and الطقس == "مشمس" and لديه_مال:
print("لنذهب إلى الشاطئ!")
else:
print("ربما في وقت آخر")
العامل الثلاثي (التعبير الشرطي)
طريقة مختصرة لكتابة جمل if-else بسيطة:
# الصياغة: قيمة_إذا_صح if شرط else قيمة_إذا_خطأ
العمر = 20
الحالة = "بالغ" if العمر >= 18 else "قاصر"
print(الحالة) # بالغ
# الطريقة التقليدية
if العمر >= 18:
الحالة = "بالغ"
else:
الحالة = "قاصر"
# المزيد من الأمثلة
الدرجة = 75
النتيجة = "ناجح" if الدرجة >= 60 else "راسب"
print(النتيجة) # ناجح
الرقم = 7
الزوجية = "زوجي" if الرقم % 2 == 0 else "فردي"
print(f"{الرقم} هو {الزوجية}") # 7 هو فردي
# يمكن تسلسلها (لكن حافظ على القراءة!)
الدرجة = 85
التقدير = "ممتاز" if الدرجة >= 90 else "جيد جداً" if الدرجة >= 80 else "جيد" if الدرجة >= 70 else "راسب"
print(التقدير) # جيد جداً
القيم الصادقة والكاذبة
بايثون يمكنها تقييم أي قيمة كـ True أو False:
# القيم الكاذبة (تُقيّم كـ False):
# - False
# - None
# - 0, 0.0
# - "" (نص فارغ)
# - [], (), {} (مجموعات فارغة)
# كل شيء آخر صادق
# أمثلة عملية
الاسم = ""
if الاسم:
print(f"مرحباً، {الاسم}!")
else:
print("الاسم فارغ")
# التحقق من وجود عناصر في القائمة
العناصر = [1, 2, 3]
if العناصر:
print(f"القائمة تحتوي {len(العناصر)} عناصر")
else:
print("القائمة فارغة")
# التحقق من None
النتيجة = None
if النتيجة is None:
print("لا توجد نتيجة بعد")
# استخدام 'or' للقيم الافتراضية
اسم_المستخدم = ""
اسم_العرض = اسم_المستخدم or "مجهول"
print(اسم_العرض) # مجهول
اسم_المستخدم = "سارة"
اسم_العرض = اسم_المستخدم or "مجهول"
print(اسم_العرض) # سارة
جملة match (بايثون 3.10+)
نسخة بايثون من switch-case لمطابقة الأنماط:
# جملة match (بايثون 3.10+)
def نوع_اليوم(اليوم):
match اليوم.lower():
case "السبت" | "الأحد":
return "عطلة نهاية الأسبوع"
case "الاثنين" | "الثلاثاء" | "الأربعاء" | "الخميس" | "الجمعة":
return "يوم عمل"
case _: # الحالة الافتراضية
return "يوم غير صالح"
print(نوع_اليوم("السبت")) # عطلة نهاية الأسبوع
print(نوع_اليوم("الاثنين")) # يوم عمل
# مثال أكواد HTTP
def حالة_http(الكود):
match الكود:
case 200:
return "نجاح"
case 404:
return "غير موجود"
case 500:
return "خطأ في الخادم"
case _:
return f"حالة غير معروفة: {الكود}"
print(حالة_http(200)) # نجاح
print(حالة_http(404)) # غير موجود
أنماط شائعة
# 1. التحقق من صحة الإدخال
عمر_المستخدم = 25
if not isinstance(عمر_المستخدم, int) or عمر_المستخدم < 0:
print("عمر غير صالح")
elif عمر_المستخدم < 18:
print("قاصر")
else:
print("بالغ")
# 2. فحص النطاق
الدرجة = 85
if 0 <= الدرجة <= 100:
print("درجة صالحة")
else:
print("درجة غير صالحة")
# 3. اختبار العضوية
الخيارات_الصالحة = ["نعم", "لا", "ربما"]
الاختيار = "نعم"
if الاختيار in الخيارات_الصالحة:
print(f"اخترت: {الاختيار}")
else:
print("خيار غير صالح")
# 4. فحص النوع
البيانات = "مرحباً"
if isinstance(البيانات, str):
print(f"نص بطول {len(البيانات)}")
elif isinstance(البيانات, (int, float)):
print(f"رقم: {البيانات}")
elif isinstance(البيانات, list):
print(f"قائمة بها {len(البيانات)} عناصر")
else:
print(f"نوع غير معروف: {type(البيانات)}")
تحدي: نظام تسعير التذاكر
أنشئ نظام تسعير تذاكر يحسب السعر بناءً على:
- السعر الأساسي: 20 ريال
- الأطفال (أقل من 12): خصم 50%
- كبار السن (65 وأكثر): خصم 30%
- الطلاب (مع حالة طالب): خصم 20%
- عطلة نهاية الأسبوع: 5 ريال إضافية
- مقعد VIP: 15 ريال إضافية
اختبر مع: العمر=10، طالب=False، عطلة=True، vip=False
أظهر الحل
# نظام تسعير التذاكر
العمر = 10
طالب = False
عطلة_نهاية_الأسبوع = True
vip = False
السعر_الأساسي = 20
السعر_النهائي = السعر_الأساسي
# تطبيق خصم العمر (واحد فقط يُطبق)
if العمر < 12:
الخصم = 0.50
نوع_الخصم = "طفل"
elif العمر >= 65:
الخصم = 0.30
نوع_الخصم = "كبير سن"
elif طالب:
الخصم = 0.20
نوع_الخصم = "طالب"
else:
الخصم = 0
نوع_الخصم = "عادي"
السعر_النهائي = السعر_الأساسي * (1 - الخصم)
# تطبيق الإضافات
if عطلة_نهاية_الأسبوع:
السعر_النهائي += 5
if vip:
السعر_النهائي += 15
# طباعة الفاتورة
print("=== فاتورة التذكرة ===")
print(f"السعر الأساسي: {السعر_الأساسي} ريال")
print(f"الفئة: {نوع_الخصم} ({int(الخصم*100)}% خصم)")
print(f"عطلة نهاية الأسبوع: {'نعم (+5 ريال)' if عطلة_نهاية_الأسبوع else 'لا'}")
print(f"مقعد VIP: {'نعم (+15 ريال)' if vip else 'لا'}")
print(f"السعر النهائي: {السعر_النهائي:.2f} ريال")
النقاط الرئيسية
ifتنفذ الكود عندما يكون الشرط Trueelseتتعامل مع الحالة عندما يكون الشرط Falseelifتفحص شروطاً إضافية- المسافة البادئة تحدد كتل الكود في بايثون
- استخدم
and،or،notللشروط المعقدة - العامل الثلاثي:
قيمة_إذا_صح if شرط else قيمة_إذا_خطأ - القيم الكاذبة:
False،None،0،""،[]،{} - جملة
matchلمطابقة الأنماط (بايثون 3.10+)
في الدرس القادم، سنتعلم عن الحلقات لتكرار الكود عدة مرات!