2017-04-26 26 views
0

Python 3でリストからアイテムを繰り返し削除するにはどうしたらいいですか?最初の項目ではコードが機能しますが、項目を再度削除するメソッドを適用しようとするとTypeErrorが生成されます。ここで私が働いているコードは次のとおりです。クラスオブジェクト(Python)のリストからアイテムを繰り返し削除

ブラックジャックのゲーム

from random import choice 

class Black_jack_deck(object): 

    def __init__(self, full_deck=(([str(i) for i in range(2,11)]+["A","J","Q","K"])*4*6)): #a deck of 312 cards containing 6* 52 french cards 
     self.full_deck = full_deck 

    def draw(self, draw=True): 
     self.draw = choice(self.full_deck) #I use choice to simulate the dealer drawing a card from the top of a mixed card staple 
     return self.draw 
     self.full_deck = (self.full_deck).remove(self.draw) 


deck = Black_jack_deck() 

私は二度目のdeck.draw()を呼び出すしようとすると生成されるエラーは次のようになります。

Traceback (most recent call last): 
    File "<pyshell#1>", line 1, in <module> 
    deck.draw() 
TypeError: 'str' object is not callable 

注意たとえchoice()機能がなくても、pop()をシャッフルしたfull_deckに使用しても、同じエラーが発生します。

+0

正しく書式設定されたコードを投稿してください。空白はPythonでは構文上意味があり、これは機能しません。 – Morgoth

+1

'self.draw'という名前の関数と変数を持っているようです。 Pythonにどのような意味があるのか​​、どのように認識されると思いますか? – Craig

+1

Pythonはそれがどれかを "知っている":それは最後に設定されたものです。あなたは*もう一方を上書きしています。 –

答えて

1

カードを描いてBlack_jack_deck.draw()メソッドを上書きしていました。したがって、約deck.draw()の誤差は'str' objectis not callableです。

ここでは、より短いバージョンです。靴の中に描かれたカードを覚えておく必要がありますか?ブール値の引数をdraw()に変更しました。その理由は分かりませんでした。

In [94]: class CardShoe(object): 
    ...:  def __init__(self, num_decks=6): 
    ...:   self.cards = list('A23456789JQK' * 4 * num_decks) 
    ...:   random.shuffle(self.cards) 
    ...: 
    ...:  def draw(self): 
    ...:   self.last_card_drawn = self.cards.pop() 
    ...:   return self.last_card_drawn 
    ...: 

In [95]: shoe = CardShoe() 

In [96]: shoe.draw() 
Out[96]: '2' 

In [97]: shoe.draw() 
Out[97]: '8' 
+0

メモリのあるものは後で入ってくる。今のところ私はカードの作図作業をしようとしていました。私はそれが何とか必要だったと思ったブール引数で。あなたの答えをありがとう、それは非常に私を助けた:-) –

関連する問題