定义一个冰箱类,使其能够检查是否存在某种食材或某一些数量的系列食材,并能以一次单个或多个的方式,添加或取出其中的食材,取食材时若数量不足时,应给出提示信息。

代码:

# @Time:2021/12/622:51
# @Author:中意灬
# @File:冰箱.py
# @ps:tutu qqnum:21174722
class Fridge(object):
    """定义一个冰箱类,使其能够检查是否存在某种食材或某一些数量的系列食材,并能以一次单个或多个的方式,添加或取出其中的食材,取食材时若数量不足时,应给出提示信息。"""
    items={}
    def __init__(self,food_ingredient_dict):
        """初始化一个实例时,提供一个包含食材信息的字典,初始化冰箱的食材数据items,并请提供参数类型检查功能,类型错误时给出相应错误提示"""
        if type(food_ingredient_dict)!=type(dict()):
            raise TypeError("需要一个字典参数,但是你给的是一个%s"%type(food_ingredient_dict))
        self.items=food_ingredient_dict
        return

    def __add_multi(self,ingredient_name,quantity):
        """此方法一次添加1或多个某种食材"""
        if (not ingredient_name in self.items.keys()):
            self.items[ingredient_name] = 0
            self.items[ingredient_name]=self.items[ingredient_name]+quantity

    def add_one(self,food_ingredient_name):
        """添加单个食材到冰箱中,当名称不是字符串时,抛出一个类型错误TypeError信息,否则返回True"""
        if type(food_ingredient_name)!=type(str()):
            raise TypeError("需要一个字符串参数,你给的是%s"%type(food_ingredient_name))
        else:
            self.__add_multi(food_ingredient_name,1)
            return True
    def add_many(self,food_ingredient_dict):
        """添加一个字典的食材到冰箱中。当传入参数不是字典类型时,抛出类型错误提示,否则依次将各项添加冰箱中"""
        if type(food_ingredient_dict)!=type(dict()):
            raise TypeError("需要一个自字典类型的参数,你给是的%s"%type(food_ingredient_dict))
        else:
            for i in food_ingredient_dict.keys():
                self.__add_multi(i,food_ingredient_dict[i])
        return

    def has(self,food_ingredient_name):
        """检查提供的食材是否在冰箱中存在,若食物名类型不为str则返回类型错误,否则返回True/False """
        if type(food_ingredient_name)!=type(str()):
            raise TypeError("食物名称不是str,是%s"%type(food_ingredient_name))
        else:
            if (food_ingredient_name in self.items):
                return True
            else:
                return False

    def has_various(self,food_ingredient_dict):
        """检查传入字典中的每种食材数量,在冰箱中是否足够,当完全满足时返回True,否则返回False,并在无字典中键名时,抛出键错误"""
        if type(food_ingredient_dict) != type(dict()):
            raise TypeError("传入的参数类型不是字典,是%s" % type(food_ingredient_dict))
        for i in food_ingredient_dict.keys():
            if (not i in self.items):
                raise  Exception("冰箱里没有这个菜名")
            elif self.items[i]>=food_ingredient_dict[i]:
                return True
            else:
                return False

    def __get_multi(self,ingredient_name,quantity):
        """通过此内部方法,一次性删除一定数量的某种食材,返回成功删除的数量,当没有此食材或现有食材数量不足时,返回false"""
        if type(ingredient_name) !=type(str()):
            raise TypeError("你输入的ingredient_name参数类型错误, %s" % type(food_name))
        if type(quantity)!=type(int()) or quantity<=0:
            raise TypeError("quantity类型或者大小有问题,%s" % type(quantity))
        if (not ingredient_name in self.items):
            return False
        elif self.items[ingredient_name]>quantity:
            self.items[ingredient_name] = self.items[ingredient_name] - quantity;
        elif self.items[ingredient_name] ==quantity:
            self.items[ingredient_name] = 0
        else:
            return False

    def get_one(self,food_ingredient_name):
        """从冰箱中取出某种食材的一个,取出成功返回1,否则返回false"""
        if  self.__get_multi(food_ingredient_name,1)==False:
            return False
        else:
            return 1

    def get_many(self,food_ingredient_dict):
        """从冰箱中取出整个字典中的食材,如果参数不是字典或食材不足,返回false,否则返回食材字典"""
        if type(food_ingredient_dict)!=type(dict()) :
            return False
        for i in food_ingredient_dict.keys():
            if not i in self.items:
                return False
            elif self.items[i]<=food_ingredient_dict[i]:
                return False
            else:
                for i in food_ingredient_dict.keys():
                    self.__get_multi(i,food_ingredient_dict[i])
                return self.items


    def get_ingredients(self,food):
        """如果传入的food对象有get_ingredients方法(返回一个包含食物所有食材的字典),将使用get_many去调用这个方法,从冰箱取出这些食材,并返回相应结果。注意当food没有此属性时,应给出弹出属性错误异常信息"""
        if food.get_ingredients()!=None:
            self.get_many(food.get_ingredients())
        else:
            raise Exception("food没有get_ingredients这个方法")


class Food(object):
    """应包含以下方法"""
    def __init__(self, **kwargs):
        """通过传入几种成分数量的关键字参数,初始化一种食品或菜肴的组成食材的字典"""
        self.deal_dict=kwargs

    def get_ingredients(self):
        """返回该食品/菜肴的食材字典"""
        return self.deal_dict
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值