2015-12-15 20 views
6

最初のアイテムで始まらない間に次のリストを印刷する方法を理解しようとしています。明確にするために:リストが[0,1,2,3,4,5,6,7,8]であれば、私は4,5,6,7,8,0,1,2,3最初のアイテムで始まらないリスト全体を印刷する方法

のようなものを印刷するここでは、コードです:

you_can_move_on = False 

List = [0,1,2,3,4,5,6,7,8] 

next_player = 3 

while not you_can_move_on: 
    next_player = self.get_next_player_index(next_player) 
    you_can_move_on = self.check_if_I_can_move_on 
    print(next_player) 


def get_next_player_index(self, i): 
    if i == len(self.players): 
     return 0 
    else: 
     return i+1 

def check_if_I_can_move_on(self): 
    return False 
+0

投稿したコードで実行中の問題/エラーはありますか? – moveaway00

答えて

9

私は回転させたい場合は、

print(l[3:] + l[:3]) 
+0

"next_player = 3"は必ずしも3とは限りません。 "list index of range"というエラーが発生します。私は問題がget_next_player_index関数内にあると思う。 – RageAgainstheMachine

4

されるべきだと思うがプレイヤーは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]) 
+0

"リストのインデックスが範囲外です"というエラーが表示されます。私はあなたが問題を?:見つけることができ、このようにそれを実装 \tデフget_next_player_index(自己、I): \t \t場合、私== LEN(self.players): \t \t \t N_P = self.players [I] \t \t \t self.players.rotate()他の \t \t N_P \t \t \tリターン: \t \t \tリターンI + 1 – RageAgainstheMachine

+0

@RageAgainstheMachine、あなたはINDEする必要はありません。 x何か、あなたの選手は順番に行っていないですか?また、デッキ –

+0

のポーカーゲームを使用してリストエラーを得ることはできません。プレイヤーは「順番に」進行していますが、各プレイヤーは新しい「最初のプレイヤー」になるでしょう。 – RageAgainstheMachine

関連する問題