0

私は codefights で 1 つのチャレンジの 1 つのライナーを実行しようとしていますが、行き詰まっているようです:

SyntaxError: Generator expression must be parenthesized if not sole argument

私が実行するとき

def magicNumber(n):
    return [i for i in itertools.takewhile
                       (lambda x: x % d for d in [3,5,7] == 0, range(0,n))]

課題は次 のとおりです。素因数が 3、5、および 7 だけである数を考えてください。それらの中で n 番目に大きいものを見つけるプログラムを作成してください。

出力例:

  • n = 1出力は次のようになります1 (3^0 * 5^0 * 7^0)
  • n = 2出力は次のようになります3 (3^1 * 5^0 * 7^0)
  • n = 6出力は次のようになります15(3^1 * 5^1 * 7^0)

ここで何が問題なのか知りたいだけです。

4

2 に答える 2

4

括弧を追加する必要があります。

takewhile(lambda x: (x % d for d in [3,5,7] == 0), range(0,n))

元のコードは次のように解析されたことに注意してください。

takewhile((lambda x: x % d) for d in [3,5,7] == 0, range(0,n))

lambdaつまり、パーサーは、 の最初の引数として s を生成するジェネレーターを作成していると考えましたtakewhile。そして、2 つの引数を指定して の関数呼び出しを行っていますがtakewhile、これにはジェネレーターを括弧で囲む必要があります。

takewhile(((lambda x: x % d) for d in [3,5,7] == 0), range(0,n))
于 2015-11-05T09:18:17.830 に答える
3

ジェネレーター式を括弧内の関数に入れる必要があります。また、 with zerolambdaの結果が等しいことを確認する必要があると思います。x % d

lambda x: (x % d==0 for d in [3,5,7])
于 2015-11-05T09:18:34.327 に答える