مقدمه

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

بررسی عضویت یک عنصر در لیست

قبلاً دیدیم که با استفاده از عملگر in می‌توانیم وجود یک عنصر در یک کالکشن را بررسی کنیم. این عملگر، در صورت وجود عنصر در لیست، مقدار True و در غیر این صورت، مقدار False را برمی‌گرداند.

Copy Icon if_with_lists.py
primes = [2, 3, 5, 7] 

if 5 in primes: 
  print("Yes") 
else: 
  print("No")

فرض کنید در یک فست‌فود از برنامه‌ای استفاده می‌شود که لیستی از چاشنی‌های مورد نظر مشتری را دریافت می‌کند و در طی فرایند آماده‌سازی پیتزا، پیغام‌هایی را مبنی بر اضافه شدن این چاشنی‌ها نمایش می‌دهد. یعنی چیزی مانند کد زیر:

Copy Icon pizzeria.py
toppings = ['mushrooms', 'green peppers', 'extra cheese']

for topping in toppings: 
  print(f"Adding {topping}.")
              
print(f"\nFinished making your pizza!")

خروجی این کد، به صورت زیر خواهد بود.

Adding mushrooms.
Adding green peppers.
Adding extra cheese.
            
Finished making your pizza!
          

حالا فرض کنید یکی از این آیتم‌ها (مثلاً فلفل سبز یا green peppers) در آشپزخانه موجود نباشد. در این صورت، می‌توانیم مانند زیر با استفاده از یک گزاره‌ی if این برنامه را اصلاح کنیم.

Copy Icon pizzeria.py
toppings = ['mushrooms', 'green peppers', 'extra cheese']

for topping in toppings: 
  if topping == 'green peppers':
    print("Sorry, we are out of green peppers right now.")
  else: 
    print(f"Adding {topping}.")
              
print(f"\nFinished making your pizza!")

نتیجه‌ی اجرای این کد، به صورت زیر خواهد بود.

Adding mushrooms.
Sorry, we are out of green peppers right now.
Adding extra cheese.

Finished making your pizza!
          

بررسی خالی بودن یا نبودن لیست

در مواردی که احتمال خالی بودن لیست وجود دارد، بهتر است قبل از حلقه زدن روی لیست، بررسی کنیم که آیا لیست خالی است یا نه. این بررسی را می‌توانیم با مقایسه‌ی طول لیست با صفر انجام دهیم. اما راه ساده‌تری هم وجود دارد. با توجه به اینکه لیست‌های خالی Falsy هستند و سایر لیست‌ها Truthy، کافیست خود لیست را به عنوان عبارت if تعیین کنیم. اگر لیست خالی باشد، دستورات بلاک if اجرا نخواهد شد.

دوباره به مثال پیتزافروشی برمی‌گردیم. لیست چاشنی‌های مورد نظر مشتری می‌تواند خالی باشد. بنابراین، بهتر است این موضوع را تست کنیم.

Copy Icon pizzeria.py
toppings = []

if toppings:
  for topping in toppings:
    print(f"Adding {topping}.")
  print("\nFinished making your pizza!")
else:
print("Are you sure you want a plain pizza?")

لیست خالی یک مقدار Falsy است. بنابراین، در این مثال، بخش else است که اجرا می‌شود.

Are you sure you want a plain pizza?
          

استفاده از if با چند لیست

وقتی بحث چاشنی‌های پیتزا مطرح باشد، ممکن است با درخواست‌های عجیب و غریب روبرو شویم. با استفاده از if و لیست‌ها می‌توانیم ترتیبی دهیم که قبل از پردازش ورودی‌ها، از منطقی بودن آنها مطمئن شویم.

Copy Icon pizzeria.py
available_toppings = ['mushrooms', 'olives', 'green peppers', 'pepperoni', 'pineapple', 'extra cheese']
requested_toppings = ['mushrooms', 'french fries', 'extra cheese']
           
for requested_topping in requested_toppings:
  if requested_topping in available_toppings:
    print(f"Adding {requested_topping}.")
  else:
    print(f"Sorry, we don't have {requested_topping}.")
print("\nFinished making your pizza!")

در اینجا ابتدا یک لیست از چاشنی‌های موجود ساخته شده و بررسی می‌شود که هر آیتم درخواستی در این لیست وجود دارد یا خیر و بر اساس آن، عبارت مناسب چاپ می‌شود. خروجی به صورت زیر خواهد بود.

Adding mushrooms.
Sorry, we don't have french fries.
Adding extra cheese.

Finished making your pizza!