Уведомления

Группа в Telegram: @pythonsu

#1 Март 25, 2015 21:29:33

outstrip
Зарегистрирован: 2015-03-14
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Прошу помочь с непростым для меня заданием.

Задание прикреплено в файле Task.zip.

Прикреплённый файлы:
attachment Task.zip (109,5 KБ)

Офлайн

#2 Март 26, 2015 00:40:34

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Прошу помочь с непростым для меня заданием.

ахах, меня уже просили
и вот что я вам скажу
это Экзамен и его нужно сделать самому
как вы можете получить сертификат по прохождению курса не выполнив экзамен сам?! и зачем он вам тогда?
еще денек попробуйте сами, поищите в интернете, алгоритмов по прохождению лабиринтов полно!
если ничего не получится, так и быть, скину вам готовое решение



————————————————
-*- Simple is better than complex -*-

Отредактировано terabayt (Март 26, 2015 00:41:08)

Офлайн

#3 Март 26, 2015 00:51:28

outstrip
Зарегистрирован: 2015-03-14
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Прошу помочь с непростым для меня заданием.


Вы совершенно правы! Я мучаюсь уже с этим заданием 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()  

Офлайн

#4 Март 26, 2015 00:55:05

outstrip
Зарегистрирован: 2015-03-14
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Прошу помочь с непростым для меня заданием.

Моя ошибка состоит в том, что я каким то образом организовал “прямой доступ к изображению лабиринта” и на 87 строке возникает трейсбэк maze controller is not defined.

Отредактировано outstrip (Март 26, 2015 00:59:13)

Офлайн

#5 Март 26, 2015 00:59:45

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Прошу помочь с непростым для меня заданием.

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()  



————————————————
-*- Simple is better than complex -*-

Офлайн

#6 Март 26, 2015 01:15:13

outstrip
Зарегистрирован: 2015-03-14
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Прошу помочь с непростым для меня заданием.

Как то так? Это глупо звучит, но я потерял само понимание алгоритма действия, если можно ткните носом в мои ошибки. Я буду очень благодарен за урок.

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()  

Офлайн

#7 Март 26, 2015 01:36:08

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Прошу помочь с непростым для меня заданием.

outstrip
если можно ткните носом в мои ошибки
вы то влево то вправо идете
нужно использовать или правило “правой руки”, но при этом будут работать только первые 3 примера
или воспользоваться другими алгоритмами, например заполнение “водой” а потом учитывать уровень воды



————————————————
-*- Simple is better than complex -*-

Офлайн

#8 Март 26, 2015 01:56:52

outstrip
Зарегистрирован: 2015-03-14
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Прошу помочь с непростым для меня заданием.

я почитаю про алгоритмы, но вряд ли мне это поможет исправить код. Можно более детализированный ответ?

Офлайн

#9 Март 26, 2015 02:30:37

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Прошу помочь с непростым для меня заданием.

outstrip
но вряд ли мне это поможет исправить код.
если хорошо поработать то поможет
outstrip
Можно более детализированный ответ?
я не буду писать то что в интернете полно



————————————————
-*- Simple is better than complex -*-

Офлайн

#10 Март 26, 2015 21:00:49

outstrip
Зарегистрирован: 2015-03-14
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Прошу помочь с непростым для меня заданием.

Допилил код. Вроде все работает, а все равно выдает ошибку- Прямой доступ к лабиринту запрещен.

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()  

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version