본문 바로가기
Python

(도전)파이썬, python: 카페에서 음료 주문 받기

by 하방주인장 2023. 5. 5.
문제) 카페에서 음료 주문 받기
- A카페는 아메리카노, 카페라떼, 밀크티 메뉴가 있고 가격은 각각 1500, 2000, 3000 원임
- 사용자가 "종료"라는 말을 입력하기 전까지 계속 주문을 받음
- 3개의 종류 외의 음료를 입력 시 "해당 음료는 판매하지 않습니다." 안내 제공 후 계속 주문 받음
- 음료명을 제대로 입력한 경우, 해당 음료 주문한 수가 1개 증가함
- output은 사용자의 입력에 따라, 각 음료별 주문한 개수와 총 가격 출력
Output 예시)
주문 내역
아메리카노: 3잔
카페라떼: 0잔
밀크티: 1잔
총 가격: 7500원

 

아이디어 1)

menu_list와 price_list, cnt_list를 생성하여 해당 주문의 인덱스 값으로 cnt를 증가시킨 후 zip 함수를 사용해 3개의 리스트를 합쳐 주문 내역을 출력한다.

def order_coffee():
    menu_list = ['아메리카노', '카페라떼', '밀크티']
    price_list = [1500, 2000, 3000]
    cnt_list = [0, 0, 0]
    
    while True:
        order = input('주문하실 음료를 입력하세요 (아메리카노, 카페라떼, 밀크티): ')
        if order == '종료':
            break

        elif order in menu_list:
            menu_index = menu_list.index(order)
            cnt_list[menu_index] += 1
            order_list = list(zip(menu_list, price_list, cnt_list))
            
            print('주문 내역')
            
            total_price = 0
            for menu, price, cnt in order_list:
                print(f'{menu}: {cnt}잔')
                total_price += price * cnt
            
            print(f'총 가격: {total_price}원')

        else:
            print('해당 음료는 판매하지 않습니다.')

 

Develop 1)

{'order': [price, cnt]} 형식으로 된 딕셔너리를 생성하여 해당 주문의 값은 total_price에 더해가고 cnt는 딕셔너리안에 저장한다. 또한, 주문 내역 출력문을 함수로 만들어 깔끔한 코드를 생성한다.

def order_output(order_history, total_price):
    print('주문 내역')
    
    for order in order_history:
        print(f'{order}: {order_history[order][1]}잔')

    print(f'총 가격: {total_price}원')



def order_coffee():
    order_history = {'아메리카노': [1500, 0], '카페라떼': [2000, 0], '밀크티': [3000, 0]} #{'order' : [price, cnt]}
    total_price = 0

    while True:
        order = input('주문하실 음료를 입력하세요 (아메리카노, 카페라떼, 밀크티): ')
        if order == '종료':
            break

        elif order in order_history:
            order_history[order][1] += 1
            total_price += order_history[order][0]

        else:
            print('해당 음료는 판매하지 않습니다.')

    return order_output(order_history, total_price)

 

다른 사람의 풀이)

americano = 1500
latte = 2000
milktea = 3000

order_list = [0, 0, 0]
while True:
    c = input()
    if c == '종료':
        break
    elif c == '아메리카노':
        order_list[0] += 1
    elif c == '카페라떼':
        order_list[1] += 1
    elif c == '밀크티':
        order_list[2] += 1
    else:
        print('해당 음료는 판매하지 않습니다.')

total_price = order_list[0] * americano + order_list[1] * latte + order_list[2] * milktea
print("\n주문 내역\n아메리카노: ", order_list[0], "잔\n카페라떼: ", order_list[1], "잔\n밀크티: ", order_list[2], "잔\n총 가격: ", total_price, "원")

=> by. 성재님

각각 변수에 가격을 할당하고, order_list를 생성하여 cnt 값을 저장하여, cnt값과 가격을 곱해 총 금액을 계산한다.

댓글