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

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 に答える