Setup Local Development Environment & Coffee Machine Project

IDE(Integrated Development Environment)

통합 개발 환경

PyCharm 설치

  1. 최신 버전의 파이썬 설치
  2. Download PyCharm

PyCharm장점

  • 맞춤법 검사 기능
  • 개발 공간이 넓음 (여러 창을 한 화면에)
  • Built-In Linter
    Linter ⇨ 옷에 묻은 먼지를 떼어내는 테이프 클리너
    지정된 코딩 스타일에 맞지 않는 코드를 골라냄

파이썬 개발자 대부분이 준수하는 스타일 가이드 ⇨ PEP 8
ex) 들여쓰기를 할 때는 공백을 네 칸
최대 줄 길이 제한
코드에 작성된 함수와, 변수 개체들 사이에 빈 줄이 몇 개나 들어가야 하는지 등

  • Local History(지난 12시간 동안 편집했던 로컬 기록을 볼 수 있음)
    특정 시점으로 돌아갈 수 있다.
  • View Structure
    프로젝트 네비게이션 창 대신 스트럭처 창을 클릭하면,
    코드의 모든 변수와 함수가 분류되어 찾기 수월해짐
  • Refactor Rename
    함수 이름을 변경하고 싶을 때 우클릭 - Refactor - Rename
    함수가 아닌 것들은 내버려 두고
    함수가 사용된 곳과 호출된 위치를 한 번에 찾아서 모두 고칠 수 있다.
  • TODO Tracking

2


Install PyCharm on Mac

new project 생성시 interpreter설정이 중요함
설치한 최신 버전의 파이썬과 연결

1

이늠의 헬로월드..



커피 머신 프로젝트

구현해야 하는 기능

1. Makes 3 Hot flavours

  • Espresso (50ml, 18g Coffee) $1.50
  • Latte (200ml Water, 24g Coffee, 150ml Milk) $2.50
  • Cappuccino (250ml Water, 24g Coffee, 100ml Milk) $3.00
  • 사용자가 수시로 채워줘야 하는 것
    물 300ml
    우유 200ml
    원두 100g


2. Coin Operated

동전타입
Penny = 1 cent($0.01)
Nickel = 5 cents($0.05)
Dime = 10 cents($0.10)
Quater = 25 cents($0.25)


Program Requirements

  1. Print report
    어떤 재료가 얼마나 남았는지 등 보고서 출력
  2. Check resources sufficient?
    사용자가 커피를 주문할 때 재료가 충분한지 확인하는 기능
  3. Process coins
    네 종류의 동전을 구분하고 실제 화폐 가치를 계산할 수 있어야 함
  4. Check transaction successful?
    • 주문한 커피의 가격보다 적은 금액을 넣으면 모두 환불, 커피도 나오지 않음
    • 커피의 가격보다 높은 금액을 넣으면 거스름돈 + 문구와 함께 커피


코드작성

1) 커피 선택 질문 and 반복문 설정
2) 관리자가 머신 off 할 수 있게 조건 설정
3) 돈 초기값 설정, report 출력문 설정

💡**Tip**  
⌥ +shift⇧ 누르고 드래그하면 커서 여러개 생기면서 한 번에 다 입력 가능  

4) 사용자가 음료를 선택하면 재료 체크 후 남아있는 재료와 비교해보기

  • 별도의 함수 생성
    5) 재료가 충분하다면 동전 세기
  • 별도의 함수 생성

3

6) 사용자가 음료를 구매할 수 있을 만큼 동전을 충분히 넣었는지 확인
-별도의 함수 생성
4

7) 커피 만들기
-별도의 함수 생성


Final Code

MENU = {
    "espresso": {
        "ingredients": {
            "water": 50,
            "coffee": 18,
        },
        "cost": 1.5,
    },
    "latte": {
        "ingredients": {
            "water": 200,
            "milk": 150,
            "coffee": 24,
        },
        "cost": 2.5,
    },
    "cappuccino": {
        "ingredients": {
            "water": 250,
            "milk": 100,
            "coffee": 24,
        },
        "cost": 3.0,
    }
}

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


def is_resource_sufficient(order_ingredients):
    for item in order_ingredients:
        if order_ingredients[item] >= resources[item]:
            print(f"Sorry there is not enough {item}.")
            return False
    return True


def process_coins():
    """Return the total calculated from coins inserted."""
    print("Please insert coins.")
    total = int(input("How many quarters?: ")) * 0.25
    total += int(input("How many dimes?: ")) * 0.1
    total += int(input("How many nickels?: ")) * 0.05
    total += int(input("How many pennies?: ")) * 0.01
    return total


def is_transaction_successful(money_received, drink_cost):
    """Return True the payment is accepted, or False if money is insufficient."""
    if money_received >= drink_cost:
        change = round(money_received-drink_cost, 2)
        print(f"Here is ${change} in change")
        global profit
        profit += drink_cost
        return True
    else:
        print("Sorry that's not enough money. Money refunded.")
        return False


def make_coffee(drink_name, order_ingredients):
    """Deduct the required ingredients from the resources"""
    for item in order_ingredients:
        resources[item] -= order_ingredients[item]
    print(f"Here is your {drink_name}☕️. Enjoy!")


is_on = True

while is_on:
    choice = input("What would you like? (espresso/latte/cappuccino): ")
    if choice == "off":
        is_on = False
    elif choice == "report":
        print(f"Water: {resources['water']}ml")
        print(f"Milk: {resources['milk']}ml")
        print(f"Coffee: {resources['coffee']}g")
        print(f"Money: ${profit}")
    else:
        drink = MENU[choice]
        if is_resource_sufficient(drink["ingredients"]):
            payment = process_coins()
            if is_transaction_successful(payment, drink["cost"]):
                make_coffee(choice, drink["ingredients"])