0

我正在尝试在 codefights 中完成一项挑战,但我似乎陷入了困境:

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))

即解析器认为您正在创建一个生成器,将lambdas 作为takewhile. 你正在takewhile使用两个参数进行函数调用,这需要在生成器周围加上括号,所以如果你真的想这样做,你必须编写:

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

您需要将生成器表达式放在lambda括号中的函数中,而且我认为您需要检查结果x % d与零的相等性:

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