Menu
العربية

معاملات بايثون: الحسابية والمنطقية والمقارنة

جولة شاملة على معاملات لغة بايثون: الحسابية، والمقارنة، والمنطقية، والإسناد، والعضوية، والهوية، مع أمثلة عملية على كل نوع.

المعاملات في بايثون مجرد رموز لتنفيذ أفعال

المُعامِل (Operator) هو رمز أو كلمة مفتاحية قصيرة تُخبر بايثون بأن يفعل شيئًا ما بقيمة واحدة أو قيمتين، مثل جمعهما أو مقارنتهما أو التحقق مما إذا كانت إحداهما تحتوي الأخرى. أنت تعرف بعضها بالفعل من الرياضيات الأساسية، لكن بايثون يقدّم عدة معاملات إضافية للمنطق والاحتواء والهوية.

سنستعرض الفئات الرئيسية واحدة تلو الأخرى.

المعاملات الحسابية في بايثون

المعاملات الحسابية المعتادة، بالإضافة إلى بعض الإضافات المميزة في بايثون:

main.py
Output
Click Run to see the output here.

هناك نقطتان في هذه القائمة يسهل نسيانهما:

  • / تُرجع قيمة من نوع float حتى لو كان الطرفان عددين صحيحين. فمثلًا 10 / 2 ناتجها 5.0. وإذا أردت القسمة الصحيحة (بدون كسور) استخدم //.
  • % هو معامل باقي القسمة. وتُعدّ n % 2 == 0 أنظف طريقة للتحقق من أن n عدد زوجي.

تتبع بايثون أولوية المعاملات الرياضية المعتادة: ** أقوى ارتباطًا من * و /، وهما بدورهما أقوى من + و -. والأقواس تتجاوز كل ذلك:

main.py
Output
Click Run to see the output here.

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

معاملات المقارنة في بايثون

ست عمليات مقارنة، وكل واحدة منها ترجّع قيمة منطقية (True أو False):

main.py
Output
Click Run to see the output here.

تتيح لك بايثون ربط عمليات المقارنة ببعضها، وهي ميزة غير مألوفة في لغات أخرى لكنها عملية جدًا:

main.py
Output
Click Run to see the output here.

يعني هذا السطر بالعربية: "العمر لا يقل عن 18 وأقل من 65". في الخلفية، بايثون تعامله وكأنه 18 <= age and age < 65، لكنه يقرأ كما تكتبه في المعادلات الرياضية تمامًا.

المعاملات المنطقية and or not

تُكتب هذه المعاملات في بايثون بالكلمات الإنجليزية مباشرةً، وليس برموز:

main.py
Output
Click Run to see the output here.

تفصيلان يستحق الإشارة إليهما:

التقييم القصير (Short-circuit evaluation). المعامل and يتوقف عند أول قيمة falsy، وor يتوقف عند أول قيمة truthy. يعني الطرف الثاني لا يُنفَّذ أصلاً إذا كان الطرف الأول كافياً لحسم النتيجة. هذه الخاصية مفيدة جداً لتفادي الأخطاء بأمان:

main.py
Output
Click Run to see the output here.

and و or في بايثون بيرجّعوا القيمة نفسها، مش دايمًا True أو False. بيرجّعوا المُعامِل اللي حدّد النتيجة:

main.py
Output
Click Run to see the output here.

هتلاقي في الأكواد الحقيقية سطر زي name = user_input or "anonymous" — ده نمط شائع لتعيين قيمة افتراضية، وهو مبني على نفس السلوك اللي شرحناه.

معاملات الإسناد في بايثون

المعامل = بيقوم بعملية الإسناد، أما الصيغ المركبة فبتجمع بين عملية حسابية والإسناد في نفس الوقت:

main.py
Output
Click Run to see the output here.

الصيغ المختصرة هذي تشتغل كمان مع النصوص (s += "more") والقوائم (lst += [4, 5]). ما هي أسرع من الصيغة الكاملة، بس أقصر في الكتابة وبس.

معامل in في بايثون: التحقق من وجود عنصر

يتيح لك هذا المعامل اختبار ما إذا كانت قيمة معينة موجودة داخل حاوية أو لا:

main.py
Output
Click Run to see the output here.

يشتغل in مع أي كائن قابل للتكرار (iterable) — القوائم، الـ tuples، المجموعات، النصوص، القواميس، وغيرها. لكن انتبه للأداء: استخدام in مع قائمة يكون بتعقيد O(n)، بينما مع المجموعات (set) أو القواميس (dict) يكون O(1). هذا الفرق يظهر بوضوح عندما تحتاج للتحقق من وجود عنصر مرات كثيرة.

الفرق بين is و == في بايثون

يتحقق is مما إذا كان المتغيران يشيران إلى نفس الكائن في الذاكرة، وليس فقط إلى قيمتين متساويتين:

main.py
Output
Click Run to see the output here.

في أغلب الحالات اللي هتقابلك هتحتاج ==. أما is فبيتألق فعلاً في حالة واحدة بس، وهي المقارنة مع None و True و False:

main.py
Output
Click Run to see the output here.

العُرف في مجتمع بايثون واضح وثابت: نستخدم is None، وليس == None. ونفس الأمر ينطبق على is True (مع أنك نادراً ما تحتاجها فعلياً).

المعاملات على مستوى البِت (تجاوز هذا القسم في القراءة الأولى)

تُوفّر بايثون أيضاً مجموعة من المعاملات على مستوى البِت — وهي & و| و^ و~ و<< و>> — وتُستخدم للتعامل مع البتات المفردة داخل العدد الصحيح. ستجدها مفيدة في التشفير والشبكات منخفضة المستوى وبعض الخوارزميات المتخصصة. لا بأس بتجاهلها تماماً في أول قراءة لك.

معامل الفظّ (:=)

أضافت بايثون 3.8 المعامل :=، وهو يقوم بعملية الإسناد ويُرجِع القيمة في تعبير واحد. يكون مفيداً داخل الشروط حين تريد التقاط نتيجة ما واختبارها في آنٍ معاً:

main.py
Output
Click Run to see the output here.

بدون معامل الفظ، راح تضطر تستدعي len(numbers) مرتين أو تضيف سطر زيادة. هو مش ضروري، لكن استخدمه في الأماكن اللي يقلل فيها التكرار.

أولوية المعاملات في بايثون — مرجع سريع

ترتيب المعاملات من الأقوى ارتباطًا إلى الأضعف، مقتصرًا على اللي راح تستخدمه فعليًا:

  1. ** — الأُس
  2. *, /, //, % — الضرب والقسمة
  3. +, - — الجمع والطرح
  4. <, <=, >, >=, ==, != — معاملات المقارنة
  5. not
  6. and
  7. or

لو فيه أي شك، استخدم الأقواس. الوضوح أهم من الذكاء الزائد.

الخطوة التالية: التحكم في مسار التنفيذ

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

الأسئلة الشائعة

ما هي الأنواع الرئيسية للمعاملات في بايثون؟

المعاملات الحسابية (+, -, *, /, //, %, **)، ومعاملات المقارنة (==, !=, <, <=, >, >=)، والمعاملات المنطقية (and, or, not)، ومعاملات الإسناد (=, +=, -=, …)، ومعاملات العضوية (in, not in)، ومعاملات الهوية (is, is not).

ما الفرق بين == و is في بايثون؟

المعامل == يتحقق من تساوي القيمتين، بينما is يتحقق مما إذا كان المتغيران يشيران إلى نفس الكائن في الذاكرة. مع None و True و False استخدم is لأنها كائنات مفردة (singletons)، أما في بقية الحالات فغالبًا ما تحتاج إلى ==.

ماذا يفعل المعامل % في بايثون؟

مع الأرقام، % هو معامل باقي القسمة (modulo)، فمثلاً 17 % 5 يساوي 2. أما مع النصوص فهو صيغة تنسيق قديمة (مثل "hello %s" % name)، لكن الـ f-strings حلّت محلها في معظم الأحيان.

تعلّم البرمجة مع Coddy

ابدأ الآن