我正在嘗試我的一些練習,來到這一個:面向對象的python編程
創建一個名爲ShoppingCart的類。
創建一個不帶參數並將total屬性設置爲零的構造函數,並初始化一個名爲items的空dict屬性。
創建一個方法add_item,它需要item_name,數量和價格參數。此方法應將添加項目的成本添加到當前總值中。它還應該添加一個項目字典的條目,這樣的關鍵是item_name和值是項目的數量。
創建一個方法remove_item,它需要與add_item類似的參數。它應該刪除已添加到購物車並且不需要的商品。此方法應從當前總計中扣除已移除項目的成本,並相應地更新項目字典。
如果要移除的物品的數量超過購物車中該物品的當前數量,則假定該物品的所有條目都將被移除。
創建一個方法checkout,它接受cash_paid並從付款中返回餘額值。如果cash_paid不足以支付總額,則返回「支付的現金不足」。
創建具有構造函數不帶任何參數,並初始化名爲量的屬性在100
確保店鋪從我的購物繼承的類名爲店。
在Shop類中,重寫remove_item方法,例如調用Shop的remove_item(不帶參數)數量減一。
寫了這個(見下文)並通過測試運行它(見下文),它通過了所有的測試,但是當試圖在我正在進行的練習平臺上提交時,它返回了這個錯誤>> >> KeyError('芒果'),這可能是什麼原因?我該如何解決它?如果它評估所有的測試,這是不是意味着代碼是好的?我很卡
守則
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[item_name]
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)
提示:寫一個測試,增加芒果和橙子的購物車。然後檢查兩者是否仍在'self.cart.items'中。 – Kevin
請將其降至[最小,完整和可驗證示例](https://stackoverflow.com/help/mcve)。這個問題需要更多的代碼和解釋。此外,縮進不正確。 – roganjosh