vaultah's answer地址,您的实际问题完美 - 他们应得的给予好评和复选标记。
但我认为在你正在学习的每种语言中编程二十一点是一个很好的理解它的好方法,所以我把代码放在一起展示了实现二十一点测试的不同方法。更多的教育目的,而不是真正回答你的问题:
# Note: sometimes an Ace should be 1, but when checking for blackjack you can always
# consider it 11
def card_value(c):
if isinstance(c, int):
return c
elif c in ['Jack', 'Queen', 'King']:
return 10
elif c == 'Ace':
return 11
def blackjack_check(hand):
hand_value = sum(card_value(c) for c in hand)
return hand_value == 21
print(blackjack_check((2, 10))) # False
print(blackjack_check((10, 10))) # False
print(blackjack_check((2, 'Ace'))) # False
print(blackjack_check(('King', 'Jack'))) # False
print(blackjack_check(('King', 'Ace'))) # True
print(blackjack_check(('Ace', 'Queen'))) # True
如果我今天来实现它,卡和手会课,并且有会是一个Hand.is_blackjack()
方法,如:
import random
class Card:
NAMES = {1: 'Ace', 11:'Jack', 12:'Queen', 13:'King'}
def __init__(self, pips, suit):
self.pips = pips
self.suit = suit
def __repr__(self):
name = Card.NAMES.get(self.pips, "%d" % self.pips)
return "%s of %s" % (name, self.suit)
def value(self, ace_hi=True):
# Handle Ace
if self.pips == 1:
return 11 if ace_hi else 1
return min(self.pips, 10)
class Hand(list):
def is_blackjack(self):
hand_value = sum(c.value() for c in self)
return hand_value == 21
CARDS = [Card(p,s) for p in range(1,14) for s in ['Spades', 'Hearts', 'Clubs', 'Diamonds']]
h = Hand(random.sample(CARDS, 2))
print("Hand:")
for c in h:
print(" %s" % c)
print("Blackjack? %s" % h.is_blackjack())
示例:
Hand:
Jack of Spades
Ace of Spades
Blackjack? True
Hand:
Queen of Spades
9 of Diamonds
Blackjack? False
对不起,这是愚蠢的非答案,但这些只是想法不同的想法。不要担心,如果他们在你的头上,你会到达那里。
''Ace'在手和任何(x在赢得卡片x手[0:2]) –