【发布时间】:2017-05-22 14:10:45
【问题描述】:
大家好,我是 python 语言编程的新手,希望能得到您的帮助。问题是这样的:
创建一个名为 ShoppingCart 的类。
创建一个不带参数并设置总数的构造函数 属性为零,并初始化一个名为 项目。
创建需要 item_name、数量和价格的方法 add_item 论据。此方法应将添加项目的成本添加到 总计的当前值。它还应该向项目添加一个条目 dict 使得键是 item_name 而值是 商品数量。
创建一个需要类似参数的方法 remove_item 添加项目。它应该删除已添加到 购物车,不是必需的。该方法应扣除 从当前总数中删除项目的成本,并更新 项目 dict 相应地。
如果要删除的项目数量超过当前 购物车中该商品的数量,假设该商品的所有条目 项目将被删除。
创建一个方法 checkout 接受 cash_paid 并返回 付款余额的价值。如果 cash_paid 还不够 补全,返回“现金支付不足”。
创建一个名为 Shop 的类,该类有一个构造函数,该构造函数不接受 参数并在 100 处初始化一个称为数量的属性。 确保 Shop 继承自 ShoppingCart。
在 Shop 类中,重写 remove_item 方法,这样 不带参数调用 Shop 的 remove_item 会减少数量 一个
这是我的代码
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
还有单元测试
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)
现在运行 unitest 后,我收到以下错误消息:
“150 != 160 : 删除商品后购物车总数不正确”
任何愿意提供帮助的人都将不胜感激。
【问题讨论】:
-
哪个单元测试?请尝试创建一个minimal reproducible example。
-
在
test_remove_item_hidden中,您断言购物车总数应为 170,然后删除两个值为 10 的芒果,然后断言总数应为 160。 -
这似乎是家庭作业......
-
写这个“练习”的人应该停止假装教 OOP - 他们显然没有掌握整个概念......“Shop”继承自“Cart”并用不兼容的 sig 覆盖
remove_item和完全不相关的行为#facepalm -
你为什么要赶上
RuntimeError
标签: python