مساحت
در این تمرین تابعی مینویسیم که بر اساس نیاز کاربر، توابعِ محاسبهی مساحتِ اشکالِ هندسیِ مختلف را تولید یا بازیابی کرده و به او تحویل دهد. این کار به ما امکان میدهد تا تابعی داشته باشیم که میتواند مجموعهای از عملیات (محاسبهی مساحت) را بهصورت پویا آماده کند.
از شما میخواهیم تابعی به نام 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 و سپس استفاده از توابع بازگرداندهشده را نشان میدهد.
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)}")
📤 خروجی
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
✅ پاسخ نهایی
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)
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]
برای نوشتن پاسخ و دریافت امتیاز، ابتدا وارد حساب شوید.
ورود