Пламена обнови решението на 15.11.2022 17:35 (преди около 2 години)
+import random
+
+
+class Card:
+
+ def __init__(self, suit, face):
+ self.suit = suit
Бих използвал protected имена на атрибути като тези, които не използваш извън класа - self._suit
+ self.face = face
+
+ def get_suit(self):
+ return self.suit
+
+ def get_face(self):
+ return self.face
+
+
+class Deck:
+ def __init__(self, face_filter=('2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A')):
+ self.cards = [Card(suit, face) for face in face_filter for suit in ['clubs', 'diamonds', 'hearts', 'spades']]
+
+ def cut(self):
+ index_to_cut = random.randint(0, len(self.cards))
Така може да се окаже, че индексът ти е гранична стойност и да не промениш тестето изобщо.
+ temp = self.cards[0:index_to_cut + 1]
+ del self.cards[0:index_to_cut + 1]
+ self.cards.extend(temp)
+
+ def shuffle(self):
+ random.shuffle(self.cards)
+
+ def get_cards(self):
+ return self.cards
+
+
+class Player:
+ def __init__(self):
+ self.hand = []
+
+ def get_cards(self):
+ return self.hand
+
+
+class Game:
+ def __init__(self, number_of_players, dealing_direction, dealing_instructions):
+ self.number_of_players = number_of_players
+ self.dealing_direction = dealing_direction
+ self.dealing_instructions = dealing_instructions
+ self.players = [Player() for _ in range(number_of_players)]
+ self.deck = Deck()
+
+ def get_players(self):
+ return self.players
+
+ def prepare_deck(self):
+ for player in self.players:
+ self.deck.cards.extend(player.get_cards())
+ del player.hand
Хмм, по-скоро искаш да изтриеш елементите, а не целият списък.
+ self.deck.shuffle()
+ self.deck.cut()
+
+ def deal(self, first_player):
+ if self.dealing_direction == 'rtl':
+ players = reversed(self.players)
+ else:
+ players = self.players
+ index = players.index(first_player)
+ temp_players = players[index:]
+ temp_players.extend(players[:index])
+ for number_of_cards in self.dealing_instructions:
+ for player in temp_players:
+ player.hand.extend(self.deck.cards[0:number_of_cards])
+ del self.deck.cards[0: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))
+ self.deck = Deck()
Бих използвал protected имена на атрибути като тези, които не използваш извън класа -
self._suit
Така може да се окаже, че индексът ти е гранична стойност и да не промениш тестето изобщо.
Хмм, по-скоро искаш да изтриеш елементите, а не целият списък.