j'ai pu répéter la description de votre problème avec le code suivant
from itertools import cycle, dropwhile
direction = None
directions = ["NORTH", "EAST", "SOUTH", "WEST"]
cycled = cycle(directions)
current = dropwhile(lambda x: x != direction, cycled)
direction = next(current)
Il est difficile de dire sans le reste de votre code, mais par les regards de la valeur initiale de direction
ne n'existe pas dans la liste directions
; ce qui signifie qu'il n'est ni NORTH
, SOUTH
, EAST
, ou WEST
(sensible à la casse). Cela provoque une itération infinie entre cycle
et dropwhile
Si vous lisez la documentation itertools
, dropwhile
Faire un itérateur qui laisse tomber des éléments de la itérables tant que le prédicat est vrai; après, retourne tous les éléments
Tout d'abord, étant donné dropwhile
gouttes éléments aussi longtemps que le prédicat est vrai, il va enfin arrêter une fois qu'il est atteint une valeur fausse, puis retourner l'élément restant. En second lieu, l'utilisation de cycle génère une répétition iterator
Faire un retour iterator éléments de la itérables et l'enregistrement d'une copie de chacun. Lorsque l'itérable est épuisée, renvoyez les éléments de la copie enregistrée. Répète indéfiniment
Puisque la valeur de direction
n'existe pas dans directions
, dropwhile
regarde à travers un itérateur de longueur infinie et sans jamais atteindre un cas qui le casse
Écrivez un exemple complet qui reproduit votre problème –
J'appelle juste cette méthode et il semble que les cycles de processus à la dernière déclaration – PapeK24
Comment appelez-vous 'rotate_left'? – Wondercricket