커피 머신 프로젝트

menu = {
    "espresso": {
        "ingredients": {
            "water": 50,
            "milk": 0,
            "coffee": 18,
        },
        "cost": 1500,
    },
    "latte": {
        "ingredients": {
            "water": 200,
            "milk": 150,
            "coffee": 24,
        },
        "cost": 2500,
    },
    "cappuccino": {
        "ingredients": {
            "water": 250,
            "milk": 100,
            "coffee": 24,
        },
        "cost": 3000,
    }
}

resources = {
    "water": 300,
    "milk": 200,
    "coffee": 100,

}




# 사용법 안내

def machine_usage_method():

    return f'''
    1. 먹고 싶은 커피를 선택하고 돈을 넣으면 해당 커피를 뽑아줍니다.
    2. 금액이 부족하면 다시 커피를 선택해야 합니다.
    3. 커피 머신의 물, 우유, 커피 양이 부족하면 잠시 후 다시 시도하셔야 합니다.
    4. 'report'를 입력하면 현재 커피 머신의 상태를 알 수 있습니다.
    5. 'off'를 입력하면 커피머신을 정지합니다.

    '''
# 현재 커피머신 레포트 출력(물의 양, 커피양, 우유양, 보관 된 동전 금액)
def report_print(resources):
    global profit

    return f'''
    현재 커피 머신 재료 상태
    물의 양 : {resources["water"]}ml
    우유 양 : {resources["milk"]}ml
    커피 양 : {resources["coffee"]}g
    이익 : {profit}원
    '''

# 커피머신 양이 부족하면 물의 양, 우유 양, 커피 양 채우기
def check_resources(resources, resource):
    if resource == "water":
        resources[resource] = 300
    elif resource == "milk" :
        resources[resource] = 200
    else:
        resources[resource] = 100
    print(f"{resource}가 부족합니다. 잠시 후 다시 해주시기 바랍니다.")

    return resources

# 사용자가 원하는 커피를 만들기 위해 커피머신의 재료를 기준에 맞게 조합하고 사용한 재료의 양을 빼기
def coffee_make(menu, select_coffee, resources):

    for resource in resources :
        resources[resource] -= menu[select_coffee]["ingredients"][resource]

    return resources

def exchange_cacl(menu, select_coffee, sum):
    if sum >= menu[select_coffee]["cost"]:
        global profit
        coffee_make(menu, select_coffee, resources)

        exchange = sum - menu[select_coffee]["cost"]
        print(f"거스름돈은 {exchange}원 입니다.")
        print(f"{select_coffee} ☕️맛있게 드세요.")
        profit += menu[select_coffee]["cost"]
        return profit
    else:
        print("비용이 부족합니다.")

# 코인(백원, 천원, 만원) 계산 및 프로그램 실행 함수
def coffee_machine(menu, select_coffee, resources):
    sum = 0
    coins = [10000, 1000, 100]

    for coin in coins:
        input_coin = int(input(f"{coin}원을 넣은 갯수 : "))
        sum += input_coin * coin

    for resource in resources :
        if menu[select_coffee]["ingredients"][resource] > resources[resource] :
            check_resources(resources, resource)
            return print(f"거스름돈은 {sum}원 입니다.")

    exchange_cacl(menu, select_coffee, sum)

    return resources


# 사용자로부터 먹고 싶은 커피 입력받기
machine_on = True
profit = 0

print(machine_usage_method())

while machine_on :
    select_coffee = input("어떤 커피를 마시겠어요? (espresso, latte, cappuccino) : ")

    if select_coffee == "report" :
        print(report_print(resources))

    elif select_coffee == "off" :
        machine_on = False

    else:
        coffee_machine(menu, select_coffee, resources)

    1. 먹고 싶은 커피를 선택하고 돈을 넣으면 해당 커피를 뽑아줍니다.
    2. 금액이 부족하면 다시 커피를 선택해야 합니다.
    3. 커피 머신의 물, 우유, 커피 양이 부족하면 잠시 후 다시 시도하셔야 합니다.
    4. 'report'를 입력하면 현재 커피 머신의 상태를 알 수 있습니다.
    5. 'off'를 입력하면 커피머신을 정지합니다.


milk가 부족합니다. 잠시 후 다시 해주시기 바랍니다.
거스름돈은 3000원 입니다.

    현재 커피 머신 재료 상태
    물의 양 : 300ml
    우유 양 : 200ml
    커피 양 : 76g
    이익 : 0원

거스름돈은 1000원 입니다.
cappuccino ☕️맛있게 드세요.