1

我正在尝试定义一种方法来检查列表的每个元素是否都是参数的一个因素。

这是我所拥有的:

def factorall(x):
if all(x % num  for num in nums) == 0:
    return True
else:
    return False

(在这种情况下,nums 是从 1 到 10 的整数列表)

但是,这对任何数字都返回 true。我假设发生这种情况是因为它只检查 1 然后返回 True,但不应该 all() 在返回 True 之前检查列表的每个元素吗?

我对 all() 有点不熟悉,所以我可能错误地实现了它。有人可以指出我正确的方向吗?

谢谢!

4

3 回答 3

7

你应该使用not any而不是全部

def factorall(x):
    return not any(x%num for num in nums) #if any of these is a value other than 0

或者如果你想要它,就像你现在拥有它一样

def factorall(x):
    return all(x%num==0 for num in nums)
于 2013-08-08T19:41:11.367 回答
2

您应该在all函数内部进行比较,或者简单地将其删除,并使用结果的否定x % num

def factorall(x):
    return all(not x % num for num in nums)

return 语句的工作方式与以下相同:

return all(x % num == 0 for num in nums)

我同意第二个似乎更清楚。

于 2013-08-08T19:39:09.993 回答
2
def factorall(x):
    if all(x % num == 0  for num in nums):
        return True
    else:
        return False
于 2013-08-08T19:38:58.013 回答