اذهب إلى المحتوى

السؤال

نشر

أحاول أن أقوم بعمل دالة تقوم بإرجاع قيم ثابتة fixed بناءً على مدخل معين للدالة. في لغات أخرى مثل C أو PHP كنت سأستعمل جملة switch أو case لكن في بايثون لا أعتقد أنه توجد جملة switch من الأساس.

 ما أفضل حل للقيام بمثل هذا الأمر حسب معايير PEP؟

أستعمل python 3.10 (أحدث إصدار)

Recommended Posts

  • 0
نشر

نعم لا يوجد هناك switch  بلغة البايثون و الطريقة الاستبدالها هو خلق دالة تحتوي على dic أسم الحالة هو مفتاح الحالة و قيمتها هي ما يراد عملة أو ارجاعه كالتالي :

#هنا نقوم بتعريف الدالة 


def numbers_to_strings(argument):
  # هنا نعرف القاموس او الاوبجكت الذي حتوي جميع الحالات 
    switcher = {
        0: "zero",
        1: "one",
        2: "two",
    }
   
  
  #هنا نقوم بإرجاع القيمة حسب قيمة ال Parameter
  # أن لم توجد هذه القيمة فسوف نقوم بأرجاع قيمة nothing
    return switcher.get(argument, "nothing")
  

if __name__ == "__main__":
    argument=0
    print (numbers_to_strings(argument))

 

  • 0
نشر

لنحاول شرح ذلك باستخدام مثال,
نقوم بعمل دالة تحتوي على dictionary ليكن اسمه switcher, يكون key أرقام وال value هي الأشهر وتقوم باسترجاع قيمة ال key الممرر للدالة كباراميتر

def switch_demo(argument):
    switcher = {
        1: "January",
        2: "February",
        3: "March",
        4: "April",
        5: "May",
        6: "June",
        7: "July",
        8: "August",
        9: "September",
        10: "October",
        11: "November",
        12: "December"
    }
    return switcher.get(argument, "Invalid month")

الآن لو ممرنا لها الرقم 1 سوف نحصل على قيمته, واذا مررنا قيمة غير موجودة في dictionary سوف يتم ارجاع قيمة Invalid month

switch_demo(1)

سوف تكون النتيجة كالتالي

January

 

  • 2
نشر

بداية من بايثون الإصدار 3.10 (2021) يمكنك إستعمال جملة مشابهة لـ switch وهي match .. case كالتالي:
 

x = 'a'
match x:
    case 'a':
        print("X is A")
    case 'b':
        print("X is B")

وكبديل لهذا يمكنك إستعمال القواميس في الإصدارات السابقة كالتالي:

x = {
    'a': "X is A",
    'b': "X is B",
}

print(x['a'])

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...