Интуитивно понятный Python Смежный список Itterator - PullRequest
0 голосов
/ 16 апреля 2020

Я пытаюсь написать код для извлечения данных из матрицы, затем на основе данных извлекать соседние данные в соответствии с данными, которые я извлек. Однако, когда я закончил основную часть кода, я столкнулся с проблемой жесткого кодирования. Я бы предпочел не кодировать это жестко, так как это привело бы к примерно 1200 строкам кода, в результате я надеялся, что есть более интуитивный способ завершить этот код, при этом занимая минимальное количество строк и будучи эффективным.

def Retrieve_Adjacents(current, tile_num):
        #Orientations for the Retrieval Code is based on the TileValue System with the top
        #Row being 0 1 2
        #Local lsit for returning Adjacent(s)
        Adjacents = list()
        FaceVal_Adjacents = list()
        Tile_Num_Adjacents = list()
        RL = list() #Retrieval 2D Array
        for yrunner in range(5):
            RLS = list()
            for xrunner in range(5):
                RLS.append(0)
            RL.insert(yrunner, RLS)
        WF, OF, BF, RF, GF, YF = Rubiks.Get_Cube_Data(1)
        #White Face
        if current == 0:
            xiter = 0
            altaudit = 0
            for auditor in range(9):
                ypos = (math.floor(auditor / 3)) + 1
                if auditor == 3 or auditor == 6:
                    xiter = 0
                xiter += 1
                RL[ypos][xiter] = WF[auditor]
                if auditor < 3:
                    if auditor == 0:
                        altaudit_right = 2
                        altaudit_left = 0

                    elif auditor == 1:
                        altaudir_right = 5
                        altaudit_left = 3

                    elif auditor == 2:
                        altaudit_right = 8
                        altaudit_left = 6

                    #Right / Left Faces
                    RL[(auditor + 1)][4] = OF[altaudit_left]
                    RL[(auditor + 1)][0] = RF[altaudit_right]
                    #Top Bottom Faces
                    RL[0][(auditor + 1)] = GF[(auditor + 6)]
                    RL[4][(auditor + 1)] = BF[(auditor)]
        #Retreiver
        #Vars to work
        #Adjacents
        #FaceVal_Adjacents
        #Tile_Num_Adjacents
        eventester = tile_num % 2
        if eventester == 0:

        if tile_num == 0 and current == 0:
            #First Coord
            Adjacents.append(RL[0][1])
            FaceVal_Adjacents.append(4)
            Tile_Num_Adjacents.append(6)
            #Second Coord
            Adjacents.append(RL[1][0])
            FaceVal_Adjacents.append(3)
            Tile_Num_Adjacents.append(2)
        if tile_num == 1 and current == 0:
            #First Coord
            Adjacents.append(RL[0][1])
            FaceVal_Adjacents.append(4)
            Tile_Num_Adjacents.append(6)
            #Second Coord
            Adjacents.append(RL[1][0])
            FaceVal_Adjacents.append(3)
            Tile_Num_Adjacents.append(2)

Жесткий код, приведенный выше, - это то, что я хотел бы сделать интуитивно понятным. Смежные элементы теперь выбираются более эффективным образом, поэтому мне не нужно беспокоиться об этом, однако я бы предпочел, чтобы существовал более простой способ получения Номинальная стоимость и номер плитки для смежных. Они извлекаются из матрицы следующим образом: 0 1 1 1 0, 3 2 2 2 1, 3 2 2 2 1, 3 2 2 2 1, 0 5 5 5 0,

Где, если наша выбранная плитка 0 на грани 2, смежные будут в позициях [0] [1] или 1 и [1] [0] или 3, это необходимо сделать для всей грани 2. Если у вас есть какие-либо вопросы относительно кода пожалуйста, опубликуйте их ниже, в противном случае спасибо

...