What would be your recommendation for dealing a black jack hand?
我是一个初学者,被要求(作为课程的一部分)构建一个黑杰克游戏。
我的初始代码可以在下面找到。当我进入Deck类并必须创建Deal方法时,我会遇到的问题。我正在努力的是如何处理最初的四张牌,如何将它们从卡组中可用的卡中删除(以备将来打中),然后还可以将它们存储为实际玩家手牌中的变量。即将上课。感谢帮助!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | import random suits = ('Hearts', 'Diamonds', 'Spades', 'Clubs') ranks = ('Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight', 'Nine', 'Ten', 'Jack', 'Queen', 'King', 'Ace') values = {'Two':2, 'Three':3, 'Four':4, 'Five':5, 'Six':6, 'Seven':7, 'Eight':8, 'Nine':9, 'Ten':10, 'Jack':10, 'Queen':10, 'King':10, 'Ace':11} playing = True class Card: def __init__(self,suit,rank,value): self.suit = suit self.rank = rank self.value = value def __str__(self): print(f'{rank} of {suit}') class Deck: def __init__(self): self.deck = [] # start with an empty list for suit in range(len(suits)): for rank in range(len(ranks)): self.deck += [(suits[suit],values[ranks[rank]])] def __str__(self): return f'{self.deck}' def shuffle(self): random.shuffle(self.deck) def deal(self): ????? |
我的建议是只弹出
1 2 | def deal(self) -> Card: return self.deck.pop() |
然后要生成两张牌的两只手,您可以执行以下操作:
1 | player_hand, dealer_hand = ([deck.deal() for _ in range(2)] for _ in range(2)) |
或者也许是:
1 2 3 4 5 6 7 | def deal_starting_hand(deck: Deck) -> List[Card]: """Deals a starting hand of two cards.""" return [deck.deal() for _ in range(2)] deck = Deck() players = ["Player 1","Dealer"] player_hands = {player: deal_starting_hand(deck) for player in players} |
等
如果您确实希望有一个函数可以返回四张卡,而又不想通过迭代弹出来完成此操作,则可以执行以下操作:
1 2 3 | four_cards = self.deck[:4] self.deck = self.deck[4:] return four_cards |
但是,从学习和可读性的angular来看,IMO最好先具有较小的简单功能,然后再使用它来构建更大的东西。