无法理解函数行为 - isprime()
Can't understand function behavior - isprime()
我构造了两个函数。第一个(不重要但相关,因为它在第二个中被调用)判断一个数是否为质数:
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
的所有素数。
当我要求它将它附加到列表时 - 它 returns 一个空列表和单独的所有值。
def prime_counting(p):
list_of_primes = []
for n in range (p+1):
if is_prime(n) == "prime":
list_of_primes.append(n)
我该如何解决?
(注意:我没有检查你的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()
会returnTrue
或False
(所以没必要跟他们比较)。
您的代码中存在一些缺陷,但您要问的是:
您正在查看 is_prime()
的 return 值
if is_prime(n) == "prime":
但 is_prime()
不包含任何 return 语句。
这是一个稍微修改过的版本,实际上 return 是 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 布尔值 return True
或 return False
您将能够做到:
if is_prime(n):
do_something()
甚至像这样使用 "comprehension":
prime_list = [n for n in range(1, p+1) if is_prime(n)]
我构造了两个函数。第一个(不重要但相关,因为它在第二个中被调用)判断一个数是否为质数:
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
的所有素数。
当我要求它将它附加到列表时 - 它 returns 一个空列表和单独的所有值。
def prime_counting(p):
list_of_primes = []
for n in range (p+1):
if is_prime(n) == "prime":
list_of_primes.append(n)
我该如何解决?
(注意:我没有检查你的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()
会returnTrue
或False
(所以没必要跟他们比较)。
您的代码中存在一些缺陷,但您要问的是:
您正在查看 is_prime()
的 return 值
if is_prime(n) == "prime":
但 is_prime()
不包含任何 return 语句。
这是一个稍微修改过的版本,实际上 return 是 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 布尔值 return True
或 return False
您将能够做到:
if is_prime(n):
do_something()
甚至像这样使用 "comprehension":
prime_list = [n for n in range(1, p+1) if is_prime(n)]