我目前正在使用python进行任务,我需要帮助,我是
创建一个名为ShoppingCart的类。
创建一个没有参数的构造函数,并将total属性设置为零,并初始化一个名为items的空dict属性。
创建一个需要item_name,quantity和price参数的方法add_item。此方法应将添加项的成本添加到当前总计的值。它还应该在项目dict中添加一个条目,使得键是item_name,值是项目的数量。
创建一个方法remove_item,它需要与add_item类似的参数。它应该删除已添加到购物车中但不是必需的项目。此方法应从当前总计中扣除这些项目的成本,并相应地更新项目dict。如果要删除的商品数量超过购物车中的当前数量,则假定要删除该商品的所有商品。
创建一个方法结帐,其中包含cash_paid并从付款中返回余额值。如果cash_paid不足以支付总额,则返还现金支付不足。
创建一个名为Shop的类,该类具有一个构造函数,该构造函数初始化一个名为quantity的属性为100。
确保Shop继承自ShoppingCart。
在Shop类中,覆盖remove_item方法,这样调用Shop的remove_item不带参数会减少数量。
以下是此
的示例测试代码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
所有其他任务都已解决但我在运行测试时得到的错误是
test_remove_item_hidden
170 != 160 : Cart total not correct after removing item
我似乎无法找到问题所在。请考虑我是python的新手。提前谢谢。
答案 0 :(得分:0)
删除时,其他案例调用del
仅删除该项目,但不会更新购物车总数。您应该使用该数量来降低总价格中的价格:
...
else:
self.total -= price*self.items[item_name]
del self.items[item_name]
...