我已经编辑了我的问题。该代码包含一个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)]等
答案 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)))
运行该命令时,我会得到正确的答案