Ваш код очень не пифоничен. Помните, что Python - это не C.
- Точка с запятой необязательна.
- Скобки в
if
необязательны.
- Чтобы получить последний элемент списка
a
, используйте a[-1]
, не обращая a
, затем получите его первый элемент.
Используйте встроенные функции! Ваш модифицированный maxagent
может быть записан просто с помощью функции 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
Если вам тоже нужен счет, рассмотрите возможность возврата кортежа .
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)