0

私の関数は、任意の三角形の面積を取得するように作られています。

これが私が知っている方法です

def areaOfTriangle(vertices):
    x1 = vertices[0][0]
    y1 = vertices[0][1]
    x2 = vertices[1][0]
    y2 = vertices[1][1]
    x3 = vertices[2][0]
    y3 = vertices[2][1]
    area = (1.0/2.0)*(x2*y3 - x3*y2 - x1*y3 + x3*y1 + x1*y2 - x2*y1)
    return area

しかし、私はこれががらくただと思うので、これが私がスケッチアウトした考えとして持っていたものです、

def areaOfTriangle(vertices):
    coord1 = vertices[0]
    coord2 = vertices[1]
    coord3 = vertices[2]
    for x1,y1 in coord1:
        for x2, y2 in coord2:
            for x3, y3 in coord3:
                area = (1.0/2.0)*(x2*y3 - x3*y2 - x1*y3 + x3*y1 + x1*y2 - x2*y1)
    return area

ただし、これは明らかにリストではうまく機能しません。これは、辞書からキーと値を取得できる方法で機能すると思いました...しかし、リストには iteritems() メソッドがありません。次に、リストを辞書に変換することを考えましたが、キーは辞書で一意であるため、一度しかポップアップしません....これにより、機能が正しく機能しなくなります。

4

1 に答える 1

3

タプルアンパックを使用します:

(x1, y1), (x2, y2), (x3, y3) = vertices

Python は、左側に同じネスト構造を作成する限り、ネストされたシーケンスを個別の変数にアンパックできます。

ループ反復ごとに 2 つの値のタプルをアンパックしようとしているため、ループは機能しません。反復では 1 つの値しか得られません。

これは、Python のバージョン間で機能します。

デモンストレーション:

>>> vertices = [(1,2), (3, 4), (5, 6)]
>>> (x1, y1), (x2, y2), (x3, y3) = vertices
>>> print x1, y1, x2, y2, x3, y3
1 2 3 4 5 6
于 2013-03-30T14:02:18.303 に答える