创建一个名为shoppingcart的类。
创建一个不进行参数并将总属性设置为零的构造函数,并初始化一个空的dict属性nash nature。
创建一个需要item_name,数量和价格参数的方法add_item。此方法应将添加项目的成本添加到当前总价值中。它还应该向项目添加一个条目,以使密钥是item_name值是项目的数量。
创建一个需要与add_item相似的参数的方法remove_item。它应该删除已添加到购物车中的物品,而不是必需的。此方法应从当前总数中扣除已删除项目的成本,并且还应相应地更新项目。
如果要删除的项目数量超过了购物车中该项目的当前数量,请假设要删除该项目的所有条目。
创建一个方法结帐,该结帐接收cash_paid并从付款中返回余额的价值。如果Cash_paid不足以支付总计,请退还"现金支付不够"。
创建一个名为Shop的类,该类别具有一个构造函数,该构造函数不采用任何参数,并初始化了一个名为数量的属性。
。确保商店从购物车继承。
在商店课程中,覆盖remove_item方法,以便呼叫商店的remove_item没有参数将数量减少一个''''''
这是我的更新代码。
class ShoppingCart(object):
def __init__(self):
self.total = 0
self.items = {}
def add_item(self, item_name, quantity, price):
self.total = (quantity * price)
self.items = {item_name : quantity}
def remove_item(self, item_name, quantity, price):
self.total -= (quantity * price)
if quantity > self.items[item_name]:
del self.items
self.items[item_name] -= quantity
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):
ShoppingCart.__init__(self)
self.quantity = 100
def remove_item(self):
self.quantity -=1
import unittest
class ShoppingCartTestCases(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_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_checkout_returns_correct_balance(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_remove_item_method(self):
for i in range(15):
self.shop.remove_item()
self.assertEqual(self.shop.quantity, 85)
运行Unittest后,test.checkout_returns_correct_balance失败。这是我收到的信息: self.assertEqual(self.cart.checkout(265), 75, msg='Balance of checkout not correct')
AssertionError: 105 != 75 : Balance of checkout not correct
我真的需要一些帮助。
您在代码中遇到的问题是, add_item
不添加项目到购物车中的现有项目,它将购物车的内容设置为新项目,使它忘记了以前的事物。您需要考虑到购物车的先前内容,因此可以在add_item
的单独调用中添加多个项目。
您的remove_item
更接近纠正措施,尽管我认为当删除了所有请求类型的所有项目时,它在删除整个items
字典时有点过分狂热(可能只能使用del self.items[item_name]
删除一个键,并且>
可能应该删除一个键是 >=
,或者可能是 ==
, >
提高例外)。
尝试以下:
class ShoppingCart(object):
def __init__(self):
self.total = 0
self.items = {}
def add_item(self, item_name, quantity, price):
self.total += price*quantity
self.items.update({item_name: quantity})
def remove_item(self, item_name, quantity, price):
if item_name in self.items:
if quantity < self.items[item_name] and quantity > 0:
self.items[item_name] -= quantity
self.total -= price*quantity
elif quantity >= self.items[item_name]:
self.total -= price*self.items[item_name]
del self.items[item_name]
def checkout (self, cash_paid):
if cash_paid >= self.total:
return cash_paid - self.total
return "Cash paid not enough"
class Shop(ShoppingCart):
def __init__(self):
self.quantity = 100
def remove_item(self):
self.quantity -=1