所以遊戲是二十一點,我有代碼片段來製作一副牌和一隻手。從甲板上,這是一個列表,我試圖建立一個字典,以便每張牌(甲板上的一個元組)都將有一個映射到它的值,按照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
只返回一個元組映射到它的值而不是整個字典。如果我在循環之外移動rank
的列表理解,我只是得到一個字典,其中一切都映射到值10.
此外,我只是意識到我的make_hand()
函數有時會導致一個錯誤,其中「彈出指數超出範圍「,所以建議您嘗試以使其始終能夠正常工作,這也值得讚賞。
也許使'''行列'''(等級,值)元組的項目。然後你可以使用['''operator.itemgetter'''](https://docs.python.org/3/library/operator.html#operator.itemgetter)來檢索出值排序。 – wwii