我的字典有什么问题(将值映射到卡片)
What is wrong with my dictionary (mapping values to cards)
这个游戏是二十一点,我有一些代码片段可以制作一副牌和一手牌。从牌组中,这是一个列表,我正在尝试构建一个字典,以便根据 Blackjack 的规则,每张牌(牌组中的一个元组)都有一个映射到它的值。
from random import randint
def make_deck():
deck = []
for suit in suits:
for rank in ranks:
deck.append((suit,rank))
return deck
suits = ['spades','hearts','diamonds','clubs']
ranks = ['ace','two','three','four','five','six','seven','eight','nine','ten','jack','queen','king']
deck = make_deck()
def make_hand():
hand = []
for k in range(2):
card = deck.pop(randint(0,51))
hand.append(card)
return hand
hand = make_hand()
values = {} #empty dictionary
for card in deck:
rank = [card[1] for card in deck]
if rank == 'ace':
values[card] = 1
elif rank == 'two':
values[card] = 2
elif rank == 'three':
values[card] = 3
elif rank == 'four':
values[card] = 4
elif rank == 'five':
values[card] = 5
elif rank == 'six':
values[card] = 6
elif rank == 'seven':
values[card] = 7
elif rank == 'eight':
values[card] = 8
elif rank == 'nine':
values[card] = 9
elif rank == 'ten' or 'jack' or 'queen' or 'king':
values[card] = 10
print values
显然,这在很大程度上是通过蛮力创建字典并且缺乏任何优雅,因此任何指向更有效方式的指针将不胜感激。真正的问题是我无法确定我的代码有什么问题 print values
returns 只有一个元组映射到它的值而不是整个字典。如果我将 rank
的列表理解移到循环之外,我只会得到一个字典,其中所有内容都映射到值 10.
此外,我刚刚意识到我的 make_hand()
函数有时会在 "the pop index is out of range," 处导致错误,因此也将不胜感激关于尝试的建议,以便它始终有效。
替换行:
rank = [card[1] for card in deck]
与:
rank = card[1]
是的,您可以通过创建一个将值映射到分数的字典来更有效(更优雅)地做到这一点:
mapper = {'ace': 1, 'two': 2, ...}
然后你就不需要 if/elif...否则:
for card in deck:
values[card] = mapper[card[1]]
这个游戏是二十一点,我有一些代码片段可以制作一副牌和一手牌。从牌组中,这是一个列表,我正在尝试构建一个字典,以便根据 Blackjack 的规则,每张牌(牌组中的一个元组)都有一个映射到它的值。
from random import randint
def make_deck():
deck = []
for suit in suits:
for rank in ranks:
deck.append((suit,rank))
return deck
suits = ['spades','hearts','diamonds','clubs']
ranks = ['ace','two','three','four','five','six','seven','eight','nine','ten','jack','queen','king']
deck = make_deck()
def make_hand():
hand = []
for k in range(2):
card = deck.pop(randint(0,51))
hand.append(card)
return hand
hand = make_hand()
values = {} #empty dictionary
for card in deck:
rank = [card[1] for card in deck]
if rank == 'ace':
values[card] = 1
elif rank == 'two':
values[card] = 2
elif rank == 'three':
values[card] = 3
elif rank == 'four':
values[card] = 4
elif rank == 'five':
values[card] = 5
elif rank == 'six':
values[card] = 6
elif rank == 'seven':
values[card] = 7
elif rank == 'eight':
values[card] = 8
elif rank == 'nine':
values[card] = 9
elif rank == 'ten' or 'jack' or 'queen' or 'king':
values[card] = 10
print values
显然,这在很大程度上是通过蛮力创建字典并且缺乏任何优雅,因此任何指向更有效方式的指针将不胜感激。真正的问题是我无法确定我的代码有什么问题 print values
returns 只有一个元组映射到它的值而不是整个字典。如果我将 rank
的列表理解移到循环之外,我只会得到一个字典,其中所有内容都映射到值 10.
此外,我刚刚意识到我的 make_hand()
函数有时会在 "the pop index is out of range," 处导致错误,因此也将不胜感激关于尝试的建议,以便它始终有效。
替换行:
rank = [card[1] for card in deck]
与:
rank = card[1]
是的,您可以通过创建一个将值映射到分数的字典来更有效(更优雅)地做到这一点:
mapper = {'ace': 1, 'two': 2, ...}
然后你就不需要 if/elif...否则:
for card in deck:
values[card] = mapper[card[1]]