我正在尝试在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)
。我知道我远没有解决这个问题我只是想知道这里有什么问题。
答案 0 :(得分:3)
您需要添加括号:
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
的第一个参数。并且您正在使用两个参数对takewhile
进行函数调用,这需要在生成器周围使用括号,因此如果您真的想要这样做,则必须编写:
takewhile(((lambda x: x % d) for d in [3,5,7] == 0), range(0,n))
答案 1 :(得分:2)
你需要将你的生成器表达式放在括号中的lambda
函数中,我认为你需要检查x % d
的结果与零的相等性:
lambda x: (x % d==0 for d in [3,5,7])