UdemyでPythonを勉強した結果を残すブログ。

40歳でプログラミング始めて転職までいけるのかを実録してみます。

DAY:15 PyCharmを使って簡易擬似コーヒーメーカーをプログラミングする!

今までの学習はreplit.comでの作業だったのだけど、
これからはpythonのコーディング用ツールを使っての作業に。

 

 

replit.com

 

先生のおすすめはPyCharm。

Pythonに特化したツール(IDEというらしい)で環境構築もしやすくて、みやすそうな感じ。

 

ちょっと前までのコードのコピーもこちらからしているので、

復習分はPyCharmからコードを書いています。

 

今回はコーヒーメーカーをプログラミング。

 

システムの流れ。

 

コーヒーメーカーの仕様。

  • reportを入力するとコーヒー、ミルク、水の残量がわかる。
  • 作れるメニューはエスプレッソ、ラテ、カプチーノ
  • offを入力すると電源オフ

コーヒーメーカーが出てくる流れ。

  • 3つのうちどれを頼むかを聞く。
  • 材料の残量を確認する。作れない場合は「売り切れ」とする。
  • 作れるならお金を支払いを聞く。
  • 金額を確認して、代金以上なら作る。
  • 材料を保管分から減らし売上を計上する。

 

こんな感じ。

 

ではコーディングに。

 

材料とメニューはこんな感じ。

 

MENU = {
"espresso": {
"ingredients": {
"water": 50,
"coffee": 18,
},
"cost": 300,
},
"latte": {
"ingredients": {
"water": 200,
"milk": 150,
"coffee": 24,
},
"cost": 400,
},
"cappuccino": {
"ingredients": {
"water": 250,
"milk": 100,
"coffee": 24,
},
"cost": 350,
}
}

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

 

コーヒーメーカーの機能を、

・支払う金額を要求する機能

・材料を使ってコーヒーを作る機能

・売り切れかどうかを確認する機能

と分けて、全てをコーヒーメーカーというプロダクトに入れるようなイメージにする。

 

 

 

 

3つのうちどれを頼むかを聞く。reportを入力すると原材料と売上がわかる。

 

def coffee_machine():
profit = 0
can_make = True
while can_make:
order = input("何を飲みますか? espresso:300 / latte:400 / cappuccino:350 : ")
if order == "report":
print(f"water : {resources['water']} ml\nmilk : {resources['milk']}ml\ncoffee : {resources['coffee']}g\n売上:¥{profit}")

 

繰り返すように最初からwhileで囲っています。

3つのメニューのうちどれかを入力したら、check_remains()をいう残量確認機能を作り、return Trueであれば支払い=insert_money()へと行く。

costは選んだメニューの価格をセットしています。

 

elif order == "espresso" or "latte" or "cappuccino":
if check_remains(MENU[order]):
paid_money = insert_money()
cost = MENU[order]["cost"]

insert_money()で支払い金額が代金より多かったら return Trueを出して、

make_drink()で頼んだコーヒーを作る。その時に材料も減らす機能を盛り込む。

作ったので売上を計上する。

 

お金が足りない場合は足りませんと表示する。

 

if cost <= paid_money:
make_drink(MENU[order])
profit += cost
else:
print("お金が足りません。")
insert_money()

 

最後にoffをした場合に電源を切る。

        elif order == "off":
print("電源オフ")
can_make = False

coffee_machine()

 

本体の流れとしてはこんな感じ。

あとは分割した機能

残量確認機能 = check_remains()

支払い機能 = insert_money()

コーヒーを作る機能 = make_drink()

を作る。

 

残量確認機能 = check_remains()

def check_remains(order):
for item in order["ingredients"]:
if resources[item] < order["ingredients"][item]:
print("売り切れです。")
return False
else:
return True

check_remains(order)のorder部分にinputで入力したメニューを保存して、

そのメニューの中の材料部分のリストをforで回して、

残量より多かったら売り切れですと表示して、Falseを返す。

作れるならTrue  を返す仕様です。

 

 

 

支払い機能 = insert_money()

def insert_money():
print("お金を入れてください。")
total = int(input("いくらいれますか? ¥"))
print(f"¥{round(total, 2)} 入りました。")
return total

 

これは簡単ですね。

 

 

コーヒーを作る機能 = make_drink()

 

def make_drink(order):
for item in order["ingredients"]:
resources[item] -= order["ingredients"][item]
print(f"…\n\n\n☕️できました。ごゆっくり!\n\n\n")

 

これもオーダーしたメニューを保存して、

そのリストをforで残量分から材料を引いて、完成。

 

 

コーディング部分全てはこちら。

こちらも自分で描いたものなので粗いかもしれません。

 


def insert_money():
print("お金を入れてください。")
total = int(input("いくらいれますか? ¥"))
print(f"¥{round(total, 2)} 入りました。")
return total

def make_drink(order):
for item in order["ingredients"]:
resources[item] -= order["ingredients"][item]
print(f"…\n\n\n☕️できました。ごゆっくり!\n\n\n")

def check_remains(order):
for item in order["ingredients"]:
if resources[item] < order["ingredients"][item]:
print("売り切れです。")
return False
else:
return True


def coffee_machine():
profit = 0
can_make = True
while can_make:
order = input("何を飲みますか? espresso:300 / latte:400 / cappuccino:350 : ")
if order == "report":
print(f"water : {resources['water']} ml\nmilk : {resources['milk']}ml\ncoffee : {resources['coffee']}g\n売上:¥{profit}")

elif order == "espresso" or "latte" or "cappuccino":
if check_remains(MENU[order]):
paid_money = insert_money()
cost = MENU[order]["cost"]
if cost <= paid_money:
make_drink(MENU[order])
profit += cost
else:
print("お金が足りません。")
insert_money()
elif order == "off":
print("電源オフ")
can_make = False

coffee_machine()