I’m working on a basic program allows me to navigate in a two dimensions grid (for now 3X3), using a function specified with the initial point and all the steps moved on each axis, returning the end point. I want to raise an error if a specific point has been already visited, and I’m trying to do it by logging all previous points. This is my code:
matrix = [[1, 1], [1, 2], [1, 3], [2, 1], [2, 2], [2, 3], [3, 1], [3, 2], [3, 3]] def position(inital_point,*steps): end_point = inital_point point_logs = [] point_logs += end_point for step in steps: end_point[0] += step[0]; end_point[1] += step[1] point_logs += end_point print(point_logs)
My problem is, I want to reference each point with a nested list inside the main list, but the code above is giving me this result:
position([1,1],[1,1],[1,1]) >>>[1, 1, 2, 2, 3, 3]
When I try to convert it to a nested list, I get:
matrix = [[1, 1], [1, 2], [1, 3], [2, 1], [2, 2], [2, 3], [3, 1], [3, 2], [3, 3]] def position(inital_point,*steps): end_point = inital_point point_logs = [] point_logs += [end_point] for step in steps: end_point[0] += step[0]; end_point[1] += step[1] point_logs += [end_point] print(point_logs) position([1,1],[1,1],[1,1]) >>> [[3, 3], [3, 3], [3, 3]]
Instead of simply [[1, 1],[2, 2],[3, 3]]
, please help!
Advertisement
Answer
This approach basically takes the last appended points from point_logs
and adds the new coordinates to it after which it is also appended.
def position(inital_point,*steps): end_point = inital_point point_logs = [] point_logs.append(end_point) for step in steps: x, y = point_logs[-1] point_logs.append([x+step[0], y+step[1]]) print(point_logs)
Output
[[1, 1], [2, 2], [3, 3]]