مدیریت داروخانه
در این تمرین، قصد داریم با استفاده از مفاهیم شیءگرایی در پایتون، سیستمی ساده برای مدیریت اطلاعات داروها و کارمندان در یک داروخانه ایجاد کنیم. برای یک داروخانه، برنامهای بنویسید که بتواند اطلاعات داروها و کارمندان را ذخیره و مدیریت کند. شما باید با تعریف دو کلاس اصلی، این سیستم را پیادهسازی کنید.
کلاس Drug
این کلاس برای نمایش اطلاعات یک قلم دارو استفاده میشود. هر شیء از این کلاس باید اطلاعات مربوط به یک داروی خاص را در خود نگه دارد.
این کلاس تنها در زمان ایجاد شیء (در متد سازنده) مقادیر اولیه را دریافت میکند و آنها را بهعنوان ویژگیهای شیء ذخیره میکند:
name: نام دارو (نوع: رشته)amount: موجودی یا تعداد دارو (نوع: عدد صحیح)price: قیمت واحد دارو (نوع: عدد صحیح)
این متد هنگام ایجاد یک شیء جدید از کلاس
Drugفراخوانی میشود و سه آرگومانname،amountوpriceرا دریافت میکند. این مقادیر را به ترتیب در ویژگیهایself.name،self.amountوself.priceشیء فعلی ذخیره میکند.
class Drug:
def __init__(self, name, amount, price):
self.name = name
self.amount = amount
self.price = price
کلاس Pharmacy
این کلاس برای نمایش اطلاعات داروخانه بهعنوان یک کل، شامل مجموعهای از داروها و کارمندان، استفاده میشود.
name: نام داروخانه (نوع: رشته)drugs: لیستی برای نگهداری اشیاء کلاسDrugکه در داروخانه موجود هستند (نوع: لیست). این لیست در ابتدا باید خالی باشد.employees: لیستی برای نگهداری اطلاعات کارمندان (نوع: لیست). اطلاعات هر کارمند در قالب یک دیکشنری ذخیره میشود. این لیست در ابتدا باید خالی باشد.
هنگام ایجاد یک شیء جدید از کلاس
Pharmacyفراخوانی میشود و یک آرگومانnameبرای نام داروخانه دریافت میکند. سپس مقدارnameرا در ویژگیself.nameذخیره میکند. ویژگیهایself.drugsوself.employeesرا نیز برابر با لیستهای خالی قرار میدهد.
class Pharmacy:
def __init__(self, name):
self.name = name
self.drugs = []
self.employees = []
متد add_drug
یک آرگومان دریافت میکند که باید یک شیء از کلاس Drug باشد. این شیء Drug را به لیست self.drugs اضافه میکند.
def add_drug(self, drug):
self.drugs.append(drug)
متد add_employee
سه آرگومان first_name (نام کوچک)، last_name (نام خانوادگی)، و age (سن) را دریافت میکند. اطلاعات این کارمند را در قالب یک دیکشنری با کلیدهای "first_name"، "last_name"، و "age" ذخیره میکند. سپس این دیکشنری را به لیست self.employees اضافه میکند.
def add_employee(self, first_name, last_name, age):
employee = {
"first_name": first_name,
"last_name": last_name,
"age": age
}
self.employees.append(employee)
💡 مثال
{
"first_name": "Mohammad",
"last_name": "Mohammadi",
"age": 19
}
متد total_value
این متد، ارزش کل موجودی داروها در داروخانه را محاسبه کرده و برمیگرداند.
ارزش هر دارو برابر است با حاصلضرب مقدار موجودی آن (amount) در قیمت واحد آن (price). همچنین، ارزش کل برابر است با مجموع ارزش تمام داروهای موجود در لیست self.drugs.
Total Value = ∑(amount × price)
این متد باید مقدار عددی نهایی را return کند.
def total_value(self):
total = 0
for drug in self.drugs:
total += drug.amount * drug.price
return total
متد employees_summary
این متد، خلاصهای از اطلاعات کارمندان را در قالب یک رشتهی مشخص برمیگرداند. ساختار کلی خروجی باید به صورت زیر باشد:
Employees:
The employee number {i} is {first_name} {last_name} who is {age} years old.
The employee number {i+1} is ...
که در آن، {i} شمارهی کارمند در لیست است که از ۱ شروع میشود. {first_name}، {last_name} و {age} اطلاعات مربوط به هر کارمند هستند. در انتهای تمام خطوط خروجی باید یک کاراکتر \n (خط جدید) وجود داشته باشد.
مثال:
Employees:
The employee number 1 is Mohammad Hoseini who is 19 years old.
The employee number 2 is Hosein Mohammadi who is 21 years old.
این متد باید رشتهی نهایی را return کند.
def employees_summary(self):
result = "Employees:\n"
for i, emp in enumerate(self.employees, 1):
result += f"The employee number {i} is {emp['first_name']} {emp['last_name']} who is {emp['age']} years old.\n"
return result
🎯 نمونهی استفاده از کلاسها
# ساخت چند شیء دارو
drug1 = Drug("Aspirin", 100, 25000)
drug2 = Drug("Ibuprofen", 50, 40000)
drug3 = Drug("Vitamin C", 200, 100000)
# ساخت یک شیء داروخانه
my_pharmacy = Pharmacy("City Pharmacy")
print(f"Created Pharmacy: {my_pharmacy.name}")
print("-" * 20)
# افزودن داروها به داروخانه
my_pharmacy.add_drug(drug1)
my_pharmacy.add_drug(drug2)
my_pharmacy.add_drug(drug3)
print(f"Number of drugs in {my_pharmacy.name}: {len(my_pharmacy.drugs)}")
print("-" * 20)
# افزودن کارمندان به داروخانه
my_pharmacy.add_employee("Alice", "Smith", 25)
my_pharmacy.add_employee("Bob", "Johnson", 30)
# محاسبه و چاپ ارزش داروها
total_inventory_value = my_pharmacy.total_value()
print(f"Total value of drugs in {my_pharmacy.name}: {total_inventory_value}")
print("-" * 20)
# دریافت و چاپ اطلاعات کارمندان
employee_list_summary = my_pharmacy.employees_summary()
print(employee_list_summary)
خروجی:
Created Pharmacy: City Pharmacy
--------------------
Number of drugs in City Pharmacy: 3
--------------------
Total value of drugs in City Pharmacy: 24500000
--------------------
Employees:
The employee number 1 is Alice Smith who is 25 years old.
The employee number 2 is Bob Johnson who is 30 years old.
💡 چالشهای حل تمرین
⚠️ چگونه در تابع
total_valueمیتوانم به لیست داروها و تعداد و قیمت آنها دسترسی داشته باشم؟باید روی ویژگی
self.drugsکه شامل اشیاءDrugاست، پیمایش کنید. هر شیءDrugدارای ویژگیهای تعداد و قیمت است.سپس برای هر دارو با استفاده از
drug.priceوdrug.amountبه قیمت و مقدار هر دارو دسترسی خواهید داشت. هزینهی هر دارو را محاسبه کرده و تمام هزینهها را با یکدیگر جمع کنید تا مجموع هزینه تمامی داروها به دست آید.
for drug in self.drugs:
...
⚠️ تابع
employees_summaryخروجی درستی بازمیگرداند اما نمرهی مربوط به این بخش را دریافت نمیکنم. مشکل از کجاست؟ابتدا به بزرگی و کوچکی حروف و سپس فاصلهی بین کلمات دقت کنید. در ادامه توجه داشته باشید که در انتهای تمامی خطوط باید
\nوجود داشته باشد.
⚠️ نکات مهم
- در هیچکدام از توابع نباید مقداری را چاپ (
print) کنید، بلکه باید مقادیر خواستهشده را برگردانید (return). - در توابعی که از شما خواستهشده تا عبارتی را برگردانید، به کوچکی و بزرگی حروف و فاصلهی بین کلمات دقت کنید. داوری به این موارد حساس است.
- کتابخانههایی که از توابع آن در کدتان استفاده میکنید را حتماً
importکنید.
✅ این تمرین را در ویرایشگر خود پیادهسازی کنید. به یاد داشته باشید که کلاسها و متدهای خواستهشده را دقیقاً با همان نامها و امضاها (signature) پیادهسازی کنید.
نمونهها
drug1 = Drug("Aspirin", 100, 25000)
drug2 = Drug("Ibuprofen", 50, 40000)
drug3 = Drug("Vitamin C", 200, 100000)
my_pharmacy = Pharmacy("City Pharmacy")
print(f"Created Pharmacy: {my_pharmacy.name}")
print("-" * 20)
my_pharmacy.add_drug(drug1)
my_pharmacy.add_drug(drug2)
my_pharmacy.add_drug(drug3)
print(f"Number of drugs in {my_pharmacy.name}: {len(my_pharmacy.drugs)}")
print("-" * 20)
my_pharmacy.add_employee("Alice", "Smith", 25)
my_pharmacy.add_employee("Bob", "Johnson", 30)
print(f"Total value of drugs in {my_pharmacy.name}: {my_pharmacy.total_value()}")
print("-" * 20)
print(my_pharmacy.employees_summary())Created Pharmacy: City Pharmacy -------------------- Number of drugs in City Pharmacy: 3 -------------------- Total value of drugs in City Pharmacy: 24500000 -------------------- Employees: The employee number 1 is Alice Smith who is 25 years old. The employee number 2 is Bob Johnson who is 30 years old.
p = Pharmacy("Empty")
[p.name, p.drugs, p.employees, p.total_value()]['Empty', [], [], 0]
d = Drug("Aspirin", 100, 25000)
(d.name, d.amount, d.price)('Aspirin', 100, 25000)p = Pharmacy("Q")
p.add_employee("Mohammad", "Hoseini", 19)
p.add_employee("Hosein", "Mohammadi", 21)
p.employees == [{"first_name": "Mohammad", "last_name": "Hoseini", "age": 19},
{"first_name": "Hosein", "last_name": "Mohammadi", "age": 21}]
p.employees_summary()True 'Employees:\nThe employee number 1 is Mohammad Hoseini who is 19 years old.\nThe employee number 2 is Hosein Mohammadi who is 21 years old.\n'
Pharmacy("None yet").employees_summary()'Employees:\n'
برای نوشتن پاسخ و دریافت امتیاز، ابتدا وارد حساب شوید.
ورود