كيف يمكن استخدام Comparison Operators مع Match statement في Python

السلام عليكم ورحمة الله

أريد تحويل مثل هذا الكود من if statement إلى Match statement. الكود في الأسفل مثال فقط لما أريد أن أفعله مع Match statement

If n >= 1000:
Print('You've got a discount %30')
Else if n <1000:
Print('You've got a discount %15')
Else if n <=500: 
Print('You've got a discount %10')
Else:
Print('etc...')
يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

تعبير match يتيح لك تحديد حالات متعددة بطريقة أنظف وأكثر قوة من if-elif-else التقليدية

هذا تعديل للكود الخاص بك:

n = 750 # يمكنك استبدال هذه القيمة بالقيمة التي تريدها

match n:
  case _ if n >= 1000:
    print("You've got a discount %30")
  case _ if 500 < n < 1000:
    print("You've got a discount %15")
  case _ if n <= 500:
    print("You've got a discount %10")
  case _:
    print("etc...")

الاستخدام الأساسي لـ match يشبه إلى حد كبير التعبيرات الشائعة مثل switch في لغات أخرى مثل جافاسكريتب، ولكنه يقدم ميزات إضافية ويحسن القراءة وصيانة الكود، وإليك مثال:

def check_value(x):
    match x:
        case 1:
            print("القيمة تساوي 1")
        case 2 | 3:
            print("القيمة تساوي 2 أو 3")
        case int if int > 3:
            print("القيمة أكبر من 3")
        case _:
            print("حالة غير معروفة")


  • case 1: يتحقق إذا كانت القيمة تساوي 1.
  • case 2 | 3: يتحقق إذا كانت القيمة تساوي إما 2 أو 3.
  • case int if int > 3: يتحقق إذا كانت القيمة هي عدد صحيح أكبر من 3.
  • case _: تعتبر كحالة افتراضية للتعامل مع أي قيمة لم تطابق الحالات السابقة.

ويمكن أيضًا استخدام Comparison Operators مع Match statement لإنشاء تعبيرات أكثر تعقيدًا، كالتالي:

def discount(n):
    if n >= 1000:
        return 30
    elif n < 1000:
        return 15
    elif n <= 500:
        return 10
    else:
        return None


match discount(n):
    case 30:
        print('You've got a discount %30')
    case 15:
        print('You've got a discount %15')
    case 10:
        print('You've got a discount %10')
    case _:
        print('etc...')

حيث نستخدم دالة discount() لحساب قيمة الخصم، ثم استخدام Match statement لطباعة رسالة مختلفة بناءًا على قيمة الخصم.

يمكن تحويل الشرط الذي قدمته إلى تعبير match في Python. ولكن يجب ملاحظة أن Python لا يدعم تعبير match بشكل رسمي حتى إصدار 3.10، ولكن يمكن استخدام match في الإصدارات الأحدث.

إليك مثال بسيط على كيفية استخدام match:

from typing import Match
def check_number(n: int) -> str:
    match n:
        case 1:
            return "واحد"
        case 2 | 3 | 4:
            return "قليل"
        case _:
            return "غير معروف"
result = check_number(3)
print(result)

في هذا المثال، نقوم بفحص قيمة n باستخدام match. إذا كانت قيمة n تساوي 1، سيتم إرجاع "واحد"، وإذا كانت 2 أو 3 أو 4، سيتم إرجاع "قليل"، وإلا سيتم إرجاع "غير معروف".

ويمكنك الإطلاع على المزيد من التفاصيل من خلال الإجابات التالية

تختلف ال Match Statement عن ال Switch Statement في عدة نقاط، أهمها طريقة التعريف، والتي هي كما يلي للمثال الذي ذكرته:

match n:
      case _ if n >= 1000:
          print("You've got a discount %30")
      case _ if n < 1000:
          print("You've got a discount %15")
      case _ if n <= 500:
          print("You've got a discount %10")
      case _:
          print("etc...")

حيث يستخدم أول سطر لتوضيح أن المتغير n هو الذي سيتم فحصه، وال case، فهي للحالات التي تم تضمينها في ال if وال else if.

أما ال "_" وحدها فهي تستخدم لتشمل باقي الحالات، تماما كما تعمل ال else في المثال الخاص بك.

مع العلم أن Match Statement مدعومة فقط في اصدارات اللغة python التي تبدأ من 3.10 وما بعد.