方法:
- 构造函数不参数。
- get_stock_names():返回一个字符串列表,表示股票中所有食品的名称。
- has_stock(name):如果在库存中找到食品名称,则返回True。
- 装载(食物):将食物添加到库存中。
- sell(name):返回要出售的物品。要出售的物品是库存清单中与输入名称匹配的第一个食品。请记住从库存中删除已售出的食品。如果项目名称与列表中的任何项目名称不匹配,则返回None。
class Food(object):
def __init__(self,name,nutrition,good_until):
self.name = name
self.nutrition = nutrition
self.good_until = good_until
self.age = 0
class FermentedFood(Food):
def __init__(self,name,nutrition,good_after,good_until):
super().__init__(name,nutrition,good_until)
self.good_after = good_after
这是先前定义的
class VendingMachine(object):
def __init__(self):
self.obj = []
def get_stock_names(self):
return [i.name for i in self.obj]
def has_stock(self,name):
return name in [i.name for i in self.obj]
def load(self,food):
self.obj.append(food)
return self.obj
def sell(self,name):
for food in self.obj:
if food.name == name:
self.obj.remove(food)
return food
return None
machine = VendingMachine()
apple = Food("apple", 70, 7)
banana = Food("banana", 100, 4)
yoghurt = FermentedFood("yoghurt", 50, 0, 10)
machine.load(banana)
machine.load(apple)
machine.load(yoghurt)
machine.load(apple)
print(machine.get_stock_names()) #["banana", "apple", "yoghurt", "apple"])
print(machine.has_stock("apple"))
print(machine.sell("apple")) #True
print(machine.get_stock_names()) ##Since apple is sold so `["banana", "yoghurt", "apple"]`
这里的错误是在负载中。
由于每种水果最后都列在清单中,
machine.sell("banana") #banana
machine.get_stock_names() #[]
machine.load(banana) #None
我没有为None
machine.load(banana)
我尝试将加载的定义更改为此
def load(self,food):
if self.get_stock_names == []:
return None
else:
self.obj.append(food)
return self.obj
但我最终没有得到其他睾丸的结果
答案 0 :(得分:0)
这里的错误是在负载中。
您的加载方法没有错误。它self.obj.append(food)
和你说的一样:
- 装载(食物):将食物添加到库存中。
这正是应该做的,所以没事。
我没有得到机器载荷(香蕉)
你不应该(我不确定你为什么期望它返回None
)。见这里为什么
def load(self,food):
self.obj.append(food)
return self.obj
您的加载方法返回附加food
的列表。因为您传入banana作为参数,所以它将它附加到列表中。之后它返回列表(附加新的食物对象)。
load()
将永远不会返回None
,因为它返回列表对象,并且因为它是在创建自动售货机对象时创建的。
即使它是空的,它仍然作为列表存在,因此它不是None
而是[]
。
如果列表为空并且您执行machine.load(None)
之类的操作,则只需将None
附加到列表并返回[None]
。
即使您没有提出任何真正的问题,我希望这可以帮助您解决问题。