2015-12-15 5 views
6

Ich versuche herauszufinden, wie man die folgende Liste druckt, ohne mit dem ersten Element zu beginnen. Um klar zu sein: Wenn die Liste [0,1,2,3,4,5,6,7,8] ist, möchte ich so etwas wie 4,5,6,7,8,0,1,2,3So drucken Sie eine ganze Liste, während Sie nicht mit dem ersten Element beginnen

Hier ist der Code drucken:

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

Welche Probleme/Fehler laufen Sie mit dem veröffentlichten Code? – moveaway00

Antwort

9

Ich denke, es sollte

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

"next_player = 3" ist nicht immer 3. Ich bekomme einen Fehler "Listenindex außerhalb des Bereichs". Ich denke, das Problem liegt in der Funktion get_next_player_index. – RageAgainstheMachine

4

werden, wenn Sie die zu dreh Spieler verwenden einen deque, um zu fahren:

Wenn Sie den Überblick über jeden Spieler halten wollte halten Sie könnten nur Dreh:

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) 

Ausgang:

deque([0, 1, 2, 3, 4, 5, 6, 7, 8]) 
0 
deque([8, 0, 1, 2, 3, 4, 5, 6, 7]) 
8 

Sie die Logik in einer get_next_player Funktion bewegen kann, nur self.players eine deque machen, diese wird automatisch neu gestartet, nachdem alle Spieler mit einem anderen Spieler einen Sprung hatte jede Revolution beginnen:

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 

die Funktion der Umdrehungen kümmert, können Sie die l sehen ogic unten:

# 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

Ich bekomme immer noch den Fehler "Listenindex außerhalb des Bereichs". Ich setzte es wie diese, können Sie ein Problem vor Ort ?: \t def get_next_player_index (self, i): \t \t wenn i == len (self.players): \t \t \t n_P = self.players [i] \t \t \t self.players.rotate() \t \t \t Rückkehr n_P \t \t anderes: \t \t \t Rückkehr i + 1 – RageAgainstheMachine

+0

@RageAgainstheMachine, die Sie nicht brauchen inde x irgendetwas, sind deine Spieler nicht sequentiell? Es ist auch nicht möglich, dass Sie einen Fehler mit einer Deque –

+0

es ist ein Poker-Spiel, die Spieler gehen "in Reihenfolge", aber jede Umdrehung gibt es einen neuen "ersten Spieler" – RageAgainstheMachine

Verwandte Themen