python中的购物车函数

python中的购物车函数,python,Python,我目前正在python中执行一项任务,我需要这方面的帮助,我将 创建一个名为ShoppingCart的类 创建一个没有参数的构造函数,将total属性设置为零,并初始化一个名为items的空dict属性 创建一个add_item方法,该方法需要item_名称、数量和价格参数。此方法应将添加项目的成本添加到当前总值中。它还应该在items dict中添加一个条目,以便键是item_名称,值是item的数量 创建一个方法remove\u item,该方法需要与add\u item类似的参数。它应该删

我目前正在python中执行一项任务,我需要这方面的帮助,我将

创建一个名为ShoppingCart的类

创建一个没有参数的构造函数,将total属性设置为零,并初始化一个名为items的空dict属性

创建一个add_item方法,该方法需要item_名称、数量和价格参数。此方法应将添加项目的成本添加到当前总值中。它还应该在items dict中添加一个条目,以便键是item_名称,值是item的数量

创建一个方法remove\u item,该方法需要与add\u item类似的参数。它应该删除已添加到购物车且不需要的项目。该方法应从当前总额中扣除这些项目的成本,并相应地更新项目dict。如果要删除的项目数量超过购物车中的当前数量,则假定要删除该项目的所有条目

创建一个方法签出,该方法接收支付的现金并返回支付的余额值。如果支付的现金不足以支付总额,则退还支付的现金不足

创建一个名为Shop的类,该类具有一个构造函数,该构造函数将名为quantity的属性初始化为100

确保Shop继承自ShoppingCart

在Shop类中,重写remove\u item方法,以便在没有参数的情况下调用Shop的remove\u item将数量减少1

下面是这个测试的示例代码

import unittest;

class Test(unittest.TestCase):
def setUp(self):
    self.cart = ShoppingCart()
    self.shop = Shop()

def test_cart_property_initialization(self):
    self.assertEqual(self.cart.total, 0, msg='Initial value of total not correct')
    self.assertIsInstance(self.cart.items, dict, msg='Items is not a dictionary')

def test_add_item(self):
    self.cart.add_item('Mango', 3, 10)
    self.assertEqual(self.cart.total, 30, msg='Cart total not correct after adding items')
    self.assertEqual(self.cart.items['Mango'], 3, msg='Quantity of items not correct after adding item')

def test_add_item_hidden(self):
    self.cart.add_item('Mango', 3, 10)
    self.cart.add_item('Orange', 16, 10)
    self.assertEqual(self.cart.total, 190, msg='Cart total not correct after adding items')
    self.assertEqual(self.cart.items['Orange'], 16, msg='Quantity of items not correct after adding item')

def test_remove_item(self):
    self.cart.add_item('Mango', 3, 10)
    self.cart.remove_item('Mango', 2, 10)
    self.assertEqual(self.cart.total, 10, msg='Cart total not correct after removing item')
    self.assertEqual(self.cart.items['Mango'], 1, msg='Quantity of items not correct after removing item')

def test_remove_item_hidden(self):
    self.cart.add_item('Mango', 3, 10)
    self.cart.add_item('Orange', 16, 10)
    self.cart.remove_item('Mango', 2, 10)
    self.assertEqual(self.cart.total, 170, msg='Cart total not correct after removing item')
    self.assertEqual(self.cart.items['Mango'], 1, msg='Quantity of items not correct after removing item')
    self.cart.remove_item('Mango', 2, 10)
    self.assertEqual(self.cart.total, 160, msg='Cart total not correct after removing item')
    with self.assertRaises(KeyError):
        self.cart.items['Mango']

def test_checkout_returns_correct_value(self):
    self.cart.add_item('Mango', 3, 10)
    self.cart.add_item('Orange', 16, 10)
    self.assertEqual(self.cart.checkout(265), 75, msg='Balance of checkout not correct')
    self.assertEqual(self.cart.checkout(25), 'Cash paid not enough', msg='Balance of checkout not correct')


def test_shop_is_instance_of_shopping_cart(self):
    self.assertTrue(isinstance(self.shop, ShoppingCart), msg='Shop is not a subclass of ShoppingCart')

def test_shop_initializaton(self):
    self.assertEqual(self.shop.quantity, 100, msg='Shop quantity not initialized correctly')

def test_shop_remove_item_method(self):
    for i in range(15):
        self.shop.remove_item()

    self.assertEqual(self.shop.quantity, 85)
我试图用下面的代码来解决这个问题

class ShoppingCart(object):

  def __init__(self):
      self.total = 0 
      self.items = {}

  def add_item(self,item_name,quantity,price):
      self.items[item_name] = quantity
      self.total += price*quantity

  def remove_item(self,item_name,quantity,price):
      if quantity < self.items[item_name] and quantity >= 0:
          self.total -= price*quantity
          self.items[item_name] -= quantity
      elif quantity >= self.items[item_name] :
          del self.items[item_name]

  def checkout(self,cash_paid):
      if cash_paid >= self.total:
          return cash_paid - self.total
      else:
          return "Cash paid not enough"

class Shop(ShoppingCart):
  def __init__(self):
      self.quantity = 100

  def remove_item(self):
      self.quantity -= 1

我似乎找不到问题所在。考虑到我是python新手,请提供任何帮助。提前感谢。

删除时,else case调用
del
,它只删除项目,但不更新购物车总数。您应首先使用该数量从总价中降低价格:

...
else:
    self.total -= price*self.items[item_name]
    del self.items[item_name]
...

删除时,else case调用
del
,只删除项目,不更新购物车总数。您应首先使用该数量从总价中降低价格:

...
else:
    self.total -= price*self.items[item_name]
    del self.items[item_name]
...

此语句
quantity
似乎不正确。这看起来像是一个检查
self.items[item\u name]
是否存在。@SpencerWieczorek我不明白你的意思这句话
quantity
似乎不对。它看起来像是一个检查
self.items[item\u name]
是否存在。@SpencerWieczorek我不明白你的意思你确定你把它添加到了正确的位置吗?我现在已经执行了您的代码,当添加上述代码行时,所有测试都通过了。您确定您已将其添加到正确的位置吗?我现在已经执行了您的代码,当添加上述行时,所有测试都通过了。