class Table(object): def __init__(self, number_of_decks, number_of_players, name_of_players): self.dealer = Dealer() self.players = [Player(name) for name in name_of_players] self.cards = Cards(number_of_decks) def distribute_card_to_dealer(self): self.dealer.hand.append(self.cards.take_a_card_from_stack()) def distribute_card_to_player(self, player): player.hand.append(self.cards.take_a_card_from_stack()) def show_first_card_of_dealer(self): return {self.dealer.name: self.dealer.hand[0]} def show_cards_of_players(self): return {player.name: player.hand for player in self.players} def calc_score(self, player_or_dealer): player_or_dealer.score = 0 player_or_dealer.value_for_ace_card = 11 for card_key, card_value in player_or_dealer.hand: if card_key == 'A': player_or_dealer.score += player_or_dealer.value_for_ace_card else: player_or_dealer.score += card_value if player_or_dealer.score > 21 and ('A', None) in player_or_dealer.hand: player_or_dealer.score -= 10 player_or_dealer.value_for_ace_card = 1 return player_or_dealer.score def get_the_results_of_game(self): results = [] for player in self.players: if self.dealer.score > 21 and player.score <= 21: results.append({'dealer': 'Loser', player.name: 'Winner'}) elif (player.score > 21) or (21 > self.dealer.score > player.score): results.append({'dealer': 'Winner', player.name: 'Loser'}) elif self.dealer.score < 21 and self.dealer.score < player.score: results.append({'dealer': 'Loser', player.name: 'Winner'}) elif self.dealer.score == player.score == 21 and \ len(self.dealer.hand) == 2 and len(player.hand) > 2: results.append({'dealer': 'Winner', player.name: 'Loser'}) elif self.dealer.score == player.score == 21 \ and len(self.dealer.hand) > 2 and len(player.hand) == 2: results.append({'dealer': 'Loser', player.name: 'Winner'}) elif (self.dealer.score == player.score == 21 and len(self.dealer.hand) == 2 and len(player.hand) == 2) \ or (self.dealer.score == player.score): results.append({'dealer': 'Push', player.name: 'Push'}) return results