0

これが私のコードです:

for i in tuples:
    if i[0] == "U_shape":
        pieces.append(U_shape(i[1], boardLength, i[2])
    if i[0] == "I_shape":
        pieces.append(I_shape(i[1], i[2])
    if i[0] == "L_shape":
        pieces.append(L_shape(i[1], boardLength, i[2])
    if i[0] == "T_shape":
        pieces.append(T_shape(i[1], boardLength, i[2])
    if i[0] == "X_shape":
        pieces.append(X_shape(i[1], boardLength, i[2])

エラーは次のとおりです。

if i[0] == "I_shape":
                    ^
SyntaxError: invalid syntax
4

4 に答える 4

9

を呼び出すすべての行に閉じ括弧がありませんpieces.append

于 2012-04-20T19:07:52.847 に答える
5
pieceType = {
    "U_shape": U_shape,
    "I_shape": I_shape,
    "L_shape": L_shape,
    "T_shape": T_shape,
    "X_shape": X_shape
}

pieces = [pieceType[a](b, boardLength, c) for a,b,c in tuples]
于 2012-04-20T19:13:55.573 に答える
1

他の人が言ったように、閉じ括弧がありませんが、それは言われていますが、コード構造でさらに多くのことを行う必要があります:

これは、あなたがやりたいことをするための本当に悪い方法です。より良い解決策は、次を使用することdictです。

mapping = {"U_shape": U_shape, "I_shape": I_shape, ...}
pieces.append(mapping[i[0]](i[1], boardLength, i[2]))

さて、これはすべてのクラスが同じ引数を取ることに依存しています - そして、それらはそうではないように見えますが、これは (コードに既にエラーがあるとすれば) 間違いである可能性があります。そうでない場合は、そのケースを分離して、他のケースにマッピングを使用できます。

于 2012-04-20T19:09:46.047 に答える
1

別の簡単な改善点は次のとおりです。

for i in tuples:
    if i[0] == "U_shape":
        pieces.append(U_shape(i[1], boardLength, i[2]))
    elif i[0] == "I_shape":
        pieces.append(I_shape(i[1], i[2]))
    elif i[0] == "L_shape":
        pieces.append(L_shape(i[1], boardLength, i[2]))
    elif i[0] == "T_shape":
        pieces.append(T_shape(i[1], boardLength, i[2]))
    elif i[0] == "X_shape":
        pieces.append(X_shape(i[1], boardLength, i[2]))

ヒュー・ボスウェルのが一番速いと思いますが...

>>> import this
The Zen of Python, by Tim Peters
...
In the face of ambiguity, refuse the temptation to guess.
...
>>>

timeit モジュールを使用して測定します。

于 2012-04-20T20:54:56.760 に答える