0

好的,所以我对python和一般编码很陌生,所以我想我需要一些帮助。坦率地说,这是我目前正在努力解决的一项任务,因为我是编码和所有爵士乐的新手。

所以问题是我必须使这个功能如下:

get_position_in_direction(position, direction) 采用表示方格位置的行、列对和方向字符(n、s、e、w 之一)并返回给定方向上相邻方格的位置。例如 :

>>> get_position_in_direction((2,3), 'e')
(2, 4)

>>> get_position_in_direction((2,3), 's')
(3, 3)

如果您对此感到困惑,请将其想象为正方形 (3,3) 上的坐标,我想移动方向 n、s、e 或 w(我猜是北、东、南或西),因此输入坐标将从(3,3)变为(2,3)或其他方向的方向。

我想这样做的方法是使用如下字典: DIRECTIONS = {'n': (-1, 0), 's': (1, 0), 'e': (0, 1) , 'w': (0, -1)} 我认为这将是返回我想要的值的最简单方法。

所以是的,就像我说的那样,我是编码新手,正在寻求帮助。我确实对python有很多了解,所以请不要觉得你只是在为我做我的任务,我会接受你的回答,只是什么都学不到,但我非常感谢这里的一些帮助。谢谢。

4

2 回答 2

1

您的 DIRECTIONS 字典是一个不错的选择。您的函数可能如下所示:

def get_position_in_direction(position, direction):
    DIRECTIONS = {'n': (-1, 0), 's': (1, 0), 'e': (0, 1), 'w': (0, -1)} 
    offset = DIRECTIONS[direction]
    return (position[0] + offset[0], position[1] + offset[1])
于 2013-08-24T08:30:06.880 回答
1

E 先生的解决方案非常简单,我喜欢它。但是,我要指出的是,使用 if 语句的更传统的解决方案仍然非常干净且易于遵循:

def get_position_in_direction(position, direction):
    output = position
    if direction == 'n':
        output = (output[0] - 1, output[1])
    elif direction == 's':
        output = (output[0] + 1, output[1])
    elif direction == 'e':
        output = (output[0], output[1] + 1)
    elif direction == 'w':
        output = (output[0], output[1] - 1)

    return output

我认为这种方法虽然可能不如 E 先生的方法那么有效,但可能(取决于您对它的感觉)在可理解性方面具有优势,如果其他人必须维护您的代码,这可能是一件大事。

无论哪种方式,这都是一个接近的电话,只是跳过字典的替代方案。

编辑:为了清楚起见,我建议这种方法可能更容易遵循的唯一原因是,增加或减少位置坐标的单个元素是水平或垂直移动的良好认知模拟,而不是有一个表格值并且总是做两个加法。这些实现之间可能存在显着的速度差异(如果重要的话)。

于 2013-08-24T09:07:44.603 回答