Нижеприведенная обработка предназначена для анализа переменной dealList
для заполнения 4 словарей SHD и C. Я думаю, что проблема заключается в предпоследней строке кода, в котором я использую eval(suit)
, где находятся костюмы зациклился.Есть ли альтернатива eval для этого кода
Все костюмы SHD и C инициализируются как пустые словари, но в конечном итоге должны содержать 13 предметов словаря, по одному для каждой карты в костюме.
Я подозреваю, что происходит каждый раз, когда выполняется eval (костюм), он находит словарь для обработки, но не сохраняет имя словаря, поэтому нужный именованный словарь не обновляется. Иначе говоря, похоже, что я повторяю цикл, используя букву S
, взятую из списка, но эта буква также называет словарь. Но я не знаю, как сказать python, что эти два связаны.
Что мне нужно использовать вместо 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 карт - это пики, а следующие две карты - это сердца, 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