راه
۴ کیو· سختپیشرفتهPYTHON۴ ثانیه · ۲۵۶ مگابایت

مساحت

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

از شما می‌خواهیم تابعی به نام get_func پیاده‌سازی کنید. این تابع یک لیست از رشته‌ها را به‌عنوان ورودی می‌گیرد که هر رشته نمایانگر نام یک شکل هندسی دوبعدی است. تابع get_func باید بر اساس نام هر شکل در لیست ورودی، تابع مربوط به محاسبه‌ی مساحت آن شکل را پیدا کرده و این توابع را به همان ترتیبی که نام اشکال در لیست ورودی ظاهر شده‌اند، در یک لیست جدید جمع‌آوری کرده و نهایتاً این لیست از توابع را بازگرداند.


🔹 توابع محاسبه‌گر مساحت مورد نیاز

شما باید توابع جداگانه‌ای برای محاسبه‌ی مساحت هر یک از اشکال زیر پیاده‌سازی کنید. این توابع باید به‌صورت زیر عمل کنند:

🔲 مربع (square)

مساحت = a × a

📥 ورودی: یک آرگومان (طول ضلع a)

⭕ دایره (circle)

مساحت = π × r²

📥 ورودی: یک آرگومان (شعاع r)

📐 مستطیل (rectangle)

مساحت = l × w

📥 ورودی: دو آرگومان (طول l و عرض w)

🔺 مثلث (triangle)

مساحت = ½ × b × h

📥 ورودی: دو آرگومان (قاعده b و ارتفاع h)

برای محاسبه‌ی مساحت دایره، مقدار π را برابر با 3.141592653589793 در نظر بگیرید. در پایتون می‌توانید از math.pi استفاده کنید یا مقدار آن را مستقیماً وارد کنید.


📖 مثال

کد زیر نحوه‌ی استفاده از تابع get_func و سپس استفاده از توابع بازگردانده‌شده را نشان می‌دهد.

python
def get_func(ls):
    pass

shape_list = ['square', 'circle', 'rectangle', 'triangle']
area_functions = get_func(shape_list)

print(f"Area of square with side 1: {area_functions[0](1)}")
print(f"Area of circle with radius 2: {area_functions[1](2)}")
print(f"Area of rectangle with length 2, width 4: {area_functions[2](2, 4)}")
print(f"Area of triangle with base 5, height 4: {area_functions[3](4, 5)}")

📤 خروجی

python
Area of square with side 1: 1
Area of circle with radius 2: 12.566370614359172
Area of rectangle with length 2, width 4: 8
Area of triangle with base 5, height 4: 10.0

✅ پاسخ نهایی

python
import math

def square(a):
    return a * a

def circle(r):
    return math.pi * r * r

def rectangle(l, w):
    return l * w

def triangle(b, h):
    return 0.5 * b * h

def get_func(ls):
    # دیکشنری نگاشت نام شکل به تابع مربوطه
    functions = {
        'square': square,
        'circle': circle,
        'rectangle': rectangle,
        'triangle': triangle
    }

    # ساخت لیست توابع بر اساس ترتیب ورودی
    result = []
    for shape in ls:
        if shape in functions:
            result.append(functions[shape])
        else:
            # در صورت وجود شکل نامعتبر، تابع None یا raise exception
            # در این تمرین فرض می‌کنیم ورودی‌ها معتبر هستند
            return None
    return result

📄 main.py


📌 نسخه‌ی فشرده‌تر (با استفاده از lambda)

python
import math

def get_func(ls):
    functions = {
        'square': lambda a: a * a,
        'circle': lambda r: math.pi * r * r,
        'rectangle': lambda l, w: l * w,
        'triangle': lambda b, h: 0.5 * b * h
    }
    return [functions[shape] for shape in ls]

📖 توضیح کد

  • توابع کمکی: چهار تابع جداگانه برای محاسبه‌ی مساحت هر شکل نوشته شده‌اند: square، circle، rectangle و triangle
  • دیکشنری نگاشت: یک دیکشنری ایجاد شده که نام هر شکل را به تابع مربوطه نگاشت می‌کند
  • تابع get_func: با پیمایش لیست ورودی، تابع مربوط به هر شکل را از دیکشنری دریافت کرده و در لیست خروجی قرار می‌دهد
  • نکته: در نسخه‌ی فشرده، از lambda برای تعریف توابع به‌صورت یک‌خطی استفاده شده است

در این تمرین فرض می‌کنیم که ورودی‌های تابع get_func معتبر هستند و فقط شامل نام اشکال مجاز می‌باشند. در پروژه‌های واقعی باید اعتبارسنجی ورودی نیز انجام شود.

🚀 پس از تکمیل تابع، می‌توانید آن را با اشکال مختلف تست کنید و از صحت عملکرد آن اطمینان حاصل کنید.

نمونه‌ها

ورودی نمونه ۱
shape_list = ['square', 'circle', 'rectangle', 'triangle']
area_functions = get_func(shape_list)
print(f"Area of square with side 1: {area_functions[0](1)}")
print(f"Area of circle with radius 2: {area_functions[1](2)}")
print(f"Area of rectangle with length 2, width 4: {area_functions[2](2, 4)}")
print(f"Area of triangle with base 5, height 4: {area_functions[3](4, 5)}")
خروجی نمونه ۱
Area of square with side 1: 1
Area of circle with radius 2: 12.566370614359172
Area of rectangle with length 2, width 4: 8
Area of triangle with base 5, height 4: 10.0
ورودی نمونه ۲
fs = get_func(['triangle', 'circle', 'square'])
[fs[0](4, 5), round(fs[1](1), 6), fs[2](2)]
خروجی نمونه ۲
[10.0, 3.141593, 4]
ورودی نمونه ۳
get_func([])
خروجی نمونه ۳
[]
ورودی نمونه ۴
fs = get_func(['rectangle', 'rectangle', 'square'])
[fs[0](2, 3), fs[1](4, 5), fs[2](9)]
خروجی نمونه ۴
[6, 20, 81]

برای نوشتن پاسخ و دریافت امتیاز، ابتدا وارد حساب شوید.

ورود