Решение на От ливадите до Лас Вегас (и назад) от Тодор Добрев

Обратно към всички решения

Към профила на Тодор Добрев

Резултати

  • 10 точки от тестове
  • 0 бонус точки
  • 10 точки общо
  • 15 успешни тест(а)
  • 0 неуспешни тест(а)

Код

import random
class Card:
def __init__(self, suit, face):
self.suit = suit
self.face = face
def get_suit(self):
return self.suit
def get_face(self):
return self.face
def __str__(self):
return self.get_face() + " " + self.get_suit()
suits = ('clubs', 'diamonds', 'hearts', 'spades')
faces = ('2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A')
class Deck:
def __init__(self, face_filter=()):
wanted_faces = face_filter if face_filter else faces
self.cards = [Card(suit, face) for suit in suits for face in wanted_faces]
def cut(self):
random_int = random.randint(2, int(len(self.cards) / 2))
for i in range(1, random_int):
self.cards.append(self.cards[0])
self.cards.pop(0)
def shuffle(self):
random.shuffle(self.cards)
def get_cards(self):
return self.cards
def take_cards(self, n):
result = self.cards[0:n]
self.cards = self.cards[n:]
return result
def add_cards(self, cards):
self.cards.extend(cards)
class Player:
def __init__(self):
self.cards = []
def get_cards(self):
return self.cards
def add_cards(self, cards):
self.cards.extend(cards)
class Game:
def __init__(self, players, direction, instructions):
self.number_of_players = players
self.dealing_direction = direction
self.dealing_instructions = instructions
self.players = [Player() for _ in range(self.number_of_players)]
self.deck = Deck()
def get_players(self):
return self.players
def prepare_deck(self):
for player in self.players:
self.deck.add_cards(player.get_cards())
player.cards = []
self.deck.shuffle()
self.deck.cut()
def deal(self, player):
player_index = self.players.index(player)
if self.dealing_direction == 'ltr':
players_order = self.players[player_index:]
players_order.extend(self.players[0:player_index])
else:
players_order = self.players[player_index::-1]
players_order.extend(self.players[:player_index:-1])
for number_of_cards in self.dealing_instructions:
for player in players_order:
player.add_cards(self.deck.take_cards(number_of_cards))
def get_deck(self):
return self.deck
class Belot(Game):
def __init__(self):
super().__init__(4, 'ltr', (2, 3, 3))
self.deck = Deck(['7', '8', '9', '10', 'J', 'Q', 'K', 'A'])
class Poker(Game):
def __init__(self):
super().__init__(9, 'rtl', (1, 1, 1, 1, 1))

Лог от изпълнението

...............
----------------------------------------------------------------------
Ran 15 tests in 0.160s

OK

История (2 версии и 3 коментара)

Тодор обнови решението на 15.11.2022 16:30 (преди над 1 година)

+import random
+
+class Card:
+ def __init__(self, suit, face):
+ self.suit = suit
+ self.face = face
+
+ def get_suit(self):
+ return self.suit
+
+ def get_face(self):
+ return self.face
+
+ def __str__(self):
+ return self.get_face() + " " + self.get_suit()
+
+
+suits = ('clubs', 'diamonds', 'hearts', 'spades')
+faces = ('2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A')
+
+
+class Deck:
+ def __init__(self, face_filter=()):
+ wanted_faces = face_filter if face_filter else faces
+ self.cards = [Card(suit, face) for suit in suits for face in wanted_faces]
+
+ def cut(self):
+ random_int = random.randint(2, int(len(self.cards) / 2))
+ for i in range(1, random_int):
+ self.cards.append(self.cards[0])
+ self.cards.pop(0)
+
+ def shuffle(self):
+ random.shuffle(self.cards)
+
+ def get_cards(self):
+ return self.cards
+
+ def take_cards(self, n):
+ result = self.cards[0:n]
+ self.cards = self.cards[n:]
+ return result
+
+ def add_cards(self, cards):
+ self.cards.extend(cards)
+
+class Player:
+ def __init__(self):
+ self.cards = []
+
+ def get_cards(self):
+ return self.cards
+
+ def add_card(self, card):
+ self.cards.append(card)
+
+
+class Game:
+ def __init__(self, players, direction, instructions):
+ self.number_of_players = players
+ self.dealing_direction = direction
+ self.dealing_instructions = instructions
+ self.players = [Player() for _ in range(self.number_of_players)]
+ self.deck = Deck()
+
+ def get_players(self):
+ return self.players
+
+ def prepare_deck(self):
+ for player in self.players:
+ self.deck.add_cards(player.get_cards())
+ player.cards = []
+ self.deck.shuffle()
+ self.deck.cut()
+
+ def deal(self, player):
+ player_index = self.players.index(player)
+
+ if self.dealing_direction == 'ltr':
+ players_order = [self.players[player_index:]]
+ players_order.extend(self.players[0:player_index])
+ else:
+ players_order = [self.players[player_index::-1]]
+ players_order.extend(self.players[:player_index:-1])
+
+ for number_of_cards in self.dealing_instructions:
+ for player in players_order:
+ player.add_card(self.deck.take_cards(number_of_cards))
+
+ def get_deck(self):
+ return self.deck
+
+
+class Belot(Game):
+ def __init__(self):
+ super().__init__(4, 'ltr', (2, 3, 3))
+ self.deck = Deck(['7', '8', '9', '10', 'J', 'Q', 'K', 'A'])
+
+
+class Poker(Game):
+ def __init__(self):
+ super().__init__(9, 'rtl', (1, 1, 1, 1, 1))
+

Тодор обнови решението на 15.11.2022 16:41 (преди над 1 година)

import random
class Card:
def __init__(self, suit, face):
self.suit = suit
self.face = face
def get_suit(self):
return self.suit
def get_face(self):
return self.face
def __str__(self):
return self.get_face() + " " + self.get_suit()
suits = ('clubs', 'diamonds', 'hearts', 'spades')
faces = ('2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A')
class Deck:
def __init__(self, face_filter=()):
wanted_faces = face_filter if face_filter else faces
self.cards = [Card(suit, face) for suit in suits for face in wanted_faces]
def cut(self):
random_int = random.randint(2, int(len(self.cards) / 2))
for i in range(1, random_int):
self.cards.append(self.cards[0])
self.cards.pop(0)
def shuffle(self):
random.shuffle(self.cards)
def get_cards(self):
return self.cards
def take_cards(self, n):
result = self.cards[0:n]
self.cards = self.cards[n:]
return result
def add_cards(self, cards):
self.cards.extend(cards)
class Player:
def __init__(self):
self.cards = []
def get_cards(self):
return self.cards
- def add_card(self, card):
- self.cards.append(card)
+ def add_cards(self, cards):
+ self.cards.extend(cards)
class Game:
def __init__(self, players, direction, instructions):
self.number_of_players = players
self.dealing_direction = direction
self.dealing_instructions = instructions
self.players = [Player() for _ in range(self.number_of_players)]
self.deck = Deck()
def get_players(self):
return self.players
def prepare_deck(self):
for player in self.players:
self.deck.add_cards(player.get_cards())
player.cards = []
self.deck.shuffle()
self.deck.cut()
def deal(self, player):
player_index = self.players.index(player)
if self.dealing_direction == 'ltr':
- players_order = [self.players[player_index:]]
+ players_order = self.players[player_index:]
players_order.extend(self.players[0:player_index])
else:
- players_order = [self.players[player_index::-1]]
+ players_order = self.players[player_index::-1]
players_order.extend(self.players[:player_index:-1])
for number_of_cards in self.dealing_instructions:
for player in players_order:
- player.add_card(self.deck.take_cards(number_of_cards))
+ player.add_cards(self.deck.take_cards(number_of_cards))
def get_deck(self):
return self.deck
class Belot(Game):
def __init__(self):
super().__init__(4, 'ltr', (2, 3, 3))
self.deck = Deck(['7', '8', '9', '10', 'J', 'Q', 'K', 'A'])
class Poker(Game):
def __init__(self):
super().__init__(9, 'rtl', (1, 1, 1, 1, 1))