Найти - Пользователи
Полная версия: Прошу помочь с непростым для меня заданием.
Начало » Центр помощи » Прошу помочь с непростым для меня заданием.
1 2
outstrip
Задание прикреплено в файле Task.zip.
terabayt
ахах, меня уже просили
и вот что я вам скажу
это Экзамен и его нужно сделать самому
как вы можете получить сертификат по прохождению курса не выполнив экзамен сам?! и зачем он вам тогда?
еще денек попробуйте сами, поищите в интернете, алгоритмов по прохождению лабиринтов полно!
если ничего не получится, так и быть, скину вам готовое решение
outstrip

Вы совершенно правы! Я мучаюсь уже с этим заданием 2 недели и никого не просил. Но так как в моем окружении питонистов нет, то не видать мне сертификата как своих ушей. Был бы очень благодарен за подсказку. Ниже мой код.

import time
def print_maze(maze,x,y):
    for i in range(len(maze)):
        s = ''
        for j in range(len(maze)):
            if i == x and j == y:
                s += 'X'
            elif maze[i][j] == 1:
                s += '1'
            else:
                s += '.'
        print s
    print ' '
class MazeRunner(object):
    def __init__(self, maze, start, finish):
        self.__maze = maze
        self.__rotation = (1,0)
        self.__x = start[0]
        self.__y = start[1]
        self.__finish = finish
    def go(self):
        x = self.__x + self.__rotation[0]
        y = self.__y + self.__rotation[1]
        if x > len(self.__maze)-1 \
            or y > len(self.__maze)-1 \
            or x < 0 or y < 0 \
            or self.__maze[x][y] == 1:
            return False
        self.__x = x
        self.__y = y
        print_maze(self.__maze, self.__x, self.__y)
        time.sleep(0.5)
        print(chr(27) + "[2J")
        return True
    def turn_left(self):
        left_rotation = {
            (0,1): (1,0),
            (1,0): (0,-1),
            (0,-1): (-1,0),
            (-1,0): (0,1),
        }
        self.__rotation = left_rotation[self.__rotation]
        return self
    def turn_right(self):
        right_rotation = {
            (1,0): (0,1),
            (0,-1): (1,0),
            (-1,0): (0,-1),
            (0,1): (-1,0),
        }
        self.__rotation = right_rotation[self.__rotation]
        return self
    def found(self):
        return self.__x == self.__finish[0] and self.__y == self.__finish[1]
     
    def maze_controller(mr):
        while not(mr.found()):
            if mr.go():
                mr.found()
            else:
                mr.turn_left()
                if mr.go():
                    mr.found()
                else:
                    mr.turn_right()
                    
maze_example1 = {
    'm': [
        [0,1,0,0,0],
        [0,1,1,1,1],
        [0,0,0,0,0],
        [1,1,1,1,0],
        [0,0,0,1,0],
    ],
    's': (0,0),
    'f': (4,4)
}
maze_runner = MazeRunner(maze_example1['m'], maze_example1['s'], maze_example1['f'])
maze_controller(maze_runner) 
print maze_runner.found()  
outstrip
Моя ошибка состоит в том, что я каким то образом организовал “прямой доступ к изображению лабиринта” и на 87 строке возникает трейсбэк maze controller is not defined.
terabayt
outstrip
Моя ошибка состоит в том, что я каким то образом организовал “прямой доступ к изображению лабиринта”
функция maze_controller должна быть вне класса!
import time
def print_maze(maze,x,y):
    for i in range(len(maze)):
        s = ''
        for j in range(len(maze)):
            if i == x and j == y:
                s += 'X'
            elif maze[i][j] == 1:
                s += '1'
            else:
                s += '.'
        print s
    print ' '
class MazeRunner(object):
    def __init__(self, maze, start, finish):
        self.__maze = maze
        self.__rotation = (1,0)
        self.__x = start[0]
        self.__y = start[1]
        self.__finish = finish
    def go(self):
        x = self.__x + self.__rotation[0]
        y = self.__y + self.__rotation[1]
        if x > len(self.__maze)-1 \
            or y > len(self.__maze)-1 \
            or x < 0 or y < 0 \
            or self.__maze[x][y] == 1:
            return False
        self.__x = x
        self.__y = y
        print_maze(self.__maze, self.__x, self.__y)
        time.sleep(0.5)
        print(chr(27) + "[2J")
        return True
    def turn_left(self):
        left_rotation = {
            (0,1): (1,0),
            (1,0): (0,-1),
            (0,-1): (-1,0),
            (-1,0): (0,1),
        }
        self.__rotation = left_rotation[self.__rotation]
        return self
    def turn_right(self):
        right_rotation = {
            (1,0): (0,1),
            (0,-1): (1,0),
            (-1,0): (0,-1),
            (0,1): (-1,0),
        }
        self.__rotation = right_rotation[self.__rotation]
        return self
    def found(self):
        return self.__x == self.__finish[0] and self.__y == self.__finish[1]
     
def maze_controller(mr):
    while not(mr.found()):
        if mr.go():
            mr.found()
        else:
            mr.turn_left()
            if mr.go():
                mr.found()
            else:
                mr.turn_right()
                    
maze_example1 = {
    'm': [
        [0,1,0,0,0],
        [0,1,1,1,1],
        [0,0,0,0,0],
        [1,1,1,1,0],
        [0,0,0,1,0],
    ],
    's': (0,0),
    'f': (4,4)
}
maze_runner = MazeRunner(maze_example1['m'], maze_example1['s'], maze_example1['f'])
maze_controller(maze_runner) 
print maze_runner.found()  
outstrip
Как то так? Это глупо звучит, но я потерял само понимание алгоритма действия, если можно ткните носом в мои ошибки. Я буду очень благодарен за урок.

import time
def print_maze(maze,x,y):
    for i in range(len(maze)):
        s = ''
        for j in range(len(maze)):
            if i == x and j == y:
                s += 'X'
            elif maze[i][j] == 1:
                s += '1'
            else:
                s += '.'
        print s
    print ' '
class MazeRunner(object):
    def __init__(self, maze, start, finish):
        self.__maze = maze
        self.__rotation = (1,0)
        self.__x = start[0]
        self.__y = start[1]
        self.__finish = finish
    def go(self):
        x = self.__x + self.__rotation[0]
        y = self.__y + self.__rotation[1]
        if x > len(self.__maze)-1 \
            or y > len(self.__maze)-1 \
            or x < 0 or y < 0 \
            or self.__maze[x][y] == 1:
            return False
        self.__x = x
        self.__y = y
        print_maze(self.__maze, self.__x, self.__y)
        time.sleep(0.5)
        print(chr(27) + "[2J")
        return True
    def turn_left(self):
        left_rotation = {
            (0,1): (1,0),
            (1,0): (0,-1),
            (0,-1): (-1,0),
            (-1,0): (0,1),
        }
        self.__rotation = left_rotation[self.__rotation]
        return self
    def turn_right(self):
        right_rotation = {
            (1,0): (0,1),
            (0,-1): (1,0),
            (-1,0): (0,-1),
            (0,1): (-1,0),
        }
        self.__rotation = right_rotation[self.__rotation]
        return self
    def found(self):
        return self.__x == self.__finish[0] and self.__y == self.__finish[1]
     
                    
maze_example1 = {
    'm': [
        [0,1,0,0,0],
        [0,1,1,1,1],
        [0,0,0,0,0],
        [1,1,1,1,0],
        [0,0,0,1,0],
    ],
    's': (0,0),
    'f': (4,4)
}
def maze_controller(mr):
    while not(mr.found()):
        if mr.go():
            mr.found()
        else:
            mr.turn_left()
            if mr.go():
                mr.found()
            else:
                mr.turn_right()
maze_runner = MazeRunner(maze_example1['m'], maze_example1['s'], maze_example1['f'])
maze_controller(maze_runner) 
print maze_runner.found()  
terabayt
outstrip
если можно ткните носом в мои ошибки
вы то влево то вправо идете
нужно использовать или правило “правой руки”, но при этом будут работать только первые 3 примера
или воспользоваться другими алгоритмами, например заполнение “водой” а потом учитывать уровень воды
outstrip
я почитаю про алгоритмы, но вряд ли мне это поможет исправить код. Можно более детализированный ответ?
terabayt
outstrip
но вряд ли мне это поможет исправить код.
если хорошо поработать то поможет
outstrip
Можно более детализированный ответ?
я не буду писать то что в интернете полно
outstrip
Допилил код. Вроде все работает, а все равно выдает ошибку- Прямой доступ к лабиринту запрещен.

import time
def print_maze(maze,x,y):
    for i in range(len(maze)):
        s = ''
        for j in range(len(maze)):
            if i == x and j == y:
                s += 'X'
            elif maze[i][j] == 1:
                s += '1'
            else:
                s += '.'
        print s
    print ' '
class MazeRunner(object):
    def __init__(self, maze, start, finish):
        self.__maze = maze
        self.__rotation = (1,0)
        self.__x = start[0]
        self.__y = start[1]
        self.__finish = finish
    def go(self):
        x = self.__x + self.__rotation[0]
        y = self.__y + self.__rotation[1]
        if x > len(self.__maze)-1 \
            or y > len(self.__maze)-1 \
            or x < 0 or y < 0 \
            or self.__maze[x][y] == 1:
            return False
        self.__x = x
        self.__y = y
        print_maze(self.__maze, self.__x, self.__y)
        time.sleep(0.2)
        print(chr(27) + "[2J")
        return True
    def turn_left(self):
        left_rotation = {
            (0,1): (1,0),
            (1,0): (0,-1),
            (0,-1): (-1,0),
            (-1,0): (0,1),
        }
        self.__rotation = left_rotation[self.__rotation]
        return self
    def turn_right(self):
        right_rotation = {
            (1,0): (0,1),
            (0,-1): (1,0),
            (-1,0): (0,-1),
            (0,1): (-1,0),
        }
        self.__rotation = right_rotation[self.__rotation]
        return self
    def found(self):
        return self.__x == self.__finish[0] and self.__y == self.__finish[1]
     
                    
maze_example1 = {
    'm': [
[0,0,0,1,1,0,1,1,0,0,0],
[0,1,0,0,0,0,0,0,0,1,0],
[0,1,0,1,1,1,1,1,0,1,0],
[0,0,0,1,0,0,0,1,0,0,0],
[0,0,1,1,0,0,0,1,1,0,0],
[0,0,1,0,0,0,0,0,1,0,0],
[0,0,1,0,1,0,1,0,1,0,0],
[0,0,1,0,0,0,0,0,1,0,0],
[0,0,1,1,1,0,1,1,1,0,0],
[0,0,0,0,0,0,0,0,0,0,0],
[0,0,1,0,1,0,1,0,1,0,0],
    ],
    's': (0,5),
    'f': (4,5)
}
def maze_controller(mr):
    while not(mr.found()):
        if mr.go():
            if mr.found()==False:
                    mr.turn_right()
                    if mr.go():
                        if mr.found()==False:
                            mr.go()
                            mr.go()
                    else:
                        mr.turn_left()
                        mr.turn_left()
                        if mr.go():
                            mr.found()
                        else:
                            mr.turn_right()
        else:
            mr.turn_left()
            if mr.go():
                mr.found()
            else:
                mr.turn_right()
                mr.turn_right()
maze_runner = MazeRunner(maze_example1['m'], maze_example1['s'], maze_example1['f'])
maze_controller(maze_runner) 
print maze_runner.found()  
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB