المعاملات المنطقية في بايثون (Logical Operators)

في البرمجة، نادراً ما نتخذ قرارات بناءً على شرط واحد فقط. غالباً ما نحتاج للتحقق من عدة شروط في وقت واحد. مثلاً: "للدخول إلى النظام، يجب أن يكون اسم المستخدم صحيحاً و كلمة المرور صحيحة". أو "للحصول على خصم، يجب أن تكون طالباً أو متقاعداً". هنا يأتي دور المعاملات المنطقية (Logical Operators). في بايثون، لدينا ثلاث كلمات مفتاحية بسيطة وقوية للتعامل مع المنطق: and (و)، or (أو)، و not (ليس). في هذا الدرس، سنتعلم كيف نستخدم هذه الأدوات لبناء شروط ذكية ومركبة.

1. المعاملات المنطقية الثلاثة

بايثون تستخدم كلمات إنجليزية بسيطة للمعاملات المنطقية، مما يجعل الكود مقروءاً جداً:

المعامل الوصف النتيجة تكون True إذا... مثال
and و (الجمع المنطقي) كان كلا الشرطين صحيحاً x > 5 and x < 10
or أو (الفصل المنطقي) كان أحد الشرطين (أو كلاهما) صحيحاً x == 5 or y == 5
not النفي (العكس) كان الشرط خاطئاً (يعكس النتيجة) not (x > 5)

2. معامل "و" (and)

المعامل and يتطلب أن يكون كل ما حوله صحيحاً ليعطي نتيجة صحيحة. إذا كان أي جزء خطأ، فالنتيجة النهائية خطأ.

logical_and.py
# جدول الحقيقة لـ and
print(True and True)    # True (فقط هذه الحالة صحيحة)
print(True and False)   # False
print(False and True)   # False
print(False and False)  # False

# مثال عملي: نظام تسجيل الدخول
username = "admin"
password = "123"

# يجب أن يتحقق الشرطان معاً
is_valid_user = (username == "admin") and (password == "123")

if is_valid_user:
    print("تم تسجيل الدخول بنجاح ✓")
else:
    print("اسم المستخدم أو كلمة المرور خطأ ✗")

# مثال آخر: التحقق من النطاق
age = 25
# هل العمر أكبر من 18 وأقل من 30؟
if age > 18 and age < 30:
    print("العمر مناسب للبرنامج الشبابي")
النتيجة
True False False False تم تسجيل الدخول بنجاح ✓ العمر مناسب للبرنامج الشبابي

3. معامل "أو" (or)

المعامل or متساهل أكثر. يكفي أن يكون واحد فقط من الشروط صحيحاً ليعطي نتيجة صحيحة. النتيجة تكون خطأ فقط إذا كان كل شيء خطأ.

logical_or.py
# جدول الحقيقة لـ or
print(True or True)    # True
print(True or False)   # True
print(False or True)   # True
print(False or False)  # False (فقط هذه الحالة خاطئة)

# مثال عملي: التحقق من الخصم
is_student = False
is_senior = True  # متقاعد

# يكفي تحقق شرط واحد للحصول على الخصم
if is_student or is_senior:
    print("مبروك! حصلت على خصم 20%")
else:
    print("عذراً، لا يوجد خصم متاح")

# مثال آخر: قبول الدفع
has_cash = False
has_credit_card = True

if has_cash or has_credit_card:
    print("يمكنك إتمام عملية الشراء")
else:
    print("لا توجد وسيلة دفع متاحة")
النتيجة
True True True False مبروك! حصلت على خصم 20% يمكنك إتمام عملية الشراء

4. معامل النفي (not)

المعامل not ببساطة يعكس القيمة المنطقية. إذا كانت True تصبح False، والعكس صحيح. يُقرأ كـ "ليس".

logical_not.py
# عكس القيم
print(not True)   # False
print(not False)  # True

# مثال عملي: التحقق من عدم وجود شيء
is_raining = False

if not is_raining:
    print("الجو جميل، يمكننا الخروج!")
else:
    print("الجو ممطر، ابق في المنزل.")

# مثال مع القوائم
cart = []  # عربة تسوق فارغة

# القائمة الفارغة تعتبر False، لذا not cart ستكون True
if not cart:
    print("عربة التسوق فارغة")

# دمج not مع معاملات أخرى
x = 10
if not (x > 20):  # ليس أكبر من 20 (أي أصغر من أو يساوي 20)
    print("x ليس أكبر من 20")
النتيجة
False True الجو جميل، يمكننا الخروج! عربة التسوق فارغة x ليس أكبر من 20

5. دمج المعاملات (Combining Operators)

يمكنك دمج and و or و not لبناء شروط معقدة جداً. هنا يصبح استخدام الأقواس () مهماً جداً لتوضيح الترتيب.

ترتيب الأولويات (Precedence):

  1. not (يُنفذ أولاً)
  2. and
  3. or (يُنفذ أخيراً)

complex_logic.py
# مثال: شروط التوظيف
# يجب أن يكون المتقدم (لديه شهادة جامعية) و (لديه خبرة سنتين أو يعرف بايثون)

has_degree = True
years_experience = 1
knows_python = True

# لاحظ استخدام الأقواس لتجميع (or)
is_hired = has_degree and (years_experience >= 2 or knows_python)

if is_hired:
    print("مبروك! تم قبولك للوظيفة")
else:
    print("للأسف، لم تستوفِ الشروط")

# ماذا لو أزلنا الأقواس؟
# has_degree and years_experience >= 2 or knows_python
# سيتم تقييم and أولاً!
# (has_degree and years_experience >= 2) or knows_python
# هذا يعني أن أي شخص يعرف بايثون سيتم قبوله حتى لو لم يكن لديه شهادة! وهذا خطأ في المنطق.
النتيجة
مبروك! تم قبولك للوظيفة

6. تقييم الدائرة القصيرة (Short-Circuit Evaluation)

بايثون ذكية وكسولة (بالمعنى الجيد!). عند تقييم الشروط المنطقية، تتوقف بمجرد معرفة النتيجة النهائية. هذا يُسمى "Short-Circuit Evaluation".

  • في and: إذا كان الشرط الأول False، تتوقف بايثون فوراً (لأن النتيجة ستكون حتماً False).
  • في or: إذا كان الشرط الأول True، تتوقف بايثون فوراً (لأن النتيجة ستكون حتماً True).
short_circuit.py
def check_first():
    print("تم فحص الشرط الأول")
    return False

def check_second():
    print("تم فحص الشرط الثاني")
    return True

print("--- اختبار AND ---")
# بما أن الأول False، لن يتم فحص الثاني أبداً
if check_first() and check_second():
    print("نجح")
else:
    print("فشل")

print("\n--- اختبار OR ---")
def check_true():
    print("تم فحص الشرط الأول (True)")
    return True

# بما أن الأول True، لن يتم فحص الثاني أبداً
if check_true() or check_second():
    print("نجح")

# فائدة عملية: تجنب الأخطاء
x = 0
# إذا كان x صفراً، الشرط الأول (x != 0) سيكون False
# ولن يتم تنفيذ القسمة (10 / x) وبالتالي نتجنب خطأ القسمة على صفر
if x != 0 and (10 / x) > 2:
    print("النتيجة أكبر من 2")
else:
    print("تم تجنب الخطأ بذكاء!")
النتيجة
--- اختبار AND --- تم فحص الشرط الأول فشل --- اختبار OR --- تم فحص الشرط الأول (True) نجح تم تجنب الخطأ بذكاء!

7. مثال شامل: نظام صلاحيات المستخدم

لنطبق كل ما تعلمناه في نظام يتحقق من صلاحيات المستخدم للوصول إلى لوحة تحكم سرية.

permissions_system.py
"""
نظام الصلاحيات
للوصول إلى لوحة التحكم، يجب أن يكون المستخدم:
1. مسجلاً للدخول (is_logged_in)
2. AND
3. (مديراً (is_admin) OR مشرفاً (is_moderator))
4. AND
5. حسابه غير محظور (NOT is_banned)
"""

print("--- نظام التحقق من الصلاحيات ---")

# حالة المستخدم (جرب تغيير هذه القيم)
is_logged_in = True
is_admin = False
is_moderator = True
is_banned = False

# بناء الشرط المركب
# نستخدم الأقواس لتجميع (admin or moderator)
can_access = is_logged_in and (is_admin or is_moderator) and not is_banned

print(f"مسجل دخول: {is_logged_in}")
print(f"مدير: {is_admin}")
print(f"مشرف: {is_moderator}")
print(f"محظور: {is_banned}")
print("-" * 30)

if can_access:
    print("✅ تم السماح بالدخول إلى لوحة التحكم.")
    
    if is_admin:
        print("مرحباً أيها المدير! لديك صلاحيات كاملة.")
    else:
        print("مرحباً أيها المشرف! لديك صلاحيات محدودة.")
        
else:
    print("❌ تم رفض الوصول!")
    
    # تقديم سبب الرفض (للمساعدة في الفهم)
    if not is_logged_in:
        print("السبب: يجب تسجيل الدخول أولاً.")
    elif is_banned:
        print("السبب: حسابك محظور.")
    elif not (is_admin or is_moderator):
        print("السبب: ليس لديك الصلاحيات الكافية (لست مديراً أو مشرفاً).")
النتيجة
--- نظام التحقق من الصلاحيات --- مسجل دخول: True مدير: False مشرف: True محظور: False ------------------------------ ✅ تم السماح بالدخول إلى لوحة التحكم. مرحباً أيها المشرف! لديك صلاحيات محدودة.
💡 خلاصة المنطق
  • and: كل الشروط يجب أن تكون صحيحة. (صارم)
  • or: يكفي شرط واحد صحيح. (متساهل)
  • not: يعكس الحقيقة.
  • استخدم الأقواس () دائماً عند دمج and و or لتجنب الأخطاء المنطقية.
  • تذكر تقييم الدائرة القصيرة: رتب شروطك بحيث تكون الشروط الأسهل أو الأكثر احتمالاً للحسم في البداية لتحسين الأداء وتجنب الأخطاء.

الخطوة التالية

الآن لديك كل الأدوات اللازمة (مقارنة ومنطق) لبناء قرارات حقيقية!

الدرس التالي: جملة if الشرطية (If Statement)
المحرر الذكي

اكتب الكود وشاهد النتيجة فوراً

جرب الآن مجاناً
قناة ديف عربي

تابع أحدث الدروس والتحديثات مباشرة على واتساب

انضم الآن