2013-08-24 4 views
0

좋아, 파이썬과 코딩에 익숙하지 않으므로이 문제에 대한 도움이 필요하다고 생각합니다. 나는 이것이 내가 코딩에 익숙하지 않다는 사실과 그 모든 재즈 때문에 내가 크게 어려움을 겪고있는 순간에 내가 가진 임무라는 점에서 솔직해질 것이다. ,사전을 사용하여 인수의 값을 더하거나 빼는 방법

get_position_in_direction 사각형의 위치를 ​​나타내는 행, 열 쌍 및 방향 캐릭터 (N 중 하나를 취 (위치, 방향)

그래서 문제는 다음과 같이 기능을 할 것이다 s, e, w)를 반환하고 주어진 방향으로 인접한 정사각형의 위치를 ​​반환합니다. 예를 들어 :이와 혼란스러워 광장 (3,3) 좌표로 사진과 나는 방향 N을 이동하려면

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

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

s가 e 또는 w (I 북쪽 같아요 동쪽, 남쪽 또는 서쪽) 그래서 어떤 방향으로 좌표가 (3,3)에서 (2,3) 또는 어떤 것으로 변경 될지에 대한 입력으로

내가 원했던 방식은 다음과 같은 사전을 사용하는 것이 었습니다. DIRECTIONS = { 'n': (-1, 0), 's': (1, 0), 'e': (0, 1), 'w': (0, -1)} 이것이 내가 원하는 값을 반환하는 가장 간단한 방법이라고 생각했습니다.

그래서 나는 코딩에 익숙하지 않고 도움을 요청했다. 나는 파이썬으로 많은 것을 이해하고 있으므로 제게 저의 임무를 수행하고있는 것처럼 느껴지지 말고 대답을 듣고 아무것도 배우지 않을 것입니다.하지만 여기서 도움을 많이 주시면 감사하겠습니다. 감사.

+0

동쪽으로 이동하는 경우 첫 번째 값이 1 씩 증가하지 않습니까? 서쪽 맞은 편. 남쪽으로 이동하면 두 번째 값이 1 씩 감소하지 않습니까? 북쪽 맞은 편 – TerryA

+0

하하 그래, 내가 무슨 뜻인지 알지. 뇌의 방구 방귀 야. 이렇게 오래 컴퓨터에 출연하면 그렇게 할 수 있습니다. –

답변

1

당신의 방향 사전은 좋은 선택입니다. 함수는 다음과 같을 수 있습니다.

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]) 
+1

너는 생명의 은인이야. 나는 내가 가까운 하하를 얻고 있었다라는 것을 알고 있기 때문에 기쁘다. 나는 오프셋이나 그런 것을 사용하려고합니다. 감사합니다. –

+0

도와 줘서 기쁩니다. – YXD

1

Mr. E의 솔루션은 매우 간단하며 좋아요. (에 따라 수, 씨 E의 같은 동안 효율적 가능하지 나는이 방법을 생각

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 

을 : 그러나, 나는 경우 문에 더 많은 기존의 솔루션은 아직 따라 꽤 깨끗하고 쉽다는 것을 지적 할 것 당신이 그것에 대해 어떻게 느끼는지)는 이해력 측면에서 우위에 있습니다. 다른 사람들이 당신의 코드를 유지해야한다면 큰 문제가 될 수 있습니다.

어느 쪽이든 그것은 가까운 호출이며 사전을 건너 뛸 수있는 대안입니다.

편집 :이 접근법을 따르기 더 쉽다고 제안하는 유일한 이유는 위치 좌표의 단일 요소를 증가 시키거나 감소시키는 것이 가로 또는 세로로 이동하는 좋은인지 적 유사성이라는 것입니다. 값의 테이블을 가지고 항상 두 추가 작업을 수행합니다. 이러한 구현간에 상당한 속도 차이가있을 수 있습니다 (문제가있는 경우).

+0

도움 주셔서 감사합니다. 두 가지를 모두 살펴보고 내 상황에 가장 적합한 것을 확인하겠습니다. 의견을 보내 주셔서 감사합니다. –

+0

나는이 코드를 사람에게 시도해 보았고 동일한 오류 코드를 계속 제기했다. 트레이스 백 (지난 최근 통화) 파일 ""라인 1 get_position_in_direction에 ((3,3), 'N') 라인 18에서 get_position_in_direction [0] 출력 - = 1 형식 오류 : 'tuple'객체가 항목 할당을 지원하지 않습니다. –

+0

안녕하세요 Robert : 게시하기 전에 코드를 테스트하지 않았으므로 사과드립니다. 문제는 튜플이 "변경 가능"하지 않기 때문에 요소를 제 위치에서 변경할 수 없다는 것입니다. 새 튜플 객체를 만들고 이전 이름에 할당하려면 코드를 편집하면됩니다. –

관련 문제