Setup Local Development Environment & Coffee Machine Project
IDE(Integrated Development Environment)
통합 개발 환경
PyCharm 설치
- 최신 버전의 파이썬 설치
- Download PyCharm
PyCharm장점
- 맞춤법 검사 기능
- 개발 공간이 넓음 (여러 창을 한 화면에)
- Built-In Linter
Linter ⇨ 옷에 묻은 먼지를 떼어내는 테이프 클리너
지정된 코딩 스타일에 맞지 않는 코드를 골라냄
파이썬 개발자 대부분이 준수하는 스타일 가이드 ⇨ PEP 8
ex) 들여쓰기를 할 때는 공백을 네 칸
최대 줄 길이 제한
코드에 작성된 함수와, 변수 개체들 사이에 빈 줄이 몇 개나 들어가야 하는지 등
- Local History(지난 12시간 동안 편집했던 로컬 기록을 볼 수 있음)
특정 시점으로 돌아갈 수 있다. - View Structure
프로젝트 네비게이션 창 대신 스트럭처 창을 클릭하면,
코드의 모든 변수와 함수가 분류되어 찾기 수월해짐 - Refactor Rename
함수 이름을 변경하고 싶을 때 우클릭 - Refactor - Rename
함수가 아닌 것들은 내버려 두고
함수가 사용된 곳과 호출된 위치를 한 번에 찾아서 모두 고칠 수 있다. - TODO Tracking
Install PyCharm on Mac
new project 생성시 interpreter설정이 중요함
설치한 최신 버전의 파이썬과 연결
이늠의 헬로월드..
커피 머신 프로젝트
구현해야 하는 기능
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
- Print report
어떤 재료가 얼마나 남았는지 등 보고서 출력 - Check resources sufficient?
사용자가 커피를 주문할 때 재료가 충분한지 확인하는 기능 - Process coins
네 종류의 동전을 구분하고 실제 화폐 가치를 계산할 수 있어야 함 - Check transaction successful?
- 주문한 커피의 가격보다 적은 금액을 넣으면 모두 환불, 커피도 나오지 않음
- 커피의 가격보다 높은 금액을 넣으면 거스름돈 + 문구와 함께 커피
코드작성
1) 커피 선택 질문 and 반복문 설정
2) 관리자가 머신 off 할 수 있게 조건 설정
3) 돈 초기값 설정, report 출력문 설정
💡**Tip**
⌥ +shift⇧ 누르고 드래그하면 커서 여러개 생기면서 한 번에 다 입력 가능
4) 사용자가 음료를 선택하면 재료 체크 후 남아있는 재료와 비교해보기
- 별도의 함수 생성
5) 재료가 충분하다면 동전 세기 - 별도의 함수 생성
6) 사용자가 음료를 구매할 수 있을 만큼 동전을 충분히 넣었는지 확인
-별도의 함수 생성
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"])