さて、これもなかなかあまりないので
手探りでやってみましたがだめでした。
class Ghest():
def __init__(self,number,food_name,age,order):
self.number = int(number)
self.food_name = food_name
self.age = int(age)
self.order = int(order)
def __str__(self):
"""表示文字列に変換する"""
return f"{self.number} {self.food_name} {self.age} {self.order}"
def getnum(self):
return self.number
def getname(self):
return self.food_name
def getage(self):
return self.age
def getorder(self):
return self.order
def sumup_order(self,food_name,new_order):
if self.food_name != "alcohol":
ghests[int(number)-1].order += int(new_order)
class Ghest_over_20(Ghest):
def __init__(self,number,food_name,age,order):
super().__init__(number,food_name,age,order)
def sumup_order(self,food_name,new_order):
self.order += int(new_order)
ghests =[]
N,K = map(int,input().split())
#お客様リスト
for i in range(N):
number,age = i, int(input())
food_name,order = "",0
if age > 20:
ghests.append(Ghest_over_20(number,food_name,age,order))
else:
ghests.append(Ghest(number,food_name,age,order))
#注文リスト
for j in range(K):
number,food_name,new_order = input().split()
ghests[int(number) - 1].sumup_order(food_name,int(new_order))
#結果
for ghest in ghests:
print(ghest.order)
時間もないので解答みました。
アルコールOKならfoodが200円引きなの忘れてました。
なのでちょっと書き直します。
initするときsumもリセットしないとだめですね。
他にもメソッドで、foodかsoftdrinkかalcoholかを分けて定義してましたね。
何もしないはpassで定義します。
adultクラスは、
アルコールの有無でTrue/Falseを格納させて、
foodの場合に200円引きさせてましたね。
で、その後、20歳かそうでないかでクラスを大人クラスか子どもクラスを選んで
配列に直接入れてましたね。。。なるほどです。
書き直しました。
class Ghest():
def __init__(self):
#初期化
self.sum = 0
def take_food(self, price):
self.sum += int(price)
def take_softdrink(self, price):
self.sum += int(price)
def take_alcohol(self, price):
pass
def get_sum(self):
return self.sum
class Adult(Ghest):
def __init__(self):
super().__init__()
#初期化
self.alcohol = False
def take_food(self, price):
if self.alcohol:
self.sum += int(price) - 200
else:
self.sum += int(price)
def take_alcohol(self,price):
self.sum += int(price)
self.alcohol = True
N, K = map(int,input().split())
ghests = [None] * N
for i in range(N):
age = int(input())
if age >= 20:
ghests[i] = Adult()
else:
ghests[i] = Ghest()
#注文リスト
for _ in range(K):
number,order,price = input().split()
if order == "food":
ghests[int(number)-1].take_food(price)
elif order == "softdrink":
ghests[int(number)-1].take_softdrink(price)
else:
ghests[int(number)-1].take_alcohol(price)
#結果
for ghest in ghests:
print(ghest.get_sum())
initで、毎回self.numberとか定義を毎回やらないかんのかなとずっと
思い込んでいたのですが、どうやらそうでもないみたいです。
どんな時にinitで定義しないとだめなのかな。そこがまだわからないですね。。。
なかなかクラスのことを理解できず、まだまだ時間がかかりますね。。。