pythonで注文プログラムを作る(基礎)
注文プログラムの作成
こんにちは!わいわわです。
AIやpythonの勉強を進めています。
新しい参考書が午前中に届き、それを学習するはずが18時の今もまだ届いておらず、、、
なので今日は同時進行で進めていたprogateさんのカリキュラムで
「注文プログラム」の作成がありましたのでアウトプットとしてまとめます。
今回のポイントはクラスとメソッドです!
注文プログラム
今回作成する注文プログラムの機能は
1.商品リストを表示する
2.利用者に商品番号を入力してもらう
3.利用者に購入個数を入力してもらう
4.合計金額を出力する(3個以上で10%割引)
今回はファイルが2つあります。
関数をまとめた「menu_item.py」
プログラムを書いた「script.py」です!
全体のコード
まずは作成した2つのモジュールの全体をのせます。
class MenuItem:
def __init__(self, name, price):
self.name = name
self.price = price
def info(self):
return self.name + ': ¥' + str(self.price)
def get_total_price(self, count):
total_price = self.price * count
if count >= 3:
total_price *= 0.9
return round(total_price)
from menu_item import MenuItem
menu_item1 = MenuItem('サンドイッチ', 500)
menu_item2 = MenuItem('チョコケーキ', 400)
menu_item3 = MenuItem('コーヒー', 300)
menu_item4 = MenuItem('オレンジジュース', 200)
menu_items = [menu_item1, menu_item2, menu_item3, menu_item4]
index = 0
for item in menu_items:
print(str(index) + '. ' + item.info())
index += 1
print('--------------------')
order = int(input('メニューの番号を入力してください: '))
selected_menu = menu_items[order]
print('選択されたメニュー: ' + selected_menu.name)
count = int(input('個数を入力してください(3つ以上で1割引): '))
result = selected_menu.get_total_price(count)
print('合計は' + str(result) + '円です')
解説
クラスとインスタンス
クラス...設計図のようなイメージ
インスタンス...クラスの内容に沿って作られたもの
今回はmenu_item.pyでクラスを定義しています。
class MenuItem:
def __init__(self, name, price):
self.name = name
self.price = price
class ○○でクラスを定義しています、今回はMenuItemクラスです。
クラスの中でさらに関数を定義しています。
init...インスタンスが生成されたときに実行されるメソッド
今回はinitを使用して、インスタンスが作成された際に
nameとpriceそれぞれに変数を代入しています。
selfでは作成されたインスタンス自体を指すことができます!
from menu_item import MenuItem
menu_item1 = MenuItem('サンドイッチ', 500)
menu_item2 = MenuItem('チョコケーキ', 400)
menu_item3 = MenuItem('コーヒー', 300)
menu_item4 = MenuItem('オレンジジュース', 200)
menu_items = [menu_item1, menu_item2, menu_item3, menu_item4]
インスタンスを作成するのはこちらのscript.pyです。
from モジュール名 import クラス名
で別モジュールのクラスをimportし、
menu_item1 = MenuItem('サンドイッチ', 500)
でインスタンスを作成しています!
initで作成時に関数を作成していたので、関数に従いnameとpriceが作成されます。
for item in menu_items:
print(str(index) + '. ' + item.info())
index += 1
for文で配列の中の商品リストをitemに代入し、配列の中の商品の数だけ
for以下の処理を繰り返します。
今回作成したindexは商品リストの番号を再現するためのものです。
最初に0を代入し、1つのインスタンスの処理が終わるたびに1を足し、
それぞれの商品に番号が同時に出るようになっています。
番号と個数を入力してもらったら最後は合計金額を出力します。
def get_total_price(self, count):
total_price = self.price * count
if count >= 3:
total_price *= 0.9
return round(total_price)
if文で3個以上であれば0.9をかけるようにしています。
最後、戻り値で返す際にroundで四捨五入を行い、返しています!
以上です!!
所感
今回はprogateさんのカリキュラムで注文プログラムを作りました。
(特にカートや購入機能があるわけではない、超々簡易版ですが、、笑)
クラスやインスタンス、またそこに定義する関数を習得できたのは
これからいくらでも応用がきくと感じました!
引き続き頑張ります!
Discussion