Кристиан обнови решението на 15.11.2022 17:55 (преди над 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):
Тук се очаква да инстанцираш списъка от карти, който да използваш в останалите методи, като cut
например.
+ self.face_filter = face_filter
+
+ def cut(self):
+ cards_len = len(self.face_filter) - 1
+ cutting = random.randint(0, cards_len)
+
+ cut_cards = []
+ for i in range(cutting, cards_len):
+ cut_cards.append(self.face_filter[i])
+
+ for i in range(0, cutting):
+ cut_cards.append(self.face_filter[i])
+
+ self.face_filter = cut_cards
+
+ def shuffle(self):
+ random.shuffle(self.cards)
+
+ def get_cards(self):
+ return self.cards
+
+
+class Player(Deck):
+ pass
+
+
+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.deck = Deck()
+
+ def get_players(self):
+ players = []
+
+ for i in range(0, self.number_of_players):
Ако няма да използваш дадена променлива, именувай я _
, както е по конвенция.
Освен това, range(0, x)
е същото като range(x)
.
+ person = Player()
+ players.append(person)
+
+ return players
+
+ def prepare_deck(self):
+ players = self.get_players()
+ cards = []
+
+ for player in players:
+ cards.append(player.get_cards())
+
+ deck = Deck(cards)
Не е нужно при всяко раздаване да правиш ново тесте. Освен това в момента правиш тесте само от картите на последния играч.
+ deck.shuffle()
+ deck.cut()
+
+ def deal(self, player):
+ players = self.get_players()
+
+ if self.dealing_direction == 'lhs':
lhs
е невалидна посока спрямо условията.
+ players.reverse()
+
+ i = 0
self.players.index(player)
дава този индекс.
+ for person in players:
+ if player == person:
+ break
+ else:
+ i += 1
+
+ dealing_order = []
+ for j in range(i, len(players) - 1):
+ dealing_order = players[j]
+
+ for j in range(0 , i):
+ dealing_order = players[j]
+
+ for instruction in self.dealing_instructions:
+ for j in range(instruction):
+ for person in dealing_order:
+ person = Deck(self.deck[0])
+ self.deck.pop(0)
+
+ def get_deck(self):
+ return self.deck
+
+
+class Belot:
Тук трябва да инстанцираш с по-малко тесте.
+ def __init__(self):
+ Game(4, 'ltr', (2, 3, 3))
+
+
+class Poker:
+ def __init__(self):
+ Game(9, 'rtl', (1, 1, 1, 1, 1))
Излишен празен ред.
Бих използвал protected имена на атрибути като тези, които не използваш извън класа -
self._suit
Тук се очаква да инстанцираш списъка от карти, който да използваш в останалите методи, като
cut
например.Ако няма да използваш дадена променлива, именувай я
_
, както е по конвенция.Освен това,
range(0, x)
е същото катоrange(x)
.Не е нужно при всяко раздаване да правиш ново тесте. Освен това в момента правиш тесте само от картите на последния играч.
lhs
е невалидна посока спрямо условията.self.players.index(player)
дава този индекс.Тук трябва да инстанцираш с по-малко тесте.