얼렁뚱땅
[Cos Pro 1급][Python][기출문제] 1차 문제1 본문
문제 유형 : 빈칸 채우기, 클래스 문제
💠문제설명
배달음식 전문점 운영을 위해 다음과 같이 DeliveryStore 인터페이스와 PizzaStore, Food 클래스를 작성했습니다.
* DeliveryStore :
* DeliveryStore는 배달 음식점의 인터페이스입니다.
* 배달 음식점은 set_order_list와 get_total_price 함수를 구현해야 합니다.
* set_order_list 함수는 주문 메뉴의 리스트를 매개변수로 받아 저장합니다.
* get_total_price 함수는 주문받은 음식 가격의 총합을 return 합니다.
* Food :
* Food는 음식을 나타내는 클래스입니다.
* 음식은 이름(name)과 가격(price)으로 구성되어있습니다.
* PizzaStore
* PizzaStore는 피자 배달 전문점을 나타내는 클래스이며 DeliveryStore 인터페이스를 구현합니다.
* menu_list는 피자 배달 전문점에서 주문 할 수 있는 음식의 리스트를 저장합니다.
* order_list는 주문 받은 음식들의 이름을 저장합니다.
* set_order_list 함수는 주문 메뉴를 받아 order_list에 저장합니다.
* get_total_price 함수는 order_list에 들어있는 음식 가격의 총합을 return 합니다.
주문 메뉴가 들어있는 리스트 order_list가 매개변수로 주어질 때, 주문한 메뉴의 전체 가격을 return 하도록 solution 함수를 작성하려고 합니다. 위의 클래스 구조를 참고하여 주어진 코드의 빈칸을 적절히 채워 전체 코드를 완성해주세요.
💠매개변수 설명
주문 메뉴가 들어있는 리스트 order_list가 solution 함수의 매개변수로 주어집니다.
* order_list의 길이는 1 이상 5이하입니댜.
* order_list에는 주문하려는 메뉴의 이름들이 문자열 형태로 들어있습니다.
* order_list에는 같은 메뉴의 이름이 중복해서 들어있지 않습니다.
* 메뉴의 이름과 가격은 PizzaStore의 생성자에서 초기화해줍니다.
💠Return 설명
주문한 메뉴의 전체 가격을 return 해주세요.
💠예시
| order_list | return |
|-------------------------------------|--------|
| ["Cheese", "Pineapple", "Meatball"] | 51600 |
💠코드
from abc import *
class DeliveryStore(metaclass=ABCMeta):
@abstractmethod
def set_order_list(self, order_list):
pass
@abstractmethod
def get_total_price(self):
pass
class Food:
def __init__(self, name, price):
self.name = name
self.price = price
class PizzaStore(DeliveryStore):
def __init__(self):
menu_names = ["Cheese", "Potato", "Shrimp", "Pineapple", "Meatball"]
menu_prices = [11100, 12600, 13300, 21000, 19500];
self.menu_list = []
for i in range(5):
self.menu_list.append(Food(menu_names[i], menu_prices[i]))
self.order_list = []
def set_order_list(self, order_list):
for order in order_list:
self.order_list.append(order)
def get_total_price(self):
total_price = 0
for order in self.order_list:
for menu in self.menu_list:
if order == menu.name:
total_price += menu.price
return total_price
def solution(order_list):
delivery_store = PizzaStore()
delivery_store.set_order_list(order_list)
total_price = delivery_store.get_total_price()
return total_price
#The following is code to output testcase.
order_list = ["Cheese", "Pineapple", "Meatball"]
ret = solution(order_list)
#Press Run button to receive output.
print("Solution: return value of the function is", ret, ".")
💠개인정리
Interface
인터페이스는 실제로 인스턴스를 만드는 용도가 아니라, 이것을 상속 받는 클래스를 생성할 때 사용된다.
즉, 인터페이스로 -> 클래스 생성, 클래스로 -> 인스턴스 생성 이라고 보면 된다.
클래스는 인터페이스 안에 있는 함수를 상속 받아서 구현해야 한다.
abc 내부의 ABCMeta라는 것을 metaclass로 지정하면(=), 인터페이스 역할을 하는 클래스가 된다.
인터페이스는 추상 메서드(@abstractmethod)를 가질 수 있다. 즉, pass 구문을 통해 메서드 정의만 해두고 구현하지 않는다.
from abc import *
class DeliveryStore(metaclass=ABCMeta):
@abstractmethod
def set_order_list(self, order_list):
pass
@abstractmethod
def get_total_price(self):
pass
상속 받는 법
클래스 argument 괄호에 인터페이스 명만 넣어주면 된다.
class PizzaStore(DeliveryStore):
생성자
class Food:
def __init__(self, name, price):
self.name = name
self.price = price
class PizzaStore(DeliveryStore):
def __init__(self):
menu_names = ["Cheese", "Potato", "Shrimp", "Pineapple", "Meatball"]
menu_prices = [11100, 12600, 13300, 21000, 19500];
self.menu_list = []
클래스 함수
인터페이스와 동일한 형태로 만들어야하기 때문에 argument까지 다 복사해서 붙여넣는다.
'Python Study > Cos Pro 1급 기출문제' 카테고리의 다른 글
[Cos Pro 1급][Python][기출문제] 1차 문제 4 (0) | 2024.02.08 |
---|---|
[Cos Pro 1급][Python][기출문제] 1차 문제 3 (0) | 2024.02.05 |
[Cos Pro 1급][Python][기출문제] 1차 문제 2 (1) | 2024.02.04 |