从python for循环函数返回值

时间:2019-03-23 19:58:18

标签: python

我已经编辑了我的问题。该代码包含一个is_prime公式,该公式指示数字是否为质数>我正在尝试提取3到65范围内的所有质数值。

a = []
b = []                                             
c = []                                             
d = []
def ll_prime(n_start, n_end):  
    for number in range(n_start, n_end):
        if is_prime(number) ==True:
            a.append(number)
            b.append(1)
        else:
            c.append(number)
            d.append(0)
    return (list(zip(a,b)))

上面的代码运行正常,但是当我调用函数ll_prime(3,65)时,出现以下错误:

TypeError                                 Traceback (most recent call last)
<ipython-input-498-1a1a58988fa7> in <module>()
----> 1 ll_prime(3,65)
      2 #type(tyl)
      3 #list_values = [ v for v in tyl.values()]

<ipython-input-497-d99272d4b655> in ll_prime(n_start, n_end)
     11             c.append(number)
     12             d.append(0)
---> 13     return (list(zip(a,b)))

TypeError: 'list' object is not callable

有人能指导我为什么我会收到此错误吗?我已经搜索了有关stackoverflow的上一个问题,但对我的情况没有帮助。

我想要结果为[[3,1),(5,1),(7,1)]等

3 个答案:

答案 0 :(得分:1)

您可以使用列表理解:

num1=float(input("enter the first number :"))
op = input("sellect the operation :")
num2 = float(input("enter the second number :"))
if op== "+" :
    print(num1+num2)
elif op == "-":
    print(num1 - num2)
elif op == "*":
    print(num1*num2)
elif op == "/":
    print(num1 / num2)
else:
    print("please enter a real operation ")   
 #this one is more simple

答案 1 :(得分:0)

您可以使用itertools中的repeat并将其与您的列表一起压缩。

>>> from itertools import repeat
>>> mb = [3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61]
>>> zip(mb, repeat(1))
[(3, 1), (5, 1), (7, 1), (11, 1), (13, 1), (17, 1), (19, 1), (23, 1), (29, 1), (31, 1), (37, 1), (41, 1), (43, 1), (47, 1), (53, 1), (59, 1), (61, 1)]

或者您可以像这样使用列表理解:

>>> [(x, 1) for x in mb]
[(3, 1), (5, 1), (7, 1), (11, 1), (13, 1), (17, 1), (19, 1), (23, 1), (29, 1), (31, 1), (37, 1), (41, 1), (43, 1), (47, 1), (53, 1), (59, 1), (61, 1)]

转到您的解决方案:在您的解决方案中,您将在第一次循环迭代后返回结果。因此它没有正确的值。尝试将返回值移出循环。

答案 2 :(得分:0)

一个问题是您的return命令位于for循环中,因此它只会执行一次。这可能就是为什么您没有得到想要的东西的原因。当我运行您的代码时,它返回(3,1),这只是第一组项目。如果它只在for循环中运行一次然后返回,那是有道理的。试试这个:

 mb = [3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61]
list1 = []
list2 = []                                             
def prime():
    for i in mb:
        list1.append(i)
        list2.append(1)
        print(str(len(list1)))
        print(str(len(list2)))
    return (list(zip(list1,list2)))

运行该命令时,我会得到正确的答案