今までの学習は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()