2017-03-17 4 views
0

私はPython oopでラボテストをしています。PythonでShoppingCartを作成するOOP

ShoppingCartというクラスを作成します。

引数を取らず、ゼロにtotal 属性を設定し、 itemsという名前の空の辞書の属性を初期化するコンストラクタを作成します。

item_namequantityprice引数を必要とする方法add_itemを作成します。このメソッドは、合計項目の現在の値に追加された項目 のコストを追加する必要があります。キーがitem_nameで値が のアイテムとなるように、項目 に項目を追加する必要があります。

add_itemと同様の引数を必要とするremove_itemメソッドを作成します。ショッピングカート に追加された商品は削除する必要があります。この方法では、削除されたアイテムのコスト が現在の合計から差し引かれ、それに応じてアイテム が更新されます。

削除するアイテムの数量がカート内のそのアイテムの現在の数量 を超えている場合は、そのアイテムのすべてのエントリが削除されるとします( )。

を受け取る方法checkoutを作成し、お支払いから の残高を返します。 cash_paidが に足りない場合は、「現金で十分ではありません」を返します。

何 引数を取らず、属性がショップShoppingCartから継承 を確認してください100でquantityと呼ばれる初期化するコンストラクタを持っていShopというクラスを作成します。

Shopクラスでremove_itemメソッドをオーバーライドし、 Shopのremove_itemを引数なしで1つ減らします。

そしてここでは、私のコード

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 

、コードはすべてのテストケースを渡しunittestの

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) 

です。しかし、私が提出しようとすると失敗し、すべてのテスト仕様を満たしていないと言います。私はそれを二重チェックし、発生する可能性のあるエラーをキャッチしましたが、それはまだ同じです。私は何が欠けているのか分からない。これを回避する方法はありますか?あなたが何かの例を実行する前にif item_name in self.items:をチェックする必要がremove_item方法で

+0

は "提出" どこ?私たち自身でこれを試す方法はありますか?プラットフォーム(またはコードを送信しようとするとどこ)からエラーメッセージが表示されますか? –

+1

あなたがあなたの作品を提出するときに実行されているものと同じものがユニットテストであることが確かであれば、あなたのラボを実行している人に最もよく尋ねられます。あなたが確信が持てない場合は、それも彼らとチェックするのが良いことです。 – bouteillebleu

答えて

0

if item_name in self.items: if quantity < self.items[item_name] and quantity > 0: self.items[item_name] -= quantity self.total -= price*quantity

0
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 
+1

このコードは質問に答えるかもしれませんが、それがどのように動作し、いつ使用するかを説明するコンテキストを含める方が良いでしょう。コードのみの回答は長期的には有用ではありません。 – glennsl

関連する問題