Список добавить MemoryError - PullRequest
0 голосов
/ 30 марта 2020

Итак, у меня есть этот фрагмент кода, который я пытаюсь создать для разметки уровней для сетки комнат. Первый раз через mainl oop он работает отлично, работает и делает именно то, что должен, но второй раз через него делает паузу сразу после первой ошибки печати и выдает мне прикрепленную ошибку, и я не могу понять, что с ней не так. (запрос y / n предназначен только для замедления программы, чтобы я мог видеть, что происходит)


userInput = ""

roomChance = 0.5

world = [[0,0,0], \
         [0,1,0], \
         [0,0,0]]

possibleWorld = []

newX = []


def check_neighbours(xy):
    possibleWorld.clear()
    yLoops = 0
    for y in xy:
        print("  y:", y)
        xLoops = 0
        for x in y:
            print("  x:", x)

            #Check left cell
            if(xLoops-1 >= 0):
                if(y[xLoops-1] == 1):
                    possibleWorld.append([xLoops, yLoops])
                print("x-1:", y[xLoops-1])

            #Check right cell
            if(xLoops+1 < len(y)):
                if(y[xLoops+1] == 1):
                    possibleWorld.append([xLoops, yLoops])
                print("x+1:", y[xLoops+1])

            #Check above cell
            if(yLoops-1 >= 0):
                if(xy[yLoops-1][xLoops] == 1):
                    possibleWorld.append([xLoops, yLoops])
                print("y-1:", xy[yLoops-1][xLoops])

            #Check above cell
            if(yLoops+1 < len(xy)):
                if(xy[yLoops+1][xLoops] == 1):
                    possibleWorld.append([xLoops, yLoops])
                print("y+1:", xy[yLoops+1][xLoops])            


            print("\n")

            xLoops += 1

        yLoops += 1

def assign_neighbours(possible, world, chance):
    for i in possible:
        if(random.random() < chance):
            world[i[1]][i[0]] = 1
    possible.clear()

def border_expand(world):

    for x in world[0]:
        if(x == 1):
            for i in world[0]:
                newX.append(0)
            world.insert(0, newX)
            newX.clear
            break


def print_world(world):
    for y in world:
        print(y)


# ==================== Mainloop ====================
while(True):

    userInput = input(print("Generate Level? Y/N?"))    

    check_neighbours(world)

    print(possibleWorld)

    assign_neighbours(possibleWorld, world, roomChance)

    print_world(world)

    border_expand(world)

    print("\n")

    print_world(world)

  File "C:\Users\Potato\Desktop\Level gen_query.py", line 96, in <module>
    border_expand(world)
  File "C:\Users\Potato\Desktop\Level gen_query.py", line 67, in border_expand
    newX.append(0)
MemoryError```

1 Ответ

0 голосов
/ 30 марта 2020

Вы не звоните newX.clear, поэтому он постоянно растет. Когда вы запускаете world.insert(0, newX), вы вставляете ссылку на newX в world[0], даже если вы вызываете newX.clear(), вы не получите желаемого поведения, так как первый элемент в world будет пустым.

Вам нужно создавать новый список при каждом вызове border_expand, чтобы каждый раз это был новый список

def border_expand(world):
    newX = []
    for x in world[0]:
        if(x == 1):
            for i in world[0]:
                newX.append(0)
            world.insert(0, newX)
            break
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...