我的代码如下:
import cards
def build_rank_D(H):
dictionary = {}
for i in range(0,len(H)):
card = H[i]
dictionary[card.rank()] = card
return dictionary
c1 = cards.Card(7,1)
c2 = cards.Card(2,1)
c3 = cards.Card(7,2)
c4 = cards.Card(7,3)
c5 = cards.Card(2,3)
c6 = cards.Card(7,4)
c7 = cards.Card(3,4)
c8 = cards.Card(1,2)
H1 = [c1,c2,c3,c4,c5,c6,c7]
H2 = [c1,c2,c3,c4,c5,c7,c8]
print(build_rank_D(H1))
当前代码的输出是:
"{2: 2h, 3: 3s, 7: 7s}"
应该是:
"{2:[2c,2h], 3:[3s], 7:[7c,7d,7h,7s]}"
基本上,我正在尝试制作德州扑克游戏。必须检查7张牌(2张牌,桌上有5张公共牌)。我想创建一个函数来跟踪字典中的卡片,但我似乎无法理解为什么我的代码不是将其他卡片添加为列表,而是跳过它们并且每个键只填充1个。
顺便说一句:在c1 = cards.Card(7,1)
和其他人中,这意味着这张牌是7个俱乐部。如果是c1 = cards.Card(7,2)
,那就意味着这张牌是7张心。 3是钻石。 4是铁锹。
答案 0 :(得分:0)
dictionary[card.rank()] = card
用新的替换该插槽中的所有内容。你不想要这个。您希望保留已存在的值,然后将下一张卡添加到其中。
之所以发生这种情况,是因为它并不关心dictionary[card.rank()]
中已有的内容,它只是赋予它一个新值。由于您希望在同一个密钥中存储多个内容,因此最终会在字典中存储每个排名的最后一个值,这就是为什么您只在每个排名中看到更高价值的卡片。
如果它还没有任何内容,这是正确的做法。但是你需要检查它是否有任何东西,如果有的话,再添加一张已经存在的卡片。
首先,你想检查一下:我的手里面有东西吗?
在python中,我们可以使用if x in y:
来检查,如果我们已经拥有该等级中的某些内容,那么这将是真的。如果是这样,我们希望append()
新卡,它只是将其添加到我们已经拥有的列表中。 else
我们只是添加了新卡片,但这里也略有变化:[card]
说取卡并将其放入列表中。该列表是我们append()
上的内容。
完整的改变:
if card.rank() in dictionary:
dictionary[card.rank()].append(card)
else:
dictionary[card.rank()] = [card]
答案 1 :(得分:0)
你明白你在这里写的是什么吗?让我们逐行浏览
> xpath -e "//text()[contains(., 'Chocolate') and not(contains(., 'Dark'))]" test.xml
Chocolate
你知道dict是对的吗?对于每个不同的键,它存储一个值,当它获得相同键的新值时,它将替换它。这就是您获得def build_rank_D(H):
dictionary = {} # every time you call a func a dict is created
for i in range(0,len(H)): # traversing the H..
card = H[i] # you are trying to fetch the element at ith index
dictionary[card.rank()] = card # you have key with it
return dictionary # you are returning it back
而不是"{2: 2h, 3: 3s, 7: 7s}"
的原因
现在我们知道问题是什么,所以我们将讨论解决方案.. 我现在在这里给你一些提示.. 1)检查密钥是否已存在于dict中 2)如果密钥存在,则添加到该相同密钥的值 3)如果你没找到密钥,那么插入元素