【发布时间】:2021-11-07 18:12:33
【问题描述】:
我是嵌套函数的新手,想在下面调用我的函数,我正在尝试使用嵌套函数和过滤器查找数字是否为素数。以下是我的代码:
def divides(n):
def div(k):
return n % k == 0
return div
def prime(n):
cnt=0
res = list(filter(divides(n)(range(1,n)),range(1,n)))
for i in res:
if i==True:
cnt+=1
if cnt == 2:
return ("It is a prime")
else:
return ("It is not a prime")
print(prime(5))
所以它会引发类型错误,因为我试图将数字从 1 到 n 作为范围发送到嵌套函数。如何使用两个值调用此函数?调用嵌套函数的正确方法是什么?
【问题讨论】:
-
你可能想做
[divides(n)(k) for k in range(1, n)]之类的事情而不是list(filter(divides(n)(range(1,n)),range(1,n)))? -
fwiw 而不是使用嵌套函数,我认为只有一个带有两个参数的函数会简单得多......
-
divides()没有嵌套。 -
list(filter(divides(n), range(1,n)))将是调用它的方式。但是,这会导致程序在使用 5 调用时打印“It is not a prime”,因此您也会遇到逻辑错误。我认为您真正需要的是list(filter(divides(n), range(1,n+1))),因为范围不包括 Python 中的正确端点。 -
糟糕,还是不行。您要么需要使用 map 而不是过滤器,要么更好地将 cnt 计算为
cnt=len(res)而不是遍历列表。
标签: python filter nested-function