-1

I'm writing a program to read in a maze made up of symbols from a file, that stores each symbol in an Object, and then takes that object and stores it in a 2D array, at the point where the symbol was pulled from in the file, which is then stored in another Object of a different type. However when it gets to the part where it's supposed to read the file and compare, it ignores the code. I know this because I have commented out the function that stores the Object in the array, and the code runs and produces the same output. The 2 classes are called Position and Maze respectively.

def set_maze_map(self, position, rows, columns):
    self.maze_map[rows][columns] = position



def read_maze(filename):
    rows_current = 0
    columns_current = 0
    lines_list = []
    chars_list = []
    with open(filename, 'r') as f1:
        for line in f1:
            lines_list.append(line)
            for char in line:
                chars_list.append(char)
        rows_total = len(lines_list)
        if (len(lines_list) == 0):
            columns_total = 0
        elif (len(lines_list) == 1):
            columns_total = (len(chars_list)/len(lines_list))
        else:
            columns_total = (len(chars_list)/len(lines_list)) - 1

        index_last_line = rows_total - 1
        index_last_char = columns_total - 1

        maze_obj = Maze(int(rows_total), int(columns_total))

        for line in f1:
            for char in line:
                match (char):
                    case " ":
                        maze_obj.set_maze_map(Position(False, False, False, False, False), rows_current, columns_current)
                        columns_current = columns_current + 1
                        break
                    case "╴":
                        if (columns_current == 0):
                            p = Position(False, True, False, False, True)
                            maze_obj.maze_map[rows_current][columns_current] = p
                        else:
                            p = Position(False, True, False, False, False)
                            maze_obj.maze_map[rows_current][columns_current] = p
                        columns_current = columns_current + 1
                        break
                    case "╷":
                        if (rows_current == int(index_last_line)):
                            maze_obj.set_maze_map(Position(False, False, True, False, True), rows_current, columns_current)
                        else:
                            maze_obj.set_maze_map(Position(False, False, True, False, False), rows_current, columns_current)
                        columns_current = columns_current + 1
                        break
                    case "┐":
                        if (columns_current == 0) or (rows_current == int(index_last_line)):
                            maze_obj.set_maze_map(Position(False, False, True, True, True), rows_current, columns_current)
                        else:
                            maze_obj.set_maze_map(Position(False, False, True, True, False), rows_current, columns_current)
                        columns_current = columns_current + 1
                        break
                    case "╶":
                        if (columns_current == int(index_last_char)):
                            maze_obj.set_maze_map(Position(False, True, False, False, True), rows_current, columns_current)
                        else:
                            maze_obj.set_maze_map(Position(False, True, False, False, False), rows_current, columns_current)
                        columns_current = columns_current + 1
                        break
                    case "─":
                        if (columns_current == int(index_last_char)) or (columns_current == 0):
                            maze_obj.set_maze_map(Position(False, True, False, True, True), rows_current, columns_current)
                        else:
                            maze_obj.set_maze_map(Position(False, True, False, True, False), rows_current, columns_current)
                        columns_current = columns_current + 1
                        break
                    case "┌":
                        if (columns_current == int(index_last_char)) or (rows_current == int(index_last_line)):
                            maze_obj.set_maze_map(Position(False, True, True, False, True), rows_current, columns_current)
                        else:
                            maze_obj.set_maze_map(Position(False, True, True, False, False), rows_current, columns_current)
                        columns_current = columns_current + 1
                        break
                    case "┬":
                        if (columns_current == 0) or (columns_current == int(index_last_char)) or (rows_current == int(index_last_line)):
                            maze_obj.set_maze_map(Position(False, True, True, True, True), rows_current, columns_current)
                        else:
                            maze_obj.set_maze_map(Position(False, True, True, True, False), rows_current, columns_current)
                        columns_current = columns_current + 1
                        break
                    case "╵":
                        if (rows_current == 0):
                            maze_obj.set_maze_map(Position(True, False, False, False, True), rows_current, columns_current)
                        else:
                            maze_obj.set_maze_map(Position(True, False, False, False, False), rows_current, columns_current)
                        columns_current = columns_current + 1
                        break
                    case "┘":
                        if (rows_current == 0) or (columns_current == 0):
                            maze_obj.set_maze_map(Position(True, False, False, True, True), rows_current, columns_current)
                        else:
                            maze_obj.set_maze_map(Position(True, False, False, True, False), rows_current, columns_current)
                        columns_current = columns_current + 1
                        break
                    case "│":
                        if (rows_current == 0) or (rows_current == int(index_last_line)):
                            maze_obj.set_maze_map(Position(True, False, True, False, True), rows_current, columns_current)
                        else:
                            maze_obj.set_maze_map(Position(True, False, True, False, False), rows_current, columns_current)
                        columns_current = columns_current + 1
                        break
                    case "┤":
                        if (columns_current == 0) or (rows_current == 0) or (rows_current == int(index_last_line)):
                            maze_obj.set_maze_map(Position(True, False, True, True, True), rows_current, columns_current)
                        else:
                            maze_obj.set_maze_map(Position(True, False, True, True, False), rows_current, columns_current)
                        columns_current = columns_current + 1
                        break
                    case "└":
                        if (rows_current == 0) or (columns_current == int(index_last_char)):
                            maze_obj.set_maze_map(Position(True, True, False, False, True), rows_current, columns_current)
                        else:
                            maze_obj.set_maze_map(Position(True, True, False, False, False), rows_current, columns_current)
                        columns_current = columns_current + 1
                        break
                    case "┴":
                        if (rows_current == 0) or (columns_current == 0) or (columns_current == int(index_last_char)):
                            maze_obj.set_maze_map(Position(True, True, False, True, True), rows_current, columns_current)
                        else:
                            maze_obj.set_maze_map(Position(True, True, False, True, False), rows_current, columns_current)
                        columns_current = columns_current + 1
                        break
                    case "├":
                        if (rows_current == 0) or (columns_current == int(index_last_char)) or (rows_current == int(index_last_line)):
                            maze_obj.set_maze_map(Position(True, True, True, False, True), rows_current, columns_current)
                        else:
                            maze_obj.set_maze_map(Position(True, True, True, False, False), rows_current, columns_current)
                        columns_current = columns_current + 1
                        break
                    case "┼":
                        if (rows_current == 0) or (rows_current == int(index_last_line)) or (columns_current == 0) or (columns_current == int(index_last_char)):
                            maze_obj.set_maze_map(Position(True, True, True, True, True), rows_current, columns_current)
                        else:
                            maze_obj.set_maze_map(Position(True, True, True, True, False), rows_current, columns_current)
                        columns_current = columns_current + 1
                        break
            rows_current = rows_current + 1
            columns_current = 0
    return maze_obj
  • 2
    Please extract a [mcve] before jumping to the conclusion that it's "ignoring 115 lines of code"! As a new user here, also read [ask] and take the [tour]. – Ulrich Eckhardt May 29 '22 at 11:33
  • You've exhausted file `f1` in the first for loop. You either need to open the file again or save it in memory first. – quamrana May 29 '22 at 11:37
  • @quamrana It is being saved into a list – OneCricketeer May 29 '22 at 11:39
  • 1
    @OneCricketeer: Yes, so the second `for line in f1:` could be changed to `for line in lines_list:` – quamrana May 29 '22 at 11:43
  • From the files view there is no difference between `file.read()` twice or `for line in file: ....` twice - file iterator exhausted, won't read any more after it. – Patrick Artner May 29 '22 at 11:51

1 Answers1

2

It's not ignoring anything. Your file iterator has been exhausted.

Instead of trying to loop over for line in f1 more than once, try using for line in lines_list after the first time through the file

You could even unindent every line after chars_list.append(char) since you don't really need the file anymore

OneCricketeer
  • 179,855
  • 19
  • 132
  • 245