Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 24, 2018 10:37:21

Guguzjaka
Зарегистрирован: 2018-12-24
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Рефакторинг кода

Добрый день.
Нужна помощь опытных “питонистов”
Я создал метод, код ниже, который скорее всего можно хорошенько сократить и сделать его более “питонистым”, но я ещё в этом деле неопытен. Могли бы вы глянуть своим опытным взглядом и дать пару подсказок?
И ещё, если не затруднит, поправить одно условие, оно закомментировано в коде, 2 дня уже ломаю голову над этим условием, не получается.
вот код:

 def play(self):
        """Start the WarGame."""
        new_players = self.players[:]   # make list copy
        while len(new_players) != 1:    # start loop until one object remains in list
            self.deck.deal(new_players, per_hand=1)  # hand over to each player one card
            m = new_players[0].total
            n = 0
            for player in new_players:
                print(player)
            """Need this condition but it's not work
            for player in new_players:
            # if the all objects in the list are equal, start the loop over
                if new_players.count(player.total) >= len(new_players):
                    self.play()"""
            # find those who need to kill
            for player in new_players:
                if player.total < m:
                    m = player.total
                    n = new_players.index(player)
            # kill'em all
            for player in new_players:
                if m == player.total:
                    n == new_players.index(player)
                    print("R.I.P.:", player.name)
                    new_players.remove(player)
            # clear copy list
            for player in new_players:
                player.clear()
        print("Win!:", player.name)
        # clear list
        for player in self.players:
            player.clear()
Спасибо.

Отредактировано JOHN_16 (Дек. 24, 2018 10:59:52)

Офлайн

#2 Дек. 25, 2018 10:38:03

Guguzjaka
Зарегистрирован: 2018-12-24
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Рефакторинг кода

Добрый день.
Спасибо всем за участие, если кому интересно я нашёл ответ на свой вопрос.

 def play(self):
 """Start the WarGame."""
        new_players = self.players[:]
        while len(new_players) != 1:
            self.deck.deal(new_players, per_hand=1)
            for player in new_players:
                print(player)
            min_score = min(player.total for player in new_players)
            dead_players = [player for player in new_players if player.total <= min_score]
            living_players = [player for player in new_players if player.total > min_score]
            if not living_players:
                # everybody died, play again
                for player in new_players:
                    player.clear()
                    print()
                continue
            # kill'em all
            for player in dead_players:
                print("R.I.P.:", player.name)
            new_players = living_players
            for player in new_players:
                player.clear()
        print("Win!:", player.name)
        for player in self.players:
            player.clear()
Тут и рефакторинг и полностью рабочий метод.

Отредактировано Guguzjaka (Дек. 25, 2018 10:38:41)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version