مرحبًا بك في الدرس الحادي عشر من سلسلة أساسيات بايثون على موقع بايثون العرب. في هذا الدرس سنشرح واحدًا من أهم مفاهيم البرمجة عمومًا، وهو الشروط في 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 في البداية؟
أكثر الأخطاء تكون بسبب نسيان النقطتين : أو نسيان المسافة البادئة أو استخدام = بدل ==. هذه أخطاء طبيعية للمبتدئين وتقل مع التدريب.
روابط مفيدة
- شرح الحلقات Loops في بايثون
- أساسيات بايثون 6: شرح Operators في Python
- أساسيات بايثون 7: أنواع البيانات في Python
- شرح المسافات البادئة Indentation في بايثون
- بايثون بالمثال 2: معرفة هل الرقم زوجي أم فردي في Python
- حل خطأ ValueError invalid literal for int في Python
- محرر بايثون العرب لتجربة الأكواد أونلاين
- توثيق Python الرسمي حول if statements
خلاصة الدرس
في هذا الدرس تعلمنا شرح 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("تحتاج إلى تحسين")