我正试图在python中建立一套卡片,但我试图将所有的信息存储在字典中。我需要存储卡名(例如,2,4,'K‘代表国王,'J’代表杰克等),该卡值值为黑杰克(即2值2,A值1或11,视情况而定),以及该特定卡的数量留在甲板上。然而,当我编写python代码时,我意识到所有的卡值都等于8。
代码示例:
class Card(object):
def __init__(self, list):
self.deck_list = list
self.construct_deck()
def construct_deck(self):
#Here we created a dictionary from the list keys
self.deck = dict.fromkeys(self.deck_list, {'total': 4, 'value': 0})
self.keys = self.deck.keys()
for key in self.keys:
try:
value = int(key)
except:
if key != 'A':
value = 10
else:
value = [1,11]
finally:
self.deck[key]['value'] = value
def shuffle_deck(self):
pass
l = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A']
bj = Card(l)
print bj.deck守则应做以下工作:
发布于 2016-01-31 10:58:16
问题在于您使用的是以值dict作为默认值的dict.fromkeys()。这将设置与所有键的值相同的字典,因此如果您更新一个,它们都会被更新。
一个更好的解决方案是设置一个空的dict,然后遍历deck_list。(还请注意,self.keys与self.deck_list相同;两者都没有意义)。
此外,您应该始终避免空白,除非;捕获您期望的错误,在本例中,错误仅为ValueError。而且,这并不是对finally的有效使用;只需删除它并取消对块的缩进。
self.deck = {}
for key in self.deck_list:
try:
value = int(key)
except ValueError:
if key == 'A':
value = [1,11]
else:
value = 10
self.deck[key] = {'total': 4, 'value': value}发布于 2016-01-31 10:58:01
初始的“dict键”语句将所有值设置为同一个dict对象。您可以通过以下方式演示这一点:
print bj.deck['3'] is bj.deck['4']
# prints True因为这些值都是对同一个dict的引用,所以您解析的最后一个键"8“变成了这个dict的"value”。
您可以通过为每个键创建一个单独的dict来解决这个问题:
self.deck = dict([(k, {'total': 4, 'value': 0})
for k in self.deck_list])https://stackoverflow.com/questions/35112955
复制相似问题