2015-03-26 2 views
0

Я просто хочу спросить вас об упражнении в школе, основанном на построении лабиринта на питоне. Начнем с известной (x, y) точки и n * n графа. В каждой рекурсии мы должны сделать neighbouring_list для каждой пары (x, y), которая будет содержать ближайшие элементы точки. До сих пор я написал этот код, который показывает правильные результаты, но я не могу сохранять и управлять исключительными новыми x и y, которые выбраны из соседнего списка. Они выполняют так, как (8,8), и я не могу написать x = 8 и y = 8. У вас есть идея? Заранее спасибо!как манипулировать списком в python

if(x and y == 0): 
    neighbouring_list = [((x + 1), y), (x, (y + 1))] 
elif (x == (n - 1) and y == 0): 
    neighbouring_list = [((x - 1), y), (x, (y + 1))] 
elif (y == 0): 
    neighbouring_list = [((x + 1), y), ((x - 1), y), (x, (y + 1))] 
elif (y == (n - 1) and x == 0): 
    neighbouring_list = [(x, (y - 1)), ((x + 1), y)] 
elif (x == 0): 
    neighbouring_list = [(x, (y + 1)), (x, (y - 1)), ((x + 1), y)] 
elif (x == (n - 1) and y == (n - 1)): 
    neighbouring_list = [(x, (y - 1)), ((x - 1), y)] 
elif (x == (n - 1)): 
    neighbouring_list = [((x - 1), y), (x, (y + 1)), (x, (y - 1))] 
elif (y == (n - 1)): 
    neighbouring_list = [(x, (y - 1)), ((x - 1), y), ((x + 1), y)] 
else: 
    neighbouring_list = [((x - 1), y), ((x + 1), y), (x, (y + 1)), (x, (y -   1))] 
+3

'if (x и y == 0):' должно быть 'if (x == 0 и y == 0):' Также не совсем понятно, что вы просите. Что именно не работает? Помимо этой ошибки, и thats ее немного дольше, чем необходимо, кажется, все в порядке. –

+0

Я думаю, что два способа, упомянутые выше, одинаковы. Я действительно спрашиваю, например, если соседний список [(6,6), (7,6), (6,5)] и случайным образом следующая посещенная точка - это (6,6), чтобы сохранить первые 6 в переменной x, а второй - в y. x = 6 и y = 6 – nikiforosb

+1

Нет, они не совпадают. Фактически 'if (x и y == 0):' равнозначно 'if (x! = 0 и y == 0):' Вы хотите, чтобы вы распаковывали запись, например 'x, y = соседний_лист [0] '? Кроме того, я думаю, что '(6,6), (7,6), (6,5)' не может быть ни одним из списка соседей. –

ответ

2

Вот более простой вариант кода:

nlist = [] 
if x < n: 
    nlist.append((x+1,y)) 
if y < n: 
    nlist.append((x,y+1)) 
if x > 0: 
    nlist.append((x-1,y)) 
if y > 0: 
    nlist.append((x,y-1)) 

Это должно быть намного легче управлять.

Чтобы распаковать кортеж (Синя инь) в х, у вашего кода, вы можете просто сделать это:

x, y = (xin, yin) 

или если кортеж связан с переменной, скажем, координаты:

x, y = coordinates 

Это известно как распаковка кортежей.

Смежные вопросы