Форум сайта python.su
Задание прикреплено в файле Task.zip.
Прикреплённый файлы: Task.zip (109,5 KБ)
Офлайн
ахах, меня уже просили
и вот что я вам скажу
это Экзамен и его нужно сделать самому
как вы можете получить сертификат по прохождению курса не выполнив экзамен сам?! и зачем он вам тогда?
еще денек попробуйте сами, поищите в интернете, алгоритмов по прохождению лабиринтов полно!
если ничего не получится, так и быть, скину вам готовое решение
Отредактировано terabayt (Март 26, 2015 00:41:08)
Офлайн
Вы совершенно правы! Я мучаюсь уже с этим заданием 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()
Офлайн
Моя ошибка состоит в том, что я каким то образом организовал “прямой доступ к изображению лабиринта” и на 87 строке возникает трейсбэк maze controller is not defined.
Отредактировано outstrip (Март 26, 2015 00:59:13)
Офлайн
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()
Офлайн
Как то так? Это глупо звучит, но я потерял само понимание алгоритма действия, если можно ткните носом в мои ошибки. Я буду очень благодарен за урок.
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()
Офлайн
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()
Офлайн