آزمودن چند شرط

زنجیره‌ی if-elif-else قدرتمند است امّا تنها زمانی کاربرد دارد که بخواهید فقط یک شرط برقرار باشد. به محض برقراری یکی از آزمون‌های شرطی پایتون باقی آزمون‌ها را نادیده می‌گیرد. این رفتار به خاطر کارآمدی سودمند است و آزمودن یک شرط مشخّص را برای شما ممکن می‌سازد.

با این حال گاهی مهم است که تمام شرط‌های مورد نظر را بررسی کنیم. در این حالت باید از تعداد گزاره‌ی if متوالی بدون elif یا else استفاده کنیم. این تکنیک زمانی معنا می‌یابد که بیش از یک شرط امکان تحقّق داشته باشند و بخواهید برای هر شرطی که True شود کاری انجام دهید.

حال مثال پیتزافروشی را دوباره بررسی می‌کنیم. اگر کسی دو نوع مواد مختلف برای روی پیتزای خود سفارش دهد، باید مطمئن شوید که هر دو نوع روی پیتزای او ریخته می‌شود:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
requested_toppings = ['mushrooms', 'extra cheese']

if 'mushrooms' in requested_toppings:
    print("Adding mushrooms.")

if 'pepperoni' in requested_toppings:
    print("Adding pepperoni.")

if 'extra cheese' in requested_toppings:
    print("Adding extra cheese.")

print("\nFinished making your pizza!")

در 1 لیستی شامل مواد درخواستی تعریف می‌کنیم. در گزاره‌ی 2 بررسی می‌کنیم که آیا مشتری برای روی پیتزای خود قارچ سفارش داده یا نه. اگر چنین باشد پیامی برای تایید چاپ می‌شود. آزمونی که در 3 برای پپرونی آورده شده یک گزاره‌ی if ساده است، نه elif یا else، بنابراین کد مربوط به آن، صرف از نظر از برقراریِ شرطِ قبلی، اجرا می‌شود. کد خط 4 بررسی می‌کند که بدون توجّه به آزمون قبلی، آیا پنیر اضافی درخواست شده یا نه. این سه آزمون مستقل با هر بار اجرای برنامه اجرا خواهند شد.

از آن‌جایی که تمام شرط‌ها در این مثال ارزیابی می‌شوند، قارچ و پنیر اضافی هر دو به پیتزا اضافه می‌شوند:

1
2
3
4
Adding mushrooms.
Adding extra cheese.

Finished making your pizza!

اگر از ساختار if-elif-else استفاده می‌کردیم این کد به درستی کار نمی‌کرد، زیرا پس از برقراری یکی از شرط‌ها اجرای آن متوقّف می‌شد. اینجا می‌بینیم که خروجی به چه شکل خواهد بود:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
requested_toppings = ['mushrooms', 'extra cheese']

if 'mushrooms' in requested_toppings:
    print("Adding mushrooms.")
elif 'pepperoni' in requested_toppings:
    print("Adding pepperoni.")
elif 'extra cheese' in requested_toppings:
    print("Adding extra cheese.")

print("\nFinished making your pizza!")

آزمون مربوط به ‘mushrooms’ اولین موردی است که تحقّق می‌یابد پس قارچ به پیتزا اضافه می‌شود. با این حال مقادیر ’extra cheese’ و ‘pepperoni’ هرگز بررسی نمی‌شوند زیرا پس از موفقّیت‌آمیز بودن آزمون اوّل، پایتون کدهای دیگر در زنجیره‌ی if-elif-else را اجرا نمی‌کند. اوّلین مورد درخواستی مشتری اضافه می‌شود امّا دوتای دیگر از قلم خواهند افتاد:

1
2
3
Adding mushrooms.

Finished making your pizza!

به طور مختصر، اگر بخواهید تنها یک قسمت از کد اجرا شود از یک زنجیره‌ی if-elif-else استفاده کنید. اگر قسمت‌های مختلف کد باید اجرا شوند از تعدادی گزاره‌ی if مستقل بهره بگیرید.

خودآزمایی

رنگ‌های موجودات بیگانه ۱

فرض کنید که در یک بازی به یک موجود بیگانه شلیک کرده‌ایم. متغیّری به نام alien_color تعریف کنید و به آن مقدار ‘green’، ‘yellow’ یا ‘red’ را نسبت دهید.

  • یک گزاره‌ی if بنویسید تا سبز بودن رنگ موجود بیگانه را بررسی کند. اگر چنین بود پیامی چاپ کند که بازیکن ۵ امتیاز گرفته است.
  • یک نسخه از این برنامه را به نحوی بنویسید که در آن شرط برقرار می‌شود. نسخه‌ی دیگر را طوری بنویسید که در آن شرط تحقّق نیابد. (در این نسخه برنامه هیچ خروجی‌ای ندارد.)

رنگ‌های موجودات بیگانه ۲

همانند تمرین ۵-۳ رنگی برای موجودات بیگانه انتخاب کنید و یک زنجیره‌ی if-else بنویسید.

  • اگر رنگ موجود بیگانه سبز باشد، پیامی چاپ کند مبنی بر این که بازیکن ۵ امتیاز کسب کرده است.
  • اگر رنگ سبز نبود اعلام کند که بازیکن ۱۰ امتیاز گرفته است.
  • برنامه را یک بار طوری بنویسید که شرط if برقرار شود و بار دیگر شرط else.

رنگ‌های موجودات بیگانه ۳

زنجیره‌ی if-else مثال ۵-۴ را به if-elif-else تبدیل کنید.

  • اگر رنگ موجود بیگانه سبز بود، پیامی چاپ کند که بازیکن ۵ امتیاز گرفته است.
  • اگر زرد بود، پیامی چاپ کند که بازیکن ۱۰ امتیاز گرفته است.
  • اگر قرمز بود، پیامی چاپ کند که بازیکن ۱۵ امتیاز گرفته است.
  • سه نسخه از این برنامه را به نحوی بنویسید که هر بار یکی از شرط‌ها برقرار شود.

مراحل زندگی

یک زنجیره‌ی if-elif-else بنویسید که مشخّص کند فرد در کدام مرحله‌ی زندگی است. مقداری برای متغیّر age تعیین کنید، سپس:

  • اگر فرد زیر ۲ سال سن داشت، پیامی چاپ کند که فرد نوزاد است.
  • اگر سن بین ۲ تا ۴ سال بود پیامی چاپ کند که فرد نوپاست.
  • اگر فرد بین ۴ و ۱۳ سال سن دارد، پیامی چاپ کند که فرد کودک است.
  • اگر سن بین ۱۳ و ۲۰ سال است پیامی چاپ کند که فرد نوجوان است.
  • اگر سن بین ۲۰ و ۶۵ باشد پیامی چاپ کند که فرد بالغ است.
  • اگر سن ۶۵ یا بیشتر بود پیامی چاپ کند که فرد کهنسال است.

میوه‌ی مورد علاقه

لیستی از میوه‌های مورد علاقه‌ی خود درست کنید و تعدادی گزاره‌ی if مستقل بنویسید که وجود میوه‌ی خاصّی را در لیست بررسی کند.

  • لیستی از سه میوه‌ی مورد علاقه‌ی خود بسازید و آن را favorite_fruits بنامید.
  • پنج گزاره‌ی if بنویسید. هر کدام از آن‌ها بررسی می‌کنند که آیا میوه‌ی خاصّی در لیست وجود دارد یا نه. اگر میوه در لیست بود کد داخل گزاره‌ی if باید جمله‌ای مانند You really like bananas چاپ کند.