以下の処理は変数dealList
を解析して4つの辞書SHDとCを設定することを目的としています。問題は、スーツがどこにあるeval(suit)
のコードの最後から二番目の行にあると思いますかループスルー。このコードのevalの代替手段がありますか
すべてのスーツSHD、およびCは空の辞書として初期化されますが、最終的にはスーツの各カードに1つの辞書項目が13個含まれています。
私は、eval(suit)が実行されるたびに辞書を検索して辞書を検索しますが、辞書の名前は保持しないので、目的の名前付き辞書は更新されないと考えられます。別の言い方をすれば、リストから取ったS
という文字を使ってループを繰り返しているように見えますが、その文字も辞書の名前です。しかし、私はPythonに2つが関連付けられている方法を知らない。
私の目標を達成するために、eval()の代わりに、またはeval()に加えて何を使用する必要がありますか?
keys = list('23456789TJQKA')
values = range (13)
suitDict = {}
for key,value in zip(keys, values):
suitDict[key] = value
dealList = 'AQJT5.KQ.8.KQT95 3.A765.QT743.843 974.T93.J92.AJ62 K862.J842.AK65.7'.split()
players = list('NESW')
suits = list('SHDC')
S = H = D = C = {}
playerHand ={}
for player,hand in zip(players,dealList):
playerHand[player]=hand
print player,hand
for suit,cards in zip(suits,playerHand[player].split('.')):
print "SC:",suit,cards
for card in cards:
eval(suit)[suitDict[card]]= player
print "card",card,"Suit",suit,"X",eval(suit),"card",suitDict[card],"player",player
おそらく出力のリストに問題が表示されます。以下のサンプル出力では、最初の5枚はスペードであり、次の2枚はハート、すなわちハートのKとQです。しかし、スペードの辞書は変更されています、心の辞書ではありません。更新されているアレイのこの変更の欠如は永遠に続きます。
N AQJT5.KQ.8.KQT95
SC: S AQJT5
card A Suit S X [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 'N'] card 12 player N
card Q Suit S X [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'N', 11, 'N'] card 10 player N
card J Suit S X [0, 1, 2, 3, 4, 5, 6, 7, 8, 'N', 'N', 11, 'N'] card 9 player N
card T Suit S X [0, 1, 2, 3, 4, 5, 6, 7, 'N', 'N', 'N', 11, 'N'] card 8 player N
card 5 Suit S X [0, 1, 2, 'N', 4, 5, 6, 7, 'N', 'N', 'N', 11, 'N'] card 3 player N
SC: H KQ
card K Suit H X [0, 1, 2, 'N', 4, 5, 6, 7, 'N', 'N', 'N', 'N', 'N'] card 11 player N
card Q Suit H X [0, 1, 2, 'N', 4, 5, 6, 7, 'N', 'N', 'N', 'N', 'N'] card 10 player N
SC: D 8
card 8 Suit D X [0, 1, 2, 'N', 4, 5, 'N', 7, 'N', 'N', 'N', 'N', 'N'] card 6 player N
SC: C KQT95
card K Suit C X [0, 1, 2, 'N', 4, 5, 'N', 7, 'N', 'N', 'N', 'N', 'N'] card 11 player N
card Q Suit C X [0, 1, 2, 'N', 4, 5, 'N', 7, 'N', 'N', 'N', 'N', 'N'] card 10 player N
card T Suit C X [0, 1, 2, 'N', 4, 5, 'N', 7, 'N', 'N', 'N', 'N', 'N'] card 8 player N
card 9 Suit C X [0, 1, 2, 'N', 4, 5, 'N', 'N', 'N', 'N', 'N', 'N', 'N'] card 7 player N
card 5 Suit C X [0, 1, 2, 'N', 4, 5, 'N', 'N', 'N', 'N', 'N', 'N', 'N'] card 3 player N
E 3.A765.QT743.843
SC: S 3
card 3 Suit S X [0, 'E', 2, 'N', 4, 5, 'N', 'N', 'N', 'N', 'N', 'N', 'N'] card 1 player E
SC: H A765
card A Suit H X [0, 'E', 2, 'N', 4, 5, 'N', 'N', 'N', 'N', 'N', 'N', 'E'] card 12 player E
card 7 Suit H X [0, 'E', 2, 'N', 4, 'E', 'N', 'N', 'N', 'N', 'N', 'N', 'E'] card 5 player E
card 6 Suit H X [0, 'E', 2, 'N', 'E', 'E', 'N', 'N', 'N', 'N', 'N', 'N', 'E'] card 4 player E
card 5 Suit H X [0, 'E', 2, 'E', 'E', 'E', 'N', 'N', 'N', 'N', 'N', 'N', 'E'] card 3 player E
SC: D QT743
card Q Suit D X [0, 'E', 2, 'E', 'E', 'E', 'N', 'N', 'N', 'N', 'E', 'N', 'E'] card 10 player E
card T Suit D X [0, 'E', 2, 'E', 'E', 'E', 'N', 'N', 'E', 'N', 'E', 'N', 'E'] card 8 player E
card 7 Suit D X [0, 'E', 2, 'E', 'E', 'E', 'N', 'N', 'E', 'N', 'E', 'N', 'E'] card 5 player E
card 4 Suit D X [0, 'E', 'E', 'E', 'E', 'E', 'N', 'N', 'E', 'N', 'E', 'N', 'E'] card 2 player E
card 3 Suit D X [0, 'E', 'E', 'E', 'E', 'E', 'N', 'N', 'E', 'N', 'E', 'N', 'E'] card 1 player E
SC: C 843
card 8 Suit C X [0, 'E', 'E', 'E', 'E', 'E', 'E', 'N', 'E', 'N', 'E', 'N', 'E'] card 6 player E
card 4 Suit C X [0, 'E', 'E', 'E', 'E', 'E', 'E', 'N', 'E', 'N', 'E', 'N', 'E'] card 2 player E
card 3 Suit C X [0, 'E', 'E', 'E', 'E', 'E', 'E', 'N', 'E', 'N', 'E', 'N', 'E'] card 1 player E
:あなたのケースでは、私のような何かをしたいですしかし、 'S = H = D = C = {}'は、あなたが望むことをほぼ確実にしません。それは、すべてのそれらの名前を同じ辞書への参照にします。私は、それぞれ別々の辞書にしたいと思っています。 – Blckknght
それはまさに問題です。 – zerowords