📙

pythonで注文プログラムを作る(基礎)

2023/05/27に公開

注文プログラムの作成

こんにちは!わいわわです。
AIやpythonの勉強を進めています。
新しい参考書が午前中に届き、それを学習するはずが18時の今もまだ届いておらず、、、
なので今日は同時進行で進めていたprogateさんのカリキュラムで
「注文プログラム」の作成がありましたのでアウトプットとしてまとめます。
今回のポイントはクラスとメソッドです!

注文プログラム

今回作成する注文プログラムの機能は
1.商品リストを表示する
2.利用者に商品番号を入力してもらう
3.利用者に購入個数を入力してもらう
4.合計金額を出力する(3個以上で10%割引)

今回はファイルが2つあります。
関数をまとめた「menu_item.py」
プログラムを書いた「script.py」です!

全体のコード

まずは作成した2つのモジュールの全体をのせます。

menu_item.py
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)
script.py
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でクラスを定義しています。

menu_item.py
class MenuItem:
    def __init__(self, name, price):
        self.name = name
        self.price = price

class ○○でクラスを定義しています、今回はMenuItemクラスです。
クラスの中でさらに関数を定義しています。

init...インスタンスが生成されたときに実行されるメソッド
今回はinitを使用して、インスタンスが作成された際に
nameとpriceそれぞれに変数を代入しています。

selfでは作成されたインスタンス自体を指すことができます!

script.py
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が作成されます。

script.py
for item in menu_items:
    print(str(index) + '. ' + item.info())
    index += 1

for文で配列の中の商品リストをitemに代入し、配列の中の商品の数だけ
for以下の処理を繰り返します。
今回作成したindexは商品リストの番号を再現するためのものです。
最初に0を代入し、1つのインスタンスの処理が終わるたびに1を足し、
それぞれの商品に番号が同時に出るようになっています。

番号と個数を入力してもらったら最後は合計金額を出力します。

menu_item.py
    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