2016-12-08 8 views
0

私は過去4日間Pythonの問題に取り組んでおり、コードを実行すると小さな問題が続きます。ValueError:list.remove(x):x Pythonでリストに問題がありません

トレースバック(最新の呼び出しの最後)::私は取得していますエラーは次のようであるで メイン() ファイル「cuddy_m_chap10_7.py」で ファイル「cuddy_m_chap10_7.py」、ライン163、ライン121、メイン cr1.clear(R3) ファイル "cuddy_m_chap10_7.py"、48行、明確な 自己.__ list_item.remove(R) とValueError中:list.remove(X):今すぐリスト

ではないxは私はこの問題を研究しましたが、私を助けるものは何も見つかりませんでした。まず、服を表す3つのオブジェクトを持つシンプルなプログラムがあります。私はレジのクラスを持っており、ここではその方法の一部です:プログラムを実行すると、ユーザーがショッピングカートに服を追加したり、服を取ること

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

    def purchase_item(self, r): 
    self.__list_item.append(r) 

    def clear(self, r): 
    for item in self.__list_item: 
     self.__list_item.remove(r) 

。さて、2服の衣服を追加すると、私はクリアメソッドを使用して作品を取り出すことができます。しかし、カートに3つの服があると、トレースバックエラーが発生します。だから、カートの2つの項目は、すべて正常に動作し、3つ以上の作品私のエラーを取得します。私のプログラムは、カート内の2つの項目で動作する理由上の任意のヘルプは

#Creating the objects from the class 
    r1 = RetailItem('Jacket', 12, 59.95) 
    r2 = RetailItem('Designer Jeans', 40, 34.95) 
    r3 = RetailItem('Shirt', 20, 24.95) 

    #creating cash register object 
    cr1 = CashRegister() 

    print("Listing All Items:") 
    print('ITEM', '\t', '\t', '\t', 'PRICE') 
    print(r1.get_desc(), '\t', '\t', '\t', r1.get_price()) 
    print(r2.get_desc(), '\t', '\t', r2.get_price()) 
    print(r3.get_desc(), '\t', '\t', '\t', r3.get_price()) 

    #Asking the user which items they want to buy 
    ch = 'y' 
    while ch.upper() == 'Y': 
    print() 
    print("Please enter the name of the item to be purchased") 
    item = input('Name: ') 
    if item.upper() == r1.get_desc().upper(): 
     cr1.purchase_item(r1) 
    elif item.upper() == r2.get_desc().upper(): 
     cr1.purchase_item(r2) 
    elif item.upper() == r3.get_desc().upper(): 
     cr1.purchase_item(r3) 
    ch = input('Select another item: (y/n): ') 

    #Displaying a list of the items which have been placed in the cart 
    print() 
    print("The list of the items you have in your cart are as follows: ") 
    print(cr1.show_items()) 
    print() 

    remove = input("Do you want to remove an item? (y/n) ") 
    while remove.lower() == 'y': 
    if remove.lower() == 'y': 
     print("Please enter the name of the item you want to be remove: ") 
     name = input('Item: ') 
     if name.upper() == r1.get_desc().upper(): 
     cr1.clear(r1) 
     print("The", r1.get_desc(), "has been removed!") 
     elif name.upper() == r2.get_desc().upper(): 
     cr1.clear(r2) 
     print("The", r2.get_desc(), "has been removed!") 
     elif name.upper() == r3.get_desc().upper(): 
     cr1.clear(r3) 
     print("The", r3.get_desc(), "has been removed!") 
     remove = input("Do you want to remove an item? (y/n) ") 

ではなく、3は非常に高く評価されます。ここでは、コードメイン関数のコードの一部をされています!ありがとうございました

+0

は、リストから削除しないでください。..リストから何度でもrを削除しようとしている

def clear(self, r): self.__list_item.remove(r) 

:ちょうど1つの項目を削除します。反復はインデックスを使用し、リストから削除するとそれらのインデックスはもはや正確ではありません*。 –

答えて

0

forループにはすべてを使用しないでください。あなたは、リスト内の全アイテムを持っているとして、それを反復しながら、

+0

ああ、そう簡単に解決!私はそれを台無しにして、私が間違っていたことを理解することは信じられません。余分な目をつけてくれてありがとう! –

関連する問題