كيفية استخدام عامل بايثون الثلاثي

سيعلمك هذا الدليل كيفية استخدام العامل الثلاثي في ​​بايثون. ستتعلم عدة أمثلة لبناء الجملة والتعليمات البرمجية لفهم كيفية عملها.

سنبدأ بمراجعة كيفية عمل جملة if-else الشرطية ثم نتعلم كيفية كتابة تعبير مكافئ باستخدام عامل التشغيل الثلاثي.

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

هيا نبدأ!

بيان If-Else في Python: مراجعة

يمكنك كتابة التعليمات البرمجية من خلال بدء تشغيل Python REPL أو في محرر Python عبر الإنترنت الخاص بـ admingate.org.

الصيغة العامة لعبارة if-else في بايثون هي كما يلي:

if condition:
    # do this
else:
    # do this

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

فيما يلي مثال حيث يتم تعيين قيمة منطقية لمتغير game_over اعتمادًا على ما إذا كانت قيمة الطاقة أقل من أو تساوي الصفر أم لا.

  • إذا كانت الطاقة <= 0 ، فإن game_over صحيحة.
  • عدا ذلك ، فإن game_over خطأ.

يوضح مقتطف الشفرة التالي كيفية القيام بذلك باستخدام العبارات الشرطية if-else:

energy = -1

if energy <= 0:
    game_over = True
else:
    game_over = False

print(game_over)
# True

في هذا المثال ، الطاقة هي -1 وهي أقل من 0. لذا فإن game_over صحيحة.

مشغل Python الثلاثي: النحو والأمثلة

لدى Python عامل تشغيل ثلاثي يعمل إلى حد كبير مثل المشغل الشرطي الثلاثي في ​​لغات مثل C و C ++. الصيغة العامة لاستخدامها هي كما يلي:

expression1 if condition else expression2

دعنا نحلل بناء الجملة أعلاه:

  • الشرط: الشرط المراد التحقق منه.
  • التعبير 1: التعبير المراد تقييمه إذا كان الشرط صحيحًا.
  • التعبير 2: التعبير المراد تقييمه إذا كان الشرط خطأ.

الآن ، سنحدد ما يجب أن يكون التعبير 1 والتعبير 2 والشرط من إصدار if-else من الكود.

بتجميعها معًا ، لدينا ما يلي باستخدام عامل بايثون الثلاثي.

game_over = True if energy <= 0 else False
print(game_over)
# True

دعنا نبرمج مثالًا آخر. لنفترض أنك تدير محل لبيع الكتب ومنحت القراء خصمًا على مشترياتهم اعتمادًا على عدد المرات التي زاروا فيها متجرك في العام الماضي.

  فهم عنوان IP: دليل تمهيدي

دع numVisits يشير إلى عدد الزيارات.

  • إذا كان numVisits> 7 ، فإن النسبة المئوية للخصم ، discount_perc هي 20.
  • عدا ذلك ، فإن discount_perc هي 5.

نستخدم العامل الثلاثي لتعيين قيمة إلى المتغير discount_perc.

numVisits = 10

discount_perc = 20 if numVisits > 7 else 5

print(discount_perc)
# 20 (as numVisits = 10 which is > 7)

بعد ذلك ، سنتعلم كيفية محاكاة العامل الثلاثي باستخدام مجموعة Python وقاموس.

محاكاة العامل الثلاثي مع Python Tuple

مثل كل العناصر التكرارية في Python ، تتبع المجموعات الصفرية في الفهرسة. لذلك إذا كان لديك عنصران في tuple ، فسيكون tuple_name[0] يشير إلى العنصر الأول في tuple و tuple_name[1] يعطي العنصر الثاني في المجموعة.

أنواع البيانات الأساسية في بايثون هي الأعداد الصحيحة والعائمة والسلسلة والمنطقية. يدعم Python صب النوع الذي يتيح لك تمثيل نوع بيانات معين من خلال تمثيله المكافئ في نوع بيانات آخر.

ابدأ تشغيل Python REPL وقم بتشغيل الأمثلة التالية. إذا حاولت تحويل الأعداد الصحيحة إلى قيمة منطقية ، فستلاحظ ما يلي:

  • منطقي (0) خطأ.
  • bool (<أي عدد صحيح غير صفري>) ترجع True.
>>> bool(0)
False
>>> bool(1)
True
>>> bool(-1)
True
>>> bool(10)
True

وبالمثل ، عند تحويل قيمة Boolean إلى أعداد صحيحة ، لدينا ما يلي:

>>> int(True)
1
>>> int(False)
0

بتجميع نوع الصب والفهرسة معًا ، يمكننا القيام بما يلي:

  • العنصر في الفهرس 0 في المجموعة: القيمة التي يجب استخدامها عندما يكون الشرط خطأ.
  • العنصر في الفهرس 1 في المجموعة: القيمة التي يجب استخدامها عندما يكون الشرط صحيحًا.

Uisng ما سبق ، لدينا ما يلي:

>>> numVisits = 10
>>> discount_perc = (5,20)[numVisits > 7]
>>> discount_perc
# 20

هنا ، الشرط numVisits> 7 هو True لأن numVisits هو 10. نظرًا لأن int (True) هي 1 ، فإن قيمة discount_perc هي 20 ، والعنصر في الفهرس 1.

محاكاة المشغل الثلاثي مع قاموس بايثون

يمكنك تعيين صواب وخطأ كمفاتيح القاموس. ويمكنك تعيين التعبير 1 والتعبير 2 على أنهما القيمتان المناظرتان للمفاتيح True و False على التوالي.

some_dict = {True: expression1,
             False: expression2
            }

ماذا ستفعل لاحقا؟ الآن إذا كنت تستخدم some_dict[condition]، يتم تقييم التعبير 1 المقابل للمفتاح الحقيقي إذا كان الشرط صحيحًا. ويتم تقييم التعبير 2 عندما يكون الشرط خطأ.

لنقم بترميز مثال discount_perc (مرة أخرى) ولكن هذه المرة باستخدام قاموس Python.

>>> numVisits = 10
>>> discount_dict = {True: 20, False:5}
>>> discount_perc = discount_dict[numVisits > 7]
>>> discount_perc
# 20

هنا ، numVisits = 10 وهو أكبر من 7. لذلك ، فإن عدد الزيارات الشرطية> 7 هو True. لذلك discount_dict[numVisits > 7] يقيّم إلى discount_dict[True] وهي القيمة 20.

هل يجب عليك دائمًا استخدام عامل بايثون الثلاثي؟

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

أكثر إيجازًا من الكتل إذا كانت أخرى

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

في المثال التالي ، nums عبارة عن قائمة من 100 عدد صحيح تم إنشاؤه عشوائيًا. لكل من 100 رقم ، نتحقق مما إذا كان عددًا فرديًا أم زوجيًا. ويحدث هذا التقييم داخل السلسلة f.

import random

nums = [random.choice(range(100)) for i in range(10)]

for num in nums:
    print(f"{num} is {'even' if num%2==0 else 'odd'}")
# sample output

0 is even
56 is even
6 is even
53 is odd
62 is even
7 is odd
8 is even
77 is odd
41 is odd
94 is even

المشغل الثلاثي يتطلب شرط آخر

عندما تستخدم العبارات الشرطية if-else ، فإن جملة else اختيارية. لنأخذ مثالا. يتم تعيين متغير game_over على True إذا انخفضت الطاقة إلى قيمة أقل من أو تساوي الصفر.

ومع ذلك ، إذا كانت الطاقة أكبر من الصفر ، فلن تتم تهيئة متغير game_over مطلقًا. لذلك ستواجه أخطاء إذا حاولت الوصول إلى متغير game_over.

energy = 5
if energy <= 0:
    game_over = True

print(f"Is the game over? {game_over}")
Traceback (most recent call last):
  File "ternary_op.py", line 39, in <module>
    print(f"Is the game over? {game_over}")
NameError: name 'game_over' is not defined

تتمثل إحدى طرق إصلاح ذلك في ضبط game_over على False مبدئيًا وتحديثه إلى True إذا كان مستوى الطاقة أقل من أو يساوي الصفر.

energy = 5
game_over = False
if energy <= 0:
    game_over1 = True

print(f"Is the game over? {game_over}")

ومع ذلك ، عند استخدام مكافئ عامل تشغيل Python الثلاثي لما سبق ، فإن عبارة else ليست اختيارية. يتطلب العامل الثلاثي تقييم التعبير عندما يكون الشرط خطأ.

game_over = True if energy <= 0 else False

إذا قمت بتغيير ما سبق إلى game_over = صحيح إذا كانت الطاقة <= 0 عن طريق إزالة الجزء الآخر ، فسوف تواجه خطأ في بناء الجملة ، كما هو موضح:

File "ternary_op.py", line 42
    game_over = True if energy <= 0
                                  ^
SyntaxError: invalid syntax

للتحقق من وجود شروط متعددة ، استخدم عبارات If-Else

ضع في اعتبارك المثال: كل سؤال في مجموعة أسئلة مقابلة الترميز له درجة صعوبة مرتبطة. بناءً على هذه الدرجة ، نخصص أحد مستويات الصعوبة الثلاثة: سهل أو متوسط ​​أو صعب لسؤال معين. افترض أن لدينا ما يلي:

نقاط مستوى الصعوبة أقل من 10 سهل ، بين 10 و 20 متوسط ​​، أكبر من 20 صعب

بالنظر إلى درجة الصعوبة ، يمكنك الحصول على مستوى الصعوبة باستخدام عامل بايثون الثلاثي كما هو موضح:

score = 12

difficulty_level = "easy" if score < 10 else "hard" if score > 20 else "medium"

print(difficulty_level)
# medium

تعبير المشغل الثلاثي في ​​كتلة التعليمات البرمجية أعلاه هو بالشكل التالي:

expression1 if condition1 else expression2 if condition2 else expression3

على الرغم من الإيجاز ، إلا أنه من الصعب بعض الشيء قراءته وتحليله. توضح الصورة التالية كيفية حدوث تدفق التحكم في هذه الحالة.

يُظهر مقتطف الشفرة التالي تنفيذًا مكافئًا باستخدام عبارات if-else. كما رأينا ، فإن تدفق التحكم أسهل في الفهم ، والشفرة أكثر قابلية للقراءة.

if score < 10:
    difficulty_level="easy"
elif score > 20:
    difficulty_level="hard"
else:
    difficulty_level="medium"

print(difficulty_level)

لذلك ، عندما يكون لديك شروط متعددة ، يجب عليك استخدام كتل if-else بدلاً من عامل التشغيل الثلاثي. هذا يضمن أن الشفرة سهلة القراءة والفهم.

أيضًا ، عندما تحتاج إلى تنفيذ عبارات متعددة – اعتمادًا على ما إذا كان الشرط صحيحًا أم خطأ – يجب أن تفكر في استخدام عبارة if-else.

استنتاج

فيما يلي ملخص لما تعلمته في هذا البرنامج التعليمي.

  • في Python ، يمكن استخدام العامل الثلاثي بالصيغة التالية: expression1 if condition else expression2.
  • يمكنك محاكاة سلوك العامل الثلاثي باستخدام مجموعات Python والقواميس.
  • في حين أن عامل التشغيل الثلاثي يمكن أن يكون بديلاً أكثر إيجازًا لكتل ​​if-else ، يجب عليك التأكد من أن الشفرة قابلة للقراءة. لتحسين قابلية قراءة الكود ، يمكنك استخدام عبارات if-else بدلاً من عامل التشغيل الثلاثي ، خاصةً عندما تحتاج إلى ربط شروط متعددة.

بعد ذلك ، تعلم كيفية التحقق من البرنامج التعليمي حول العوامل المتساوية وغير المتساوية في Python.