练习:用面向对象实现斗地主发牌的功能
import random
class Poker:
nums = ['3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A', '2']
colors = ['♠', '♥', '♣', '♦']
def __init__(self, num, color):
self.num = num
self.color = color
values = Poker.nums + ['joker', 'JOKER']
self.value = values.index(self.num)
def __repr__(self):
return f'{self.color}{self.num}'
@classmethod
def create_cards(cls):
pokers = [Poker(n, c) for n in cls.nums for c in cls.colors]
pokers += [Poker('JOKER', '🃏'), Poker('joker', '🃏')]
return pokers
class PokerGame:
def __init__(self):
self.pokers = Poker.create_cards()
def shuffle(self):
random.shuffle(self.pokers)
def deal_cards(self):
cards = iter(self.pokers)
cards_1, cards_2, cards_3, cards_h = [], [], [], []
for i in range(20):
if i < 17:
cards_1.append(next(cards))
cards_2.append(next(cards))
cards_3.append(next(cards))
else:
cards_h.append(next(cards))
return cards_1, cards_2, cards_3, cards_h
class Player:
def __init__(self, status='平民', pokers=None):
self.status = status
self.pokers = pokers
def sort_cards(self):
self.pokers = sorted(self.pokers, key=lambda card: card.value, reverse=True)
def host(self, host_cards):
self.status = '地主'
self.pokers += host_cards
game = PokerGame()
game.shuffle()
cards_1, cards_2, cards_3, cards_h = game.deal_cards()
p1 = Player(pokers=cards_1)
p2 = Player(pokers=cards_2)
p3 = Player(pokers=cards_3)
p1.sort_cards()
p2.sort_cards()
p3.host(cards_h)
p3.sort_cards()
print(f'地主牌:{cards_h}')
print(f'玩家1:{p1.status}>>>{p1.pokers}')
print(f'玩家2:{p2.status}>>>{p2.pokers}')
print(f'玩家3:{p3.status}>>>{p3.pokers}')