私はPython oopでラボテストをしています。PythonでShoppingCartを作成するOOP
ShoppingCart
というクラスを作成します。引数を取らず、ゼロに
total
属性を設定し、items
という名前の空の辞書の属性を初期化するコンストラクタを作成します。
item_name
、quantity
とprice
引数を必要とする方法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
方法で
は "提出" どこ?私たち自身でこれを試す方法はありますか?プラットフォーム(またはコードを送信しようとするとどこ)からエラーメッセージが表示されますか? –
あなたがあなたの作品を提出するときに実行されているものと同じものがユニットテストであることが確かであれば、あなたのラボを実行している人に最もよく尋ねられます。あなたが確信が持てない場合は、それも彼らとチェックするのが良いことです。 – bouteillebleu