我构建了两个函数。第一个(不重要但是相关的,因为它在第二个中被调用)告诉一个数字是否是素数:
def is_prime(i):
if i == 1:
print("prime")
if i == 2:
print("not prime")
for d in range(2, i):
if i % d != 0:
d = d+1
if d == i:
print('prime')
break
if i % d == 0:
print('not prime')
break
我希望能够使此函数计算从1
到p
的所有素数。
当我要求它将它追加到列表中时 - 它会单独返回一个空列表和所有值。
def prime_counting(p):
list_of_primes = []
for n in range (p+1):
if is_prime(n) == "prime":
list_of_primes.append(n)
我该如何解决这个问题?
答案 0 :(得分:2)
(注意:我没有检查is_prime()
功能的逻辑)
代码中的明显错误是函数is_prime()
没有return
任何东西,只有print
s。您希望它为return True
或False
,具体取决于数字是否为素数。改变它这样做。
然后你可以检查:
if is_prime(n) == True:
list_of_primes.append(n)
编辑:正如评论中所说的那样(正确),写一种更为“pythonic”的方式是:
if is_prime(n):
list_of_primes.append(n)
由于is_prime()
将返回True
或False
(因此无需与它们进行比较)。
答案 1 :(得分:0)
您的代码中存在一些缺陷,但您要问的是:
您正在查看is_prime()
与
if is_prime(n) == "prime":
但is_prime()
不包含任何返回语句。
这是一个稍微修改过的版本,实际上会从is_prime()
返回一个值:
def is_prime(i):
if i == 1:
return "prime"
if i == 2:
return "not prime"
for d in range(2, i):
if i % d != 0:
d = d + 1
if d == i:
return "prime"
if i % d == 0:
return "not prime"
def prime_counting(p):
list_of_primes = []
for n in range(p+1):
if is_prime(n) == "prime":
print("added %s" % n)
list_of_primes.append(n)
return list_of_primes
if __name__ == '__main__':
print(prime_counting(3))
如果您改为返回布尔值return True
或return False
,则可以执行以下操作:
if is_prime(n):
do_something()
甚至像这样使用“理解”:
prime_list = [n for n in range(1, p+1) if is_prime(n)]