Нет простого способа сделать то, что вы хотите.Вы можете возможно перевернуть список на месте, но вам также необходимо переместить его части, чтобы убедиться, что правильный игрок «следующий» в очереди.
Лучший выбор - это простоиспользовать другой вид цикла.Самым простым может быть использование цикла while
и отслеживание текущего индекса и направления увеличения некоторых переменных, которые вы можете изменить:
players_list = range(1, players+1) # not actually a list in Python 3, but that doesn't matter
player_index = 0
player_direction = 1 # going forwards in the list, to start
while True:
current_player = players_list[player_index]
# do game stuff here with current_player
if game_over:
break
if reverse:
player_direction = -player_direction
players_index = (players_index + player_direction) % players # update for next index
Вы также можетеположить часть этой логики в функцию генератора.Это позволило бы вам инкапсулировать немного грязную логику циклического и обратного преобразования, а код основного цикла просто был бы равен for player in player_gen()
.Единственная сложность заключается в том, чтобы выяснить, как ваша игровая логика скажет генератору, когда нужно повернуть вспять (и когда выйти).Если бы генератор был методом некоторого класса (возможно, класса Game
), было бы легко использовать атрибут или вызов метода, чтобы позаботиться о вас (переменная game_over
может быть self.game_over
, апереключение player_direction
может быть выполнено методом reverse
.