Есть ли для меня, чтобы изменить этот код так, чтобы он производил выходные данные, которые могут быть сохранены в виде 2-го списка? - PullRequest
0 голосов
/ 24 января 2019

Я могу напечатать случайный лабиринт с этим фрагментом кода:

Я хочу сохранить его в 2d списке, чтобы я мог его редактировать.

Я попытался отредактировать сам, ноэтот код предназначен только для печати и ничего больше.

def random_maze(w = 16, h = 8):
    vis = [[0] * w + [1] for _ in range(h)] + [[1] * (w + 1)]
    ver = [["|  "] * w + ['|'] for v in range(h)] + [[]]
    hor = [["+--"] * w + ['+'] for v in range(h + 1)]

    def go(x, y):
        vis[y][x] = 1

        d = [(x - 1, y), (x, y + 1), (x + 1, y), (x, y - 1)]
        shuffle(d)
        for (xx, yy) in d:
            if vis[yy][xx]: continue
            if xx == x: hor[max(y, yy)][x] = "+  "
            if yy == y: ver[y][max(x, xx)] = "   "
            go(xx, yy)

    go(randrange(w), randrange(h))

    s = ""
    for (a, b) in zip(hor, ver):
        s += ''.join(a + ['\n'] + b + ['\n'])
    return s

Я хочу, чтобы вывод кода был похож на [['+ -', '+ --'.... и т. д., чтобыЯ могу отредактировать его.

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Все, что вам нужно сделать, это небольшое изменение в той части, где вы присоединяете a и b в s.Вам нужна дополнительная переменная matrix для хранения 2D-списка:

s = ""
matrix = []
for (a, b) in zip(hor, ver):
    s += ''.join(a + ['\n'] + b + ['\n'])
    matrix.append(a)
    matrix.append(b)
return s, matrix

и, наконец, вы можете получить результаты, подобные этим:

stringMatrix, matrix = random_maze()
0 голосов
/ 24 января 2019

Это моё решение.Используйте функцию np.append, чтобы добавить свой лабиринт в 2d-массив:

from random import randrange, shuffle
import numpy as np
w = 10
h = 10
vis = [[0] * w + [1] for _ in range(h)] + [[1] * (w + 1)]
ver = [["|  "] * w + ['|'] for v in range(h)] + [[]]
hor = [["+--"] * w + ['+'] for v in range(h + 1)]

def go(x, y):
    vis[y][x] = 1

    d = [(x - 1, y), (x, y + 1), (x + 1, y), (x, y - 1)]
    shuffle(d)
    for (xx, yy) in d:
        if vis[yy][xx]: continue
        if xx == x: hor[max(y, yy)][x] = "+  "
        if yy == y: ver[y][max(x, xx)] = "   "
        go(xx, yy)

go(randrange(w), randrange(h))

s = ""

twoD_matrix = np.append([hor[0]], [ver[0]], axis=0)

for i in range(1, len(hor)):
    twoD_matrix = np.append(twoD_matrix, [hor[i], ver[1]], axis = 0)


print(twoD_matrix)

Или, если вы предпочитаете список списков, вы можете сделать это следующим образом:

from random import randrange, shuffle
import numpy as np
w = 10
h = 10
vis = [[0] * w + [1] for _ in range(h)] + [[1] * (w + 1)]
ver = [["|  "] * w + ['|'] for v in range(h)] + [[]]
hor = [["+--"] * w + ['+'] for v in range(h + 1)]

def go(x, y):
    vis[y][x] = 1

    d = [(x - 1, y), (x, y + 1), (x + 1, y), (x, y - 1)]
    shuffle(d)
    for (xx, yy) in d:
        if vis[yy][xx]: continue
        if xx == x: hor[max(y, yy)][x] = "+  "
        if yy == y: ver[y][max(x, xx)] = "   "
        go(xx, yy)

go(randrange(w), randrange(h))

s = ""

twoD_list = []

for i in range(len(hor)):
    twoD_list.append(hor[i])
    twoD_list.append(ver[i])

print(twoD_list)
...