Votre code est très peu symbolique. Rappelez-vous que Python n'est pas C.
- Le point-virgule est facultatif. La parenthèse dans un
if
est facultative.
- Pour obtenir le dernier élément de la liste
a
, utilisez a[-1]
, ne pas inverser a
puis obtenir son premier élément.
Utilisez les fonctions intégrées! Votre modification maxagent
peut être écrit simplement en utilisant la fonction max
:
def maxagent(gamestate, depth):
actions = gamestate.getLegalActions(0)
filteredactions = filter(lambda action: action != Directions.STOP, actions)
# alternatives:
# filteredactions = filter(Directions.STOP.__ne__, actions)
# filteredactions = (a for a in actions if a != Directions.STOP)
bestaction = max(filteredactions,
key=lambda action: self.minvalue(
gamestate.generateSuccessor(0, action),
depth, 1
))
return bestaction
Si vous avez besoin le score aussi, envisager de revenir un tuple.
def maxagent(gamestate, depth)
actions = gamestate.getLegalActions(0)
scores = ((self.minvalue(gamestate.generateSuccessor(0, a), depth, 1), a)
for a in actions if a != Directions.STOP
)
return max(scores)
...
score, action = maxagent(gamestate, depth)
Quel est votre problème réel? Pourquoi 'return theAction' ne fonctionne-t-il pas? – katrielalex
J'ai besoin d'utiliser la liste définie dans la fonction def maxvalue. Je dois retourner sa 1ère entrée en l'inversant. – Shilpa
Votre indentation est tout faux. – kennytm