سؤال

هذا السؤال لديه بالفعل إجابة هنا:

عند استخدام عبارات IF في بايثون، عليك القيام بما يلي لجعل "التتالي" يعمل بشكل صحيح.

if job == "mechanic" or job == "tech":
        print "awesome"
elif job == "tool" or job == "rock":
        print "dolt"

هل هناك طريقة لجعل بايثون تقبل قيمًا متعددة عند التحقق من "يساوي"؟على سبيل المثال،

if job == "mechanic" or "tech":
    print "awesome"
elif job == "tool" or "rock":
    print "dolt"
هل كانت مفيدة؟

المحلول

if job in ("mechanic", "tech"):
    print "awesome"
elif job in ("tool", "rock"):
    print "dolt"

القيم الموجودة بين قوسين هي صف.ال in يتحقق المشغل لمعرفة ما إذا كان العنصر الموجود على الجانب الأيسر موجودًا في مكان ما داخل صف المقبض الأيمن.

لاحظ أنه عندما تبحث بايثون في صف أو قائمة باستخدام الملف in المشغل، فإنه يقوم بالبحث الخطي.إذا كان لديك عدد كبير من العناصر على الجانب الأيمن، فقد يكون ذلك بمثابة عنق الزجاجة في الأداء.هناك طريقة واسعة النطاق للقيام بذلك وهي استخدام frozenset:

AwesomeJobs = frozenset(["mechanic", "tech", ... lots of others ])
def func():
    if job in AwesomeJobs:
        print "awesome"

استخدام frozenset زيادة set يُفضل إذا كانت قائمة الوظائف الرائعة لا تحتاج إلى تغيير أثناء تشغيل البرنامج الخاص بك.

نصائح أخرى

يمكنك استخدامها في:

if job  in ["mechanic", "tech"]:
    print "awesome"

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

AwesomeJobs = set(["mechanic", "tech", ... lots of others ])
...

def func():
    if job in AwesomeJobs:
        print "awesome"
if job in ("mechanic", "tech"):
    print "awesome"
elif job in ("tool", "rock"):
    print "dolt"

على الرغم من أنني لا أعتقد أنه يمكنك فعل ما تريد بشكل مباشر، إلا أن أحد البدائل هو:

if job in [ "mechanic", "tech" ]:
    print "awesome"
elif job in [ "tool", "rock" ]:
    print "dolt"

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

تستخدم كل من المجموعات والقوائم البحث الخطي عن المشغل الداخلي.تستخدم المجموعات بحثًا يعتمد على التجزئة، لذلك سيكون أسرع لعدد أكبر من الخيارات.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top