Я изучаю python всего около месяца. Это рекурсивная функция, в которой я пишу, чтобы мой Pygame нашел правильный путь в полигоне без отступления. Это всего лишь Пентагон, (0,1,2,3,4) - число вершин.В любом случае, чтобы изменить рекурсивную функцию, чтобы вернуть значение и не иметь глобальных переменных?
Однако, этот код работает с двумя глобальными переменными:
last_poses = {}
route_all = []
Это означает, что я должен инициализировать этим двум переменным каждый раз, когда я называю его. И я также пытаюсь вернуть все доступные маршруты, но это не сработало.
Этот результат происходит от глобальной переменной, это правильно:
[{0: 0, 1: 4, 2: 3, 3: 2, 4: 1, 5: 0}, {0: 0, 1: 4, 2: 3, 3: 2, 4: 1, 5: 0}]
Этот результат происходит от возвращаемого значения:
[{0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 0}]
Мой вопрос, чтобы вернуть правильное значение без глобальных переменных. Любой, кто может помочь мне разрешить это, я действительно ценю это.
legal_action = ((4,1),(0,2),(1,3),(2,4),(0,3))
def route_cal(start_pos, steps):
global last_poses,route_all
last_poses[steps] = start_pos
steps -= 1
dest_all = list(legal_action[start_pos])
if len(last_poses) >= 2:
for i in dest_all:
if i == last_poses[steps+2]:
dest_all.remove(i)
if steps > 0:
for pos in dest_all:
# route_cal(pos,steps)
return route_cal(pos,steps)
elif steps == 0:
last_poses[steps] = dest_all[0]
route_all.append(last_poses)
return route_all
# return route_all
last_poses = {}
route_all = []
# route_cal(0, 5)
# print route_all
routelines = route_cal(0,5)
print routelines
Я хотел бы помочь, но у меня есть небольшая проблема, следуя логике. Прежде всего, почему избыток рекурсивной рутины? Если все, что вам нужно сделать, это найти свой путь вокруг многоугольника, просто перейдите в список legal_action в любом порядке: единственный возможный путь - наоборот. Во-вторых, данный код не возвращает оба маршрута. Можете ли вы пояснить, пожалуйста? – Prune
Обрезать, спасибо. Мой pygame выглядит как схема «#», а Пентагон - всего лишь один угол полной цепи. Поэтому я хочу, чтобы моя функция работала под любыми юридическими действиями для любых шагов в любой позиции. Список юридических действий, созданный для работы с кругооборотом, - это все, что я могу получить до сих пор. Если у вас есть лучший способ контролировать движение на такой схеме, пожалуйста, скажите мне. –
Во-вторых, функция может возвращать только один из путей, который не может вернуть два последних списка путей. Если я напишу путь к глобальной переменной, результат будет правильным. Я ценю любую помощь от вас. –