你好我正在研究一个简单的德州扑克模拟器。我是python的新手,希望能在这里得到一些关于我使用类的建议。我觉得我没有尽可能高效地使用它们,特别是在处理玩家卡时。具体来说,我觉得可以简化def deal(self, n_players)
而不是使用playercard1和playercard2,并删除" deck&#34 ;?中的项目。这是代码:
from random import shuffle
class TexasHoldem:
#create deck
def __init__(self):
values = ['Ace', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'Jack', 'Queen', 'King']
suites = ['Heart', 'Spade', 'Club', 'Diamond']
self.deck = [j + " " + i for j in values for i in suites]
#shuffle deck
def shuffle(self):
shuffle(self.deck)
#deal for players
def deal(self, n_players):
count = 0
#card 1 list (will be shuffled, delt 'around the table' as if a real stack)
playercard1 = list()
while count < n_players:
card1 = self.deck[count]
playercard1.append(card1)
count += 1
#remove cards from deck that were delt
for i in playercard1:
self.deck.remove(i)
count = 0
#card 2 list
playercard2 = list()
while count < n_players:
card2 = self.deck[count]
playercard2.append(card2)
count += 1
#remove cards from deck delt for 2nd card
for i in playercard2:
self.deck.remove(i)
#merge cards of playercard1 and playercard2 into set
self.playerhand = zip(playercard1, playercard2)
#define the flop
def flop(self):
#burn a card
del self.deck[0]
#lay down three
self.flopcards = self.deck[0:3]
#delete flop from deck
for i in self.flopcards:
self.deck.remove(i)
#same as flop for turn and river
def turn(self):
del self.deck[0]
self.turncard = self.deck[0:1]
for i in self.turncard:
self.deck.remove(i)
def river(self):
del self.deck[0]
self.rivercard = self.deck[0:1]
for i in self.rivercard:
self.deck.remove(i)
#create instance of Cards class
c = TexasHoldem()
#shuffle for this instance
c.shuffle()
#deal for n players
c.deal(9)
print 'Player Hands:'
for i in c.playerhand:
print i
#flop
c.flop()
print 'Flop:'
print c.flopcards
#turn
c.turn()
print 'Turn:'
print c.turncard
#river
print 'River:'
c.river()
print c.rivercard
答案 0 :(得分:1)
一些快速评论:
flop
,turn
和river
几乎都在做同样的事情。你可以有一个方法,从你的牌组顶部返回一张牌列表list.pop
的同时执行此操作,而不是首先提取卡然后将其删除。那么你永远不会错误地删除错误的金额为了更安全,您可以使用不同的类来表示游戏中的不同状态。这样可以确保调用方法的人不会以错误的顺序调用它们。然后,您将拥有ShuffledDeck
DealtDeck
等,每个方法都将返回下一个类的实例。利用多个返回值,代码如下所示。
deck = new Deck() # fresh deck
deck = deck.shuffle() # a shuffled deck
deck, hand = deck.deal() # a deck without dealt cards