BlackJack卡片组的查找表

时间:2014-05-29 16:17:58

标签: python dictionary lookup-tables playing-cards blackjack

我正在制作一个完美无缺的简单二十一点游戏 - 直到将面部卡片添加到卡座中。此查找表返回:KeyError:1

我知道(或者至少我很确定)这是因为:'rank':self.values [face]

为什么它会返回KeyError:1?怎么能解决这个问题?

import random

class DeckOfCards(object):
def __init__(self):
    self.values = {"2": 2,
                   "3": 3,
                   "4": 4,
                   "5": 5,
                   "6": 6,
                   "7": 7,
                   "8": 8,
                   "9": 9,
                   "10": 10,
                   "J": 10,
                   "Q": 10,
                   "K": 10,
                   "A": 11,
                   }
    self.faces = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'Q', 'K', 'A']
    self.suits = ['C', 'D', 'H', 'S']
    self.unused_cards = []
    for suit in self.suits:
        for face in self.faces:
            self.unused_cards.append({'face': face, 'suit': suit, 'rank': self.values[face]})
    random.shuffle(self.unused_cards)
    self.used_cards = []

def play(self):
    print self.unused_cards

cardsss = DeckOfCards()
cardsss.play()

3 个答案:

答案 0 :(得分:0)

self.values dict将字符串作为键,但在self.unused_cards.append({'face': face, 'suit': suit, 'rank': self.values[face]})中,您使用的是int类型的键。

这将解决它:

self.unused_cards.append({'face': face, 'suit': suit, 'rank': self.values[str(face)]})

答案 1 :(得分:0)

self.valuesself.faces之间存在不一致。 特别是self.values将字符串作为键,而self.faces中包含一些整数。

这是一个可能的解决办法:

self.faces = [ "2", "3", "4", "5", "6", "7","8", "9", "10", 'J', 'Q', 'K', 'A']

答案 2 :(得分:0)

在这一行,你试图访问self.values字典中不存在的一个键,因为你有一个'1'的self.face条目,但是你没有self.values中的一个键为'1'。

self.unused_cards.append({'face': face, 'suit': suit, 'rank': self.values[face]})