python编程中的OOP

python编程中的OOP,python,Python,大家好,我是python语言编程新手,希望能得到你们的帮助。问题是: 创建一个名为ShoppingCart的类 创建一个不接受任何参数并设置总数的构造函数 属性设置为零,并初始化名为 项目 创建一个add\u item方法,该方法需要item\u名称、数量和价格 论据。此方法应将添加项目的成本添加到 总计的当前值。它还应该为项目添加一个条目 dict使键为项名称,值为 物品的数量 创建一个方法remove_项,该项需要与 添加项目。它应该删除已添加到中的项 购物车和购物车是不需要的。此方法应扣除

大家好,我是python语言编程新手,希望能得到你们的帮助。问题是:

  • 创建一个名为ShoppingCart的类

  • 创建一个不接受任何参数并设置总数的构造函数 属性设置为零,并初始化名为 项目

  • 创建一个add\u item方法,该方法需要item\u名称、数量和价格 论据。此方法应将添加项目的成本添加到 总计的当前值。它还应该为项目添加一个条目 dict使键为项名称,值为 物品的数量

  • 创建一个方法remove_项,该项需要与 添加项目。它应该删除已添加到中的项 购物车和购物车是不需要的。此方法应扣除 从当前总额中删除项目的成本,并更新 项目相应地进行了调整

  • 如果要删除的项目数量超过当前数量 购物车中该商品的数量,假设该商品的所有条目 项目将被删除

  • 创建一个方法签出,该方法接收支付的现金并返回 付款余额的价值。如果支付的现金不足以支付 覆盖总额,返回“支付的现金不足”

  • 创建一个名为Shop的类,该类的构造函数不接受 参数,并将名为quantity的属性初始化为100。制作 确定商店继承自ShoppingCart

  • 在Shop类中,重写remove_item方法,以便 在没有参数的情况下调用商店的remove_项会按数量递减 一个

  • 这是我的密码

    class ShoppingCart(object):
    
        def __init__(self):
            self.total = 0
            self.items = dict()
    
        def add_item(self, item_name, quantity, price):
            if item_name != None and quantity >= 1:
                self.items.update({item_name: quantity})
            if quantity and price >= 1:
                self.total += (quantity * price)
    
        def remove_item(self, item_name, quantity, price):
            self.total -= (quantity * price)
            try:
                if quantity >= self.items[item_name]:
                    self.items.pop(item_name, None)
                self.items[item_name] -= quantity
            except(KeyError, RuntimeError):
                pass
    
        def checkout(self, cash_paid):
            balance = 0
            if cash_paid < self.total:
                return "Cash paid not enough"
            balance = cash_paid - self.total
            return balance
    
    
    class Shop(ShoppingCart):
    
        def __init__(self):
            self.quantity = 100
    
        def remove_item(self):
            self.quantity -= 1
    
    现在,运行unitest后,我收到以下错误消息:

    “150!=160:删除项目后购物车总数不正确”


    任何愿意帮忙的人都会感谢您的指导。

    您的测试是错误的。在这里,您的代码检查购物车总数是否为170现金:

    self.assertEqual(self.cart.total, 170, msg='Cart total not correct after removing item')
    
    然后删除2项,每项10现金:

    self.cart.remove_item('Mango', 2, 10)
    
    然后检查是否还有160现金:

    self.assertEqual(self.cart.total, 160, msg='Cart total not correct after removing item')
    

    但是它没有,它有150现金,这是任何人都会期望的(
    170-20=150
    )。

    你的测试是错误的。在这里,您的代码检查购物车总数是否为170现金:

    self.assertEqual(self.cart.total, 170, msg='Cart total not correct after removing item')
    
    然后删除2项,每项10现金:

    self.cart.remove_item('Mango', 2, 10)
    
    然后检查是否还有160现金:

    self.assertEqual(self.cart.total, 160, msg='Cart total not correct after removing item')
    

    但是它没有,它有150个现金,这是任何人都会期望的(
    170-20=150
    )。

    看起来像是在
    remove\u item
    类属性中,在确定是否要移除更多的物品之前更新购物车的总价值

    如果您修改它,那么您首先检查项目数量,然后减去可用总数(如果少于要删除的总数)。。。它应该可以解决这个问题

    def remove_item(self, item_name, quantity, price):
        try:
            if quantity >= self.items[item_name]:
    
                self.total -= (self.items[item_name] * price)
                self.items.pop(item_name, None)
            else:
                self.items[item_name] -= quantity
                self.total -= (quantity * price)
    

    看起来像是在
    remove\u item
    类属性中,您更新购物车的总价值,然后再确定是否要删除比您拥有的更多的项目

    如果您修改它,那么您首先检查项目数量,然后减去可用总数(如果少于要删除的总数)。。。它应该可以解决这个问题

    def remove_item(self, item_name, quantity, price):
        try:
            if quantity >= self.items[item_name]:
    
                self.total -= (self.items[item_name] * price)
                self.items.pop(item_name, None)
            else:
                self.items[item_name] -= quantity
                self.total -= (quantity * price)
    

    问题在于您的
    add_item
    方法没有更新项目,因此每次添加相同的项目时,它都不会更新,只会再次放弃
    item_name
    quantity
    并忘记以前的值,因此这就是
    add_item
    方法的外观:

    def add_item(self, item_name, quantity, price):
        self.total += price*quantity
        self.items.update({item_name: quantity})
    

    问题在于您的
    add_item
    方法没有更新项目,因此每次添加相同的项目时,它都不会更新,只会再次放弃
    item_name
    quantity
    并忘记以前的值,因此这就是
    add_item
    方法的外观:

    def add_item(self, item_name, quantity, price):
        self.total += price*quantity
        self.items.update({item_name: quantity})
    
    这应该行得通

    class ShoppingCart(object):
    
        def __init__(self):
            self.total = 0
            self.items = dict()
    
        def add_item(self, item_name, quantity, price):
            if item_name != None and quantity >= 1:
                self.items.update({item_name: quantity})
            if quantity and price >= 1:
                self.total += (quantity * price)
    
        def remove_item(self, item_name, quantity, price):
            try:
                if quantity >= self.items[item_name]:
    
                    self.total -= (self.items[item_name] * price)
                    self.items.pop(item_name, None)
    
                else:
                  self.items[item_name] -= quantity
                  self.total -= (quantity * price)
            except IOError:
                print
                "Error: can\'t find file or read data"
    
        def checkout(self, cash_paid):
            balance = 0
            if cash_paid < self.total:
                return "Cash paid not enough"
            balance = cash_paid - self.total
            return balance
    
    
    class Shop(ShoppingCart):   
        def __init__(self):
            self.quantity = 100
    
        def remove_item(self):
            self.quantity -= 1
    
    类ShoppingCart(对象):
    定义初始化(自):
    self.total=0
    self.items=dict()
    def添加项目(自身、项目名称、数量、价格):
    如果项目名称!=无,数量>=1:
    self.items.update({item\u name:quantity})
    如果数量和价格>=1:
    self.total+=(数量*价格)
    def删除项目(自身、项目名称、数量、价格):
    尝试:
    如果数量>=自身项目[项目名称]:
    self.total-=(self.items[项目名称]*价格)
    self.items.pop(项目名称,无)
    其他:
    self.items[项目名称]-=数量
    self.total-=(数量*价格)
    除IOError外:
    打印
    “错误:找不到文件或读取数据”
    def结帐(自助、现金支付):
    余额=0
    如果支付的现金
    这应该可以正常工作

    class ShoppingCart(object):
    
        def __init__(self):
            self.total = 0
            self.items = dict()
    
        def add_item(self, item_name, quantity, price):
            if item_name != None and quantity >= 1:
                self.items.update({item_name: quantity})
            if quantity and price >= 1:
                self.total += (quantity * price)
    
        def remove_item(self, item_name, quantity, price):
            try:
                if quantity >= self.items[item_name]:
    
                    self.total -= (self.items[item_name] * price)
                    self.items.pop(item_name, None)
    
                else:
                  self.items[item_name] -= quantity
                  self.total -= (quantity * price)
            except IOError:
                print
                "Error: can\'t find file or read data"
    
        def checkout(self, cash_paid):
            balance = 0
            if cash_paid < self.total:
                return "Cash paid not enough"
            balance = cash_paid - self.total
            return balance
    
    
    class Shop(ShoppingCart):   
        def __init__(self):
            self.quantity = 100
    
        def remove_item(self):
            self.quantity -= 1
    
    类ShoppingCart(对象):
    定义初始化(自):
    self.total=0
    self.items=dict()
    def添加项目(自身、项目名称、数量、价格):
    如果项目名称!=无,数量>=1:
    self.items.update({item\u name:quantity})
    如果数量和价格>=1:
    self.total+=(数量*价格)
    def删除项目(自身、项目名称、数量、价格):
    尝试:
    如果数量>=自身项目[项目名称]:
    self.total-=(self.items[项目名称]*价格)
    self.items.pop(项目名称,无)
    其他:
    self.items[项目名称]-=数量
    self.total-=(数量*价格)
    除IOError外:
    打印
    “错误:找不到文件或读取数据”
    def结帐(自助、现金支付):
    余额=0
    如果支付的现金