2014-11-17 3 views
1
import random 
import itertools  
suit = 'CSHD' 
rank = '23456789TJQKA' 
deck_of_cards = [''.join(card) for card in itertools.product(rank, suit)] 

def draw_card(deck,hand, count): 
    for i in range(count): 
     hand.append(deck.pop()) 

def hand_selection(deck): 
    shuffled_deck = random.sample(deck, len(deck)) 
    dealer_hand = [] 
    player_hand = [] 
    draw_card(shuffled_deck, dealer_hand, 1) 
    draw_card(shuffled_deck, player_hand, 1) 
    draw_card(shuffled_deck, dealer_hand, 1) 
    draw_card(shuffled_deck, player_hand, 1) 
    return dealer_hand,player_hand 

Попытка следовать принципу работы карты здесь. Сначала я хотел создать карту случайным образом, удалить ее из shuffled_deck, но мы не занимаемся карточками, случайно пробираясь через колоду, не так ли? Для моей цели код делает то, что он должен делать, но он не выглядит слишком хорошим. (Да, shuffled_deck, player_hand и dealer_hand все Глобалы на самом деле, но это не имеет значения на данный момент.)Палуба карт, занимающаяся поочередно

Что бы более элегантно (читай: вещий) решение сдавать карты таким образом? Например, мы играли что-то вроде китайского покера между, скажем, тремя игроками. Делать один за другим, как это кажется слишком утомительным.

ответ

3

Я бы палубе класса, чтобы сохранить свою соответствующую функциональность вместе:

class Deck(object): 

    def __init__(self, suits='CSHD', ranks='23456789TJQKA'): 
     self.cards = [''.join(card) for card in itertools.product(ranks, suits)] 

    def shuffle(self): 
     random.shuffle(self.cards) 

    def deal_cards(self, hand, count=1): 
     for _ in range(count): 
      hand.append(self.cards.pop()) 

    def return_cards(self, hand): 
     self.cards.extend(hand) 

И упрощать дилинговый:

deck = Deck() 
deck.shuffle() 
dealer_hand = [] 
player_hand = [] 
for _ in range(2): # number of rounds to deal 
    for hand in (dealer_hand, player_hand): # hands to deal to 
     deck.deal(hand) 

Это гораздо легче адаптировать к более игрокам и/или более раундов.

+0

Заставляет меня задаться вопросом, почему они не будут касаться классов непосредственно в нашем курсе программирования :( –

+0

Некоторые люди находят их очень сложными, но это делает жизнь намного сложнее сделать что-то вроде карт без них. – jonrsharpe

Смежные вопросы