معاملات المقارنة في بايثون (Comparison Operators)
معاملات المقارنة (Comparison Operators) تُستخدم للمقارنة بين قيمتين، وتكون النتيجة دائماً قيمة منطقية (Boolean): إما True (صحيح) أو False (خطأ). هذه المعاملات هي حجر الأساس لاتخاذ القرارات في البرمجة. فبدونها، لن تتمكن برامجك من التحقق من الشروط، مثل "هل كلمة المرور صحيحة؟" أو "هل رصيد المستخدم كافٍ؟" أو "هل انتهت اللعبة؟". في هذا الدرس، سنتعرف على جميع معاملات المقارنة في بايثون وكيفية استخدامها بفعالية.
1. قائمة معاملات المقارنة
بايثون توفر 6 معاملات مقارنة أساسية. الجدول التالي يوضح كل معامل ووظيفته:
| المعامل | الاسم | الوصف | مثال | النتيجة |
|---|---|---|---|---|
== |
يساوي (Equal) | هل القيمة الأولى تساوي الثانية؟ | 5 == 5 |
True |
!= |
لا يساوي (Not Equal) | هل القيمة الأولى لا تساوي الثانية؟ | 5 != 3 |
True |
> |
أكبر من (Greater Than) | هل القيمة الأولى أكبر من الثانية؟ | 5 > 3 |
True |
< |
أصغر من (Less Than) | هل القيمة الأولى أصغر من الثانية؟ | 5 < 8 |
True |
>= |
أكبر من أو يساوي | هل القيمة الأولى أكبر من أو تساوي الثانية؟ | 5 >= 5 |
True |
<= |
أصغر من أو يساوي | هل القيمة الأولى أصغر من أو تساوي الثانية؟ | 5 <= 4 |
False |
2. المساواة (==) مقابل التعيين (=)
أحد أكثر الأخطاء شيوعاً بين المبتدئين هو الخلط بين معامل المساواة == ومعامل التعيين =.
=(يساوي واحد): يُستخدم لتعيين قيمة لمتغير (مثلاً: اجعل x تساوي 5).==(يساوي مرتين): يُستخدم للمقارنة والسؤال (مثلاً: هل x تساوي 5؟).
# التعيين Assignment (=)
x = 10 # ضع القيمة 10 داخل المتغير x
y = 20 # ضع القيمة 20 داخل المتغير y
# المقارنة Equality (==)
print(f"هل x تساوي 10؟ {x == 10}") # True
print(f"هل x تساوي y؟ {x == y}") # False
# مثال عملي: التحقق من كلمة المرور
saved_password = "Secret123"
user_input = "Secret123"
if user_input == saved_password:
print("كلمة المرور صحيحة ✓")
else:
print("كلمة المرور خاطئة ✗")
3. عدم المساواة (!=)
معامل عدم المساواة != يُرجع True إذا كانت القيمتان مختلفتين، و False إذا كانتا متساويتين.
current_color = "red"
target_color = "blue"
# هل اللون الحالي يختلف عن اللون المطلوب؟
if current_color != target_color:
print("الألوان غير متطابقة، يجب التغيير!")
else:
print("الألوان متطابقة.")
# مثال: التحقق من عدم القسمة على صفر
denominator = 0
if denominator != 0:
print(10 / denominator)
else:
print("خطأ: لا يمكن القسمة على صفر!")
4. مقارنة الأرقام (أكبر وأصغر)
تُستخدم المعاملات >, <, >=, <= للمقارنة بين القيم الرقمية.
age = 18
score = 85
# أكبر من وأصغر من
print(f"هل العمر أكبر من 21؟ {age > 21}")
print(f"هل العمر أصغر من 21؟ {age < 21}")
# أكبر من أو يساوي / أصغر من أو يساوي
passing_score = 50
print(f"هل الطالب ناجح؟ {score >= passing_score}")
# مثال عملي: التحقق من الرصيد
balance = 150
price = 200
if balance >= price:
print("عملية الشراء ناجحة")
else:
print(f"رصيدك غير كافٍ. ينقصك {price - balance} ريال")
5. مقارنة النصوص (String Comparison)
في بايثون، يمكنك مقارنة النصوص أيضاً! المقارنة تتم حسب الترتيب الأبجدي (Lexicographical Order) وقيم ASCII للأحرف.
# المساواة في النصوص (حساسة لحالة الأحرف)
print("apple" == "Apple") # False (a لا تساوي A)
print("apple" == "apple") # True
# الترتيب الأبجدي
# الحرف 'b' يأتي بعد 'a'، لذا 'banana' أكبر من 'apple'
print("banana" > "apple") # True
# الحرف 'c' أكبر من 'b'
print("cat" > "bat") # True
# مقارنة الأحرف الكبيرة والصغيرة
# في جدول ASCII، الأحرف الكبيرة (A-Z) لها قيم أصغر من الصغيرة (a-z)
print("A" < "a") # True (65 < 97)
# مثال عملي: ترتيب الأسماء
name1 = "Ziad"
name2 = "Ahmed"
if name1 < name2:
print(f"{name1} يأتي قبل {name2} في القائمة")
else:
print(f"{name2} يأتي قبل {name1} في القائمة")
6. المقارنة المتسلسلة (Chained Comparison)
ميزة رائعة في بايثون هي إمكانية دمج عدة مقارنات في سطر واحد، تماماً كما تفعل في الرياضيات.
age = 25
# الطريقة التقليدية (في لغات أخرى)
# if age >= 18 and age <= 60:
# طريقة بايثون المختصرة (Chained Comparison)
if 18 <= age <= 60:
print("العمر مقبول للوظيفة (بين 18 و 60)")
else:
print("العمر غير مطابق للشروط")
# مثال آخر
x = 5
y = 10
z = 15
# هل x أصغر من y، و y أصغر من z؟
print(f"x < y < z: {x < y < z}") # True
# هل القيم متساوية؟
a = b = c = 50
print(f"a == b == c: {a == b == c}") # True
7. الفرق بين == و is
في بايثون، هناك فرق دقيق ومهم بين == و is:
==(Equality): تتحقق مما إذا كانت القيم متساوية.is(Identity): تتحقق مما إذا كان المتغيران يشيران إلى نفس الكائن في الذاكرة.
# القوائم هي كائنات (Objects)
list1 = [1, 2, 3]
list2 = [1, 2, 3] # قائمة جديدة بنفس القيم
list3 = list1 # list3 تشير لنفس مكان list1
# المقارنة بالقيم (==)
print(f"list1 == list2: {list1 == list2}") # True (القيم متساوية)
# المقارنة بالهوية (is)
print(f"list1 is list2: {list1 is list2}") # False (كائنان مختلفان في الذاكرة)
print(f"list1 is list3: {list1 is list3}") # True (نفس الكائن)
# متى نستخدم is؟
# غالباً للتحقق من None أو True/False
value = None
if value is None:
print("القيمة فارغة (None)")
8. مثال شامل: نظام تقييم الدخول
لنطبق ما تعلمناه في نظام يتحقق من أهلية المستخدم للدخول إلى نادٍ رياضي.
"""
نظام التحقق من أهلية العضوية
الشروط:
1. العمر يجب أن يكون 18 أو أكثر
2. الحالة الصحية يجب أن تكون "جيدة"
3. الرصيد يجب أن يغطي رسوم الاشتراك (100 دولار)
"""
print("--- نظام التحقق من العضوية ---")
# بيانات المستخدم (يمكنك تغييرها للتجربة)
user_age = 20
health_status = "جيدة"
user_balance = 150
membership_cost = 100
# التحقق من الشروط
is_adult = user_age >= 18
is_healthy = health_status == "جيدة"
can_afford = user_balance >= membership_cost
print(f"\nنتائج التحقق:")
print(f"- العمر مناسب (>= 18): {is_adult}")
print(f"- الحالة الصحية جيدة: {is_healthy}")
print(f"- الرصيد كافٍ: {can_afford}")
# القرار النهائي (سنتعلم دمج الشروط بـ and في الدرس القادم)
# هنا نستخدم if متداخلة للتوضيح
if is_adult:
if is_healthy:
if can_afford:
print("\n✅ مبروك! تم قبول عضويتك.")
print(f"الرصيد المتبقي: {user_balance - membership_cost} دولار")
else:
print(f"\n❌ عذراً، رصيدك غير كافٍ. تحتاج {membership_cost} دولار.")
else:
print("\n❌ عذراً، الحالة الصحية لا تسمح بالانضمام.")
else:
print(f"\n❌ عذراً، العمر يجب أن يكون 18 عاماً على الأقل.")
💡 تذكر دائماً
- نتيجة أي عملية مقارنة هي دائماً
TrueأوFalse. - استخدم
==للمقارنة و=للتعيين. هذا أهم فرق! - يمكنك استخدام المقارنة المتسلسلة
10 < x < 20لكتابة كود أنظف. - مقارنة النصوص حساسة لحالة الأحرف ("A" لا تساوي "a").
الخطوة التالية
الآن بعد أن عرفت كيف تقارن القيم، كيف تدمج عدة شروط معاً؟
الدرس التالي: المعاملات المنطقية (and, or, not)