されるべきだと思うがプレイヤーはdeque
を使用して次のサイクルを実行します。
from collections import deque
d = deque([0,1,2,3,4,5,6,7,8])
d.rotate(len(d)//2 + 1)
print(d)
deque([4, 5, 6, 7, 8, 0, 1, 2, 3])
from collections import deque
d = deque([0,1,2,3,4,5,6,7,8])
print(d)
next_p = d[0]
print(next_p)
d.rotate()
print(d)
next_p = d[0]
print(next_p)
出力:
deque([0, 1, 2, 3, 4, 5, 6, 7, 8])
0
deque([8, 0, 1, 2, 3, 4, 5, 6, 7])
8
をあなただけself.playersデック、これを行い、get_next_player
関数の内部ロジックを移動することができますが、各プレイヤーのトラックを維持したい場合は、単に回転保つことができます
def get_next_player(self):
if self.players[0] is None:
self.players.popleft()
self.players.rotate(-1)
self.players.appendleft(None)
else:
n_p = self.players[0]
self.players.rotate()
return n_p
この機能は回転を処理しているので、あなたはlを見ることができます下記の偽のコード:
# sim round
In [25]: print([get_next_player() for _ in range(10)])
[1, 0, 8, 7, 6, 5, 4, 3, 2, 1]
In [26]: players
# now next player starts
Out[26]: deque([None, 1, 2, 3, 4, 5, 6, 7, 8, 0])
# sim round
In [27]: print([get_next_player() for _ in range(10)])
[2, 1, 0, 8, 7, 6, 5, 4, 3, 2]
In [28]: players
Out[28]: deque([None, 2, 3, 4, 5, 6, 7, 8, 0, 1])
# next player starts
In [29]: print([get_next_player() for _ in range(10)])
[3, 2, 1, 0, 8, 7, 6, 5, 4, 3]
In [30]: players
Out[30]: deque([None, 3, 4, 5, 6, 7, 8, 0, 1, 2])
投稿したコードで実行中の問題/エラーはありますか? – moveaway00