2017-07-17 4 views
-5

ここに私のショッピングカートコードがあります。このコードが貼られています。 getTotal()は正確に2つの引数(与えられた1)getTotal()は2つの引数(1が指定されています)をとります

class Item(): 
"""Name and price of Item""" 
    def __init__(self, name, price): 
     self.name = name 
     self.price = price 

    def getName(self):   #Returning item's name 
     return self.name 

    def getPrice(self):   #Returning item's price. 
     return self.price 

class User(): 
"""Getting name of user""" 
    def __init__(self, name,budget): 
     self.name = name 
     self.budget = budget 

    def userName(self):    #Returning user's name 
     return self.name 

    def userBudget(self):    #Returning user's budget 
     return self.budget 

class Cart(): 
"""Creating a cart, you can add item in cart and remove it, also u can se your total bill.""" 

    def __init__(self): 
     self.carta = [] #Carta is shopping cart. 

    def addItem(self,carta): 
     self.carta.append(1) #Adding item in cart. 

    def getTotal(self,carta): #Total bill. 
     total = 0 
     for item in carta: 
      item = getPrice, getName 
      total += item 
     return total 

    def numItems(self,carta): #Number of items in cart. 
     self.carta = carta.len() 
     return len.carta() 

def kart(): 
    item1 = Item ("Iphone", 500) 
    item2 = Item ("Samsung", 200) 
    item3 = Item("Huawei", 400) 
    uname = User("Marko", 2000) 
    kart = Cart() 
    kart.addItem(item1) 
    kart.addItem(item2) 
    kart.addItem(item3) 
    print ("Hi %i, your total bill is $%0.2f, and you have %i items in your cart.",uname.userName(), kart.getTotal(), kart.numItems()) 

final = kart() 
print (final) 

出力私が手に取る:だから今、私は例外TypeErrorを得る

Traceback (most recent call last): 
File "C:\Users\Marko\Documents\Projects\Shopping.py", line 56, in <module> 
final = kart() 
File "C:\Users\Marko\Documents\Projects\Shopping.py", line 54, in kart 
print ("Hi %i, your total bill is $%0.2f, and you have %i items in your cart.",uname.userName(), kart.getTotal(), kart.numItems()) 
TypeError: getTotal() takes exactly 2 arguments (1 given) 

すべての先端は、すべてのヘルプは大歓迎です、おかげで、

+4

エラーは、何が間違っていて、どこに正確に伝えられますか。そのメッセージについてあなたを混乱させているのは何ですか? –

+1

'kart.getTotal()' - それは、私にとって_zero_パラメータを持つ呼び出しのようです... – CBroe

+3

@CBroe 'self'パラメータは暗黙的です。混乱に加わらないでください。 – Boldewyn

答えて

0

クラスにいくつかのエラーがあります。

まず、Pythonでは、特にあなたのケースでは、getXXX()メソッドを削除することができます。だから、あなたのようにItemUserクラスを再定義することができます。

Cartクラスで
class Item(): 
    """Name and price of Item""" 
    def __init__(self, name, price): 
     self.name = name 
     self.price = price 

class User(): 
    """Getting name of user""" 
    def __init__(self, name,budget): 
     self.name = name 
     self.budget = budget 

、そのコードが何をしたいしません:

def addItem(self,carta): 
    self.carta.append(1) #Adding item in cart. 

それは現在に整数1を追加しますcart

def addItem(self, item): 
    self.carta.append(item) 

そのまま次に、getTotalが動作することはできません:あなたは、追加したアカウントに、現在のアイテムを取るようにしてくださいするには

def getTotal(self, carta): # carta is not needed 
    total = 0 
    for item in carta: # work with the current carta, so use self.carta 
     item = getPrice, getName # I guess you want to retrieve the item's price, so use item.price 
     total += item 
    return total 

最後に、numItemsも働くことができません(!)。あなたはカルタlengthを見つけたい(cartaがリストであるとして)、それを行う場合:

def numItems(self): #Number of items in cart. 
    return len(self.carta) 

を修正して最終的なコードと右print声明:

class Item(): 
    """Name and price of Item""" 
    def __init__(self, name, price): 
     self.name = name 
     self.price = price 

class User(): 
    """Getting name of user""" 
    def __init__(self, name,budget): 
     self.name = name 
     self.budget = budget 

class Cart(): 
    """Creating a cart, you can add item in cart and remove it, also u can se your total bill.""" 

    def __init__(self): 
     self.carta = [] #Carta is shopping cart. 

    def addItem(self, item): 
     self.carta.append(item) #Adding item in cart. 

    def getTotal(self): #Total bill. 
     total = 0 
     for item in self.carta: 
      total += item.price 
     return total 

    def numItems(self): #Number of items in cart. 
     return len(self.carta) 

def test_kart(): 
    item1 = Item ("Iphone", 500) 
    item2 = Item ("Samsung", 200) 
    item3 = Item("Huawei", 400) 
    uname = User("Marko", 2000) 
    kart = Cart() 
    kart.addItem(item1) 
    kart.addItem(item2) 
    kart.addItem(item3) 
    print('Hi %s, your total bill is $%0.2f, and you have %i items in your cart.' % (uname.name, kart.getTotal(), kart.numItems())) 

test_kart() 

我々は行うことができますPythonを学んでいるようですので、そのスニペットを正しく理解し、必要に応じて最適化を試みてください。そして、that tutorialを読んでください:)

-1

まああなたのプリントではkart.getTotal()と呼ばれますが、Cartの定義では、この方法はdef getTotal(self,carta)です。 それを呼び出すときには、2つの引数を渡さなければなりません。

kartのいずれかを渡すだけです。あなたがしようとしていることを正しく理解していれば、パラメータcartaを使用しないので、メソッドgetTotalをdef getTotal(self)に変更する必要があります

0

クラスCartはすでにカートに含まれるアイテムのリストをラップします。引数をgetTotalに渡す必要はありません。呼び出しは正しいです。定義はそうではありません。

addItemには引数が必要ですが、カート自体にではなく、カートに追加する項目です。現在の実装では、最初の引数ではなく、それぞれの呼び出しで番号1がカートに追加されます。

同様に、numItemsは、長さをself.cartaに戻すだけで、追加の引数は必要ありません。

class Cart: 
"""Creating a cart, you can add item in cart and remove it, also u can se your total bill.""" 

    def __init__(self): 
     self.carta = [] 

    def add_item(self, item): 
     self.carta.append(item) 

    def get_total(self): 
     total = 0 
     for item in self.carta: 
      total += item.price 
     return total 

    def num_items(self): 
     return len(self.carta) 

PythonはJavaではありません。単純な属性アクセスのために別々の関数を定義する必要はありません(上記のget_totalの定義で暗示しているように、item.priceに直接アクセスしてください)。

class Item: 
"""Name and price of Item""" 
    def __init__(self, name, price): 
     self.name = name 
     self.price = price 

class User: 
"""Getting name of user""" 
    def __init__(self, name,budget): 
     self.name = name 
     self.budget = budget 

は最後に、あなたはどちらかリターンkartから文字列を(印刷しない)、またはfinal=.../print(final)ペアを不要にします。

関連する問題