أساسيات بايثون 11: شرح if و else في بايثون للمبتدئين مع أمثلة وتمارين بسيطة

مرحبًا بك في الدرس الحادي عشر من سلسلة أساسيات بايثون على موقع بايثون العرب. في هذا الدرس سنشرح واحدًا من أهم مفاهيم البرمجة عمومًا، وهو الشروط في Python باستخدام if و else و elif.

الشروط تجعل البرنامج قادرًا على اتخاذ قرار. بدل أن ينفذ الكود بنفس الطريقة دائمًا، يمكننا أن نقول للبرنامج: إذا تحقق شرط معين نفذ هذا الأمر، وإذا لم يتحقق نفذ أمرًا آخر.

هذا الدرس مهم جدًا للمبتدئين؛ لأنك ستستخدم الشروط في أغلب البرامج: التحقق من العمر، فحص كلمة المرور، معرفة هل الرقم زوجي أم فردي، تقييم درجات الطلاب، التحكم في صلاحيات المستخدم، والتعامل مع إدخال المستخدم.

{getToc} $title={محتوى المقال}

{alertInfo} قبل هذا الدرس، من الأفضل أن تكون لديك فكرة عن العوامل في بايثون، لأن الشروط تعتمد كثيرًا على المقارنات مثل == و > و <. يمكنك مراجعة درس شرح Operators في Python.

ما معنى الشرط في البرمجة؟

الشرط في البرمجة هو سؤال يطرحه البرنامج، وتكون إجابته غالبًا إما:

  • True وتعني أن الشرط صحيح.
  • False وتعني أن الشرط غير صحيح.

مثال بسيط:

age = 20

print(age > 18)

الناتج:

True

لأن العمر 20 أكبر من 18، لذلك نتيجة المقارنة كانت True.

أما إذا غيرنا العمر:

age = 15

print(age > 18)

الناتج:

False

لأن العمر 15 ليس أكبر من 18.

استخدام if في Python

نستخدم if عندما نريد تنفيذ كود معين فقط إذا كان الشرط صحيحًا.

الشكل العام:

if condition:
    # code runs if condition is True

مثال:

age = 20

if age >= 18:
    print("مسموح لك بالدخول")

الناتج:

مسموح لك بالدخول

لأن الشرط age >= 18 صحيح.

{alertSuccess} الفكرة ببساطة: الكود الموجود داخل if لا يعمل إلا إذا كانت نتيجة الشرط True.

أهمية المسافات البادئة Indentation مع if

في بايثون، المسافة البادئة ليست شكلًا جماليًا فقط، بل هي جزء أساسي من الكود. أي سطر تريد أن يكون داخل الشرط يجب أن يكون مزاحًا للداخل بمسافة بادئة.

هذا كود صحيح:

age = 20

if age >= 18:
    print("مسموح لك بالدخول")

وهذا كود خاطئ:

age = 20

if age >= 18:
print("مسموح لك بالدخول")

قد يظهر خطأ لأن السطر الموجود بعد if ليس بداخله مسافة بادئة.

{alertWarning} في بايثون، أي كود تابع للشرط يجب أن يكون مزاحًا للداخل. غالبًا نستخدم 4 مسافات.

إذا أردت شرحًا أعمق لهذا الموضوع، اقرأ: أساسيات بايثون 3: المسافات البادئة Indentation Syntax.

استخدام else في Python

نستخدم else عندما نريد تنفيذ كود بديل إذا كان شرط if غير صحيح.

مثال:

age = 15

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

الناتج:

غير مسموح لك بالدخول

لأن العمر 15 أقل من 18، لذلك لم يتحقق شرط if، وانتقل البرنامج إلى else.

استخدام elif في Python

أحيانًا لا يكون عندك احتمالان فقط. قد تحتاج إلى أكثر من شرط. هنا نستخدم elif، وهي اختصار لفكرة else if.

مثال تقييم درجة طالب:

grade = 85

if grade >= 90:
    print("ممتاز")
elif grade >= 80:
    print("جيد جدًا")
elif grade >= 70:
    print("جيد")
else:
    print("تحتاج إلى تحسين")

الناتج:

جيد جدًا

لأن الدرجة 85 لا تحقق شرط 90، لكنها تحقق شرط 80.

الفرق بين if و elif و else

الأداة متى نستخدمها؟ هل تكتب أكثر من مرة؟
if لبداية الشرط الأساسي نعم، لكن داخل نفس السلسلة نبدأ بها مرة واحدة
elif لإضافة شرط آخر إذا لم يتحقق الشرط السابق نعم، يمكن استخدامها أكثر من مرة
else لتنفيذ كود عند عدم تحقق أي شرط سابق مرة واحدة فقط في نهاية السلسلة

عوامل المقارنة المستخدمة مع الشروط

الشروط غالبًا تعتمد على عوامل المقارنة. هذه أشهر العوامل التي ستستخدمها مع if:

العامل المعنى مثال
== يساوي x == 5
!= لا يساوي x != 5
> أكبر من x > 5
< أصغر من x < 5
>= أكبر من أو يساوي x >= 5
<= أصغر من أو يساوي x <= 5
{alertInfo} انتبه للفرق بين = و ==. الأول للإسناد، والثاني للمقارنة داخل الشروط.

استخدام and في الشروط

نستخدم and عندما نريد أن تتحقق أكثر من حالة في نفس الوقت.

age = 25
has_ticket = True

if age >= 18 and has_ticket:
    print("يمكنك الدخول")
else:
    print("لا يمكنك الدخول")

هنا يجب أن يكون العمر 18 أو أكثر، ويجب أن تكون قيمة has_ticket هي True.

استخدام or في الشروط

نستخدم or عندما يكفي تحقق شرط واحد فقط.

is_admin = False
is_owner = True

if is_admin or is_owner:
    print("لديك صلاحية الدخول")
else:
    print("ليس لديك صلاحية")

بما أن is_owner تساوي True، سيتم تنفيذ الكود داخل الشرط.

استخدام not في الشروط

نستخدم not لعكس النتيجة. فإذا كانت القيمة False تصبح كأنها True داخل الشرط.

is_logged_in = False

if not is_logged_in:
    print("الرجاء تسجيل الدخول")

لأن المستخدم غير مسجل الدخول، ستظهر الرسالة.

مثال عملي: معرفة هل الرقم زوجي أم فردي

من أشهر أمثلة الشروط في بايثون معرفة هل الرقم زوجي أم فردي. نستخدم هنا عامل باقي القسمة %.

number = 8

if number % 2 == 0:
    print("الرقم زوجي")
else:
    print("الرقم فردي")

إذا كان باقي قسمة الرقم على 2 يساوي صفرًا، فالرقم زوجي. وإذا لم يكن كذلك، فالرقم فردي.

شرحنا هذا المثال بالتفصيل هنا: بايثون بالمثال 2: معرفة هل الرقم زوجي أم فردي في Python.

مثال عملي: التحقق من كلمة المرور

لنكتب مثالًا بسيطًا يتحقق من كلمة مرور. هذا المثال يوضح كيف يمكن للشرط أن يحدد هل يسمح للمستخدم بالدخول أم لا.

password = "python123"

if password == "python123":
    print("تم تسجيل الدخول بنجاح")
else:
    print("كلمة المرور غير صحيحة")

الناتج:

تم تسجيل الدخول بنجاح

مثال مع input وإدخال المستخدم

يمكننا جعل المستخدم يكتب عمره بنفسه باستخدام input(). وبما أن input() ترجع النصوص، سنستخدم int() لتحويل الإدخال إلى رقم.

age = int(input("أدخل عمرك: "))

if age >= 18:
    print("أنت بالغ")
else:
    print("أنت أقل من 18 سنة")

لكن انتبه: إذا كتب المستخدم نصًا بدل رقم، قد يظهر خطأ ValueError. شرحنا هذا الخطأ هنا: حل خطأ ValueError invalid literal for int في Python.

الشروط المتداخلة Nested if

يمكنك وضع شرط داخل شرط آخر، وهذا يسمى Nested if. نستخدمه عندما يكون القرار الثاني يعتمد على تحقق القرار الأول.

age = 20
has_id = True

if age >= 18:
    if has_id:
        print("يمكنك الدخول")
    else:
        print("تحتاج إلى بطاقة هوية")
else:
    print("العمر غير مناسب")

هذا المثال يعني: إذا كان العمر مناسبًا، تحقق بعد ذلك من وجود بطاقة هوية.

{alertWarning} لا تكثر من الشروط المتداخلة بدون حاجة، لأن الكود قد يصبح صعب القراءة. أحيانًا يمكن استخدام and بدل Nested if.

كيف نختصر Nested if باستخدام and؟

في المثال السابق يمكننا كتابة الشرط بطريقة أبسط باستخدام and:

age = 20
has_id = True

if age >= 18 and has_id:
    print("يمكنك الدخول")
else:
    print("لا يمكنك الدخول")

هذا الكود أقصر، لكنه مناسب عندما تكون الرسالة البديلة واحدة. أما إذا كنت تريد رسائل مختلفة لكل حالة، فقد يكون Nested if أوضح.

أخطاء شائعة عند استخدام if و else

الخطأ الأول: نسيان النقطتين

هذا خطأ:

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

الصحيح:

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

الخطأ الثاني: استخدام = بدل ==

هذا خطأ:

if password = "123":

الصحيح:

if password == "123":

لأن = يستخدم لإسناد قيمة إلى متغير، أما == فيستخدم للمقارنة.

الخطأ الثالث: نسيان المسافة البادئة

هذا خطأ:

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

الصحيح:

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

الخطأ الرابع: ترتيب شروط elif بشكل غير صحيح

عند استخدام elif، انتبه لترتيب الشروط. مثلًا في تقييم الدرجات، يجب أن تبدأ من الأعلى إلى الأقل.

هذا ترتيب غير مناسب:

grade = 95

if grade >= 70:
    print("جيد")
elif grade >= 90:
    print("ممتاز")

رغم أن الدرجة 95، سيطبع البرنامج جيد لأن أول شرط تحقق. لذلك الأفضل:

grade = 95

if grade >= 90:
    print("ممتاز")
elif grade >= 70:
    print("جيد")

متى نستخدم الشروط في البرامج؟

نستخدم الشروط في حالات كثيرة جدًا، منها:

  • التحقق من عمر المستخدم.
  • معرفة هل الرقم زوجي أم فردي.
  • فحص كلمة المرور.
  • عرض رسالة مختلفة حسب النتيجة.
  • تحديد صلاحيات المستخدم.
  • تقييم درجات الطلاب.
  • التحقق من صحة إدخال المستخدم.
  • تشغيل جزء معين من البرنامج عند تحقق حالة محددة.

مثال تطبيقي كامل: تقييم درجة الطالب

هذا مثال يجمع input و int و if و elif و else:

grade = int(input("أدخل درجتك: "))

if grade >= 90:
    print("ممتاز")
elif grade >= 80:
    print("جيد جدًا")
elif grade >= 70:
    print("جيد")
else:
    print("تحتاج إلى تحسين")

هذا المثال مهم لأنه يشبه برامج حقيقية تعتمد على نتيجة المستخدم وتعرض له رسالة مناسبة.

أسئلة شائعة عن if و else في Python

هل يمكن استخدام if بدون else؟

نعم، يمكن استخدام if وحدها عندما تريد تنفيذ كود فقط عند تحقق الشرط، ولا تحتاج إلى كود بديل عند عدم تحقق الشرط.

هل يمكن استخدام أكثر من elif؟

نعم، يمكنك استخدام أكثر من elif عندما يكون لديك أكثر من احتمال، مثل تقييم الدرجات أو تحديد نوع المستخدم.

هل else إلزامية؟

لا، else ليست إلزامية. لكنها مفيدة عندما تريد تحديد ماذا يحدث إذا لم يتحقق أي شرط.

ما الفرق بين if منفصلة و elif؟

إذا كتبت عدة جمل if منفصلة، سيتم فحص كل شرط بشكل مستقل. أما elif فهي جزء من نفس سلسلة الشروط، ويتوقف البرنامج عند أول شرط يتحقق.

لماذا تظهر أخطاء كثيرة مع if في البداية؟

أكثر الأخطاء تكون بسبب نسيان النقطتين : أو نسيان المسافة البادئة أو استخدام = بدل ==. هذه أخطاء طبيعية للمبتدئين وتقل مع التدريب.

روابط مفيدة

خلاصة الدرس

في هذا الدرس تعلمنا شرح if و else و elif في Python، وفهمنا كيف يستخدم البرنامج الشروط لاتخاذ القرارات.

تعلمنا أن if تستخدم لتنفيذ كود عند تحقق شرط، وأن else تستخدم لتنفيذ كود بديل، وأن elif تساعدنا عندما يكون لدينا أكثر من احتمال.

وتعلمنا أيضًا استخدام عوامل المقارنة مثل == و >=، والعوامل المنطقية مثل and و or و not، وتعرفنا على أشهر الأخطاء التي تحدث مع الشروط.

{alertSuccess} الخلاصة السريعة: الشروط تجعل برنامجك ذكيًا؛ لأنها تسمح له بتنفيذ كود مختلف حسب الحالة أو النتيجة.

تمرين بسيط لك

اكتب برنامجًا يطلب من المستخدم إدخال درجته، ثم يطبع:

  • ممتاز إذا كانت الدرجة 90 أو أكثر.
  • جيد جدًا إذا كانت الدرجة 80 أو أكثر.
  • جيد إذا كانت الدرجة 70 أو أكثر.
  • تحتاج إلى تحسين إذا كانت أقل من 70.

ابدأ بهذا المثال:

grade = int(input("أدخل درجتك: "))

if grade >= 90:
    print("ممتاز")
elif grade >= 80:
    print("جيد جدًا")
elif grade >= 70:
    print("جيد")
else:
    print("تحتاج إلى تحسين")

إرسال تعليق

أحدث أقدم