В настоящее время я работаю над игрой в блэкджек в Python. Чтобы забрать руку, я вызываю следующую функцию. highAce, если это правда, забьет Эйса как 11, а если ложно, забьет их как 1.Получение "KeyError 2" в Python?
def score_hand(self, highAce):
curr_score = 0
special_scores = {'J': 11, 'Q': 12, 'K': 13, 'A': (1, 11)[highAce]}
for card in self._cards:
curr_score += special_scores[card[0]] if type(card[0]) is str else card[0]
return curr_score
Все в self._cards
представляет собой именованный кортеж под названием «Card», который имеет «ранг» и 'костюм'.
Карты создаются следующим образом (это еще один класс):
Card = collections.namedtuple('Card', ['rank', 'suit'])
ranks = [str(n) for n in range(2, 11)] + list('JQKA')
suits = 'spades diamonds clubs hearts'.split()
def __init__(self, seed=None):
self._cards = [Card(rank, suit) for suit in self.suits for rank in self.ranks]
Вопрос, кажется, придумать в этой линии curr_score += special_scores[card[0]] if type(card[0]) is str else card[0]
итератора принимает взгляд на «звание» от каждый карта. Если ранг НЕ является строкой, это означает, что это всего лишь номер 1 ~ 9, что также означает, что мы можем просто добавить это к счету. Однако, если строка ранга IS A, это означает, что это либо JQKA. Таким образом, я либо добавляю его значение в таблицу special_scores, либо ее фактическое значение ранга.
JQK все набрали 10 баллов в блэкджеке. –