.لینک‌های مفید برای شرکت در مسابقه:

می‌توانید سوال‌های خود را در رابطه با سوالات و دیگر بخش‌های پایتون از قسمت "سوال بپرسید" مطرح کنید.

توجه کنید که نسخه پایتون استفاده در سوالات ۳.۷ است. سری سوم راهنمایی‌ها به مرور به سوالات اضافه می‌شوند.

شطرنج میوه‌ای



می‌خواهیم تابعی بنویسیم که کارش چک کردن شرایط تعریف شده برای اشیاء (objects) مورد نظر است.


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

میوه‌‌‌ای خوب است که شرایط زیر را داشته باشد:

  • شکل آن به صورت کروی (sphere) باشد.
  • جرم آن بین ۳۰۰ تا ۶۰۰ گرم باشد.
  • حجم آن بین ۱۰۰ تا ۵۰۰ سانتی‌متر مکعب باشد.

توجه کنید که جرم میوه‌های خوب، خود اعداد ۳۰۰ و ۶۰۰ و حجم آن، خود اعداد ۱۰۰ و ۵۰۰ ‌هم می‌تواند باشد.

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

جزئیات🔗

  • تابع شما که باید به نام fruits باشد به عنوان ورودی لیستی(tuple) از لغت‌نامه‌‌‌ها‌(Dictionary) دریافت می‌کند که هر لغت‌نامه اطلاعات مربوط به یک میوه می‌باشد. این تابع در نهایت باید تعداد هر کدام از میوه‌های خوب را در قالب یک لغت‌نامه برگرداند.
  • نام و شکل هر میوه به ترتیب با عنوان name و shape و جرم و حجم هر میوه به ترتیب با عنوان mass و volume در یک لغت‌نامه ذخیره شده‌ است.
  • فرض کنید ۴ عدد میوه به صورت زیر داریم:
نام میوه شکل جرم حجم وضیعت
سیب کروی ۳۵۰ ۱۲۰ میوه خوب
انبه مربعی ۱۵۰ ۱۲۰ میوه بد
لیمو کروی ۳۰۰ ۱۰۰ میوه خوب
سیب کروی ۵۰۰ ۲۵۰ میوه خوب

سیستم‌ داوری برای ورودی دادن میوه‌های بالا به تابع fruits این تابع را به صورت زیر صدا می‌زند.

output = fruits ((
    {'name':'apple', 'shape': 'sphere', 'mass': 350, 'volume': 120},
    {'name':'mango', 'shape': 'square', 'mass': 150, 'volume': 120}, 
    {'name':'lemon', 'shape': 'sphere', 'mass': 300, 'volume': 100},
    {'name':'apple', 'shape': 'sphere', 'mass': 500, 'volume': 250}))
Python

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

{'apple': 2, 'lemon': 1}
Python

ساختار تابع شما باید به شکل زیر باشد:

def fruits(tuple_of_fruits):
   pass
Python

نکات🔗

  • برای ارسال باید یک فایل پایتون ارسال کنید که در آن تابع fruits به شکل گفته شده وجود داشته باشد.
  • می‌توانید فایل اولیه‌ی خام و کد تست‌ نمونه را با استفاده از این لینک دانلود کنید.

قسمت آموزشی🔗

در این قسمت راهنمایی‌های سوال به ترتیب در روزهای شنبه، دوشنبه و چهارشنبه ساعت ۱۸ اضافه می‌شود. مشکلات‌تان در راستای حل سوال را می‌توانید از بخش "سوال بپرسید" مطرح کنید.

راهنمایی ۱

در قدم اول، سوال را ساده می‌کنیم و فرض می‌کنیم که می‌خواهیم تابعی بنویسیم که یک میوه را در قالب یک کتابخانه ورودی می‌گیرد و بررسی می‌کند خوب است یا نه.

برای این کار تلاش می‌کنیم چنین تابعی را با توجه به شرایط سوال کامل کنیم:

def is_good(fruit):
    #returns true if the fruit is good
Python

اگر چنین تابعی را داشته باشیم می‌توانیم میوه‌ها را تک‌تک به آن بدهیم و بررسی کنیم خوب هستند یا نه.

راهنمایی ۲

تابع is_good را به شکل زیر پیاده‌سازی می‌کنیم

def is_good(fruit):
    if fruit['shape'] == 'sphere' and 300 <= fruit['mass'] <= 600 and 100 <= fruit['volume'] <= 500:
        return True # Fruit is good
    else:
        return False # Fruit is bad
Python

حالا باید در تابع خواسته شده در سوال تک به تک میوه ها رو با این روش بررسی کنیم تا ببینیم خوب هستند یا نه و لغت‌نامه‌مان را آپدیت کنیم:

def fruits(fruits_list):
    dict = {}
    for fruit in fruits_list:
        if is_good(fruit):
            # Update dictionary
    return dict
Python
راهنمایی ۳

حالا که هم میتونیم میوه‌های خوب و بد رو از هم تشخیص بدیم و تک تک میوه‌هامون رو هم بهش میدیم وقت این شده که لغت‌نامه‌مان را آپدیت کنیم!

برای اینکار اول چک میکنیم ببینیم میوه خوبمون وجود داره تو لغت‌نامه‌ یا نه اگر از قبل وجود داشتش به مقدارش یدونه اضافه میکنیم اگر هم وجود نداشت با مقدار یک به لغت‌نامه‌مان اضافه‌ش میکنیم!

در نهایت کدمون مثل کد پایین میشه:

def is_good(fruit):
    if fruit['shape'] == 'sphere' and 300 <= fruit['mass'] <= 600 and 100 <= fruit['volume'] <= 500:
        return True # Fruit is good
    else:
        return False # Fruit is bad

def fruits(fruits_list):
    dict = {}
    for fruit in fruits_list:
        if is_good(fruit):
        if fruit['name'] in dict:
            dict[fruit['name']] += 1
        else:
            dict[fruit['name']] = 1
    return dict
Python

موفق باشید :دی

ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.