Python-for循环没有为布尔参数输入正确的参数



我正试图在Python中生成一个for循环,该循环应将任何数字分类为素数/非素数。建议的命令是:

def prime_checker(number):
is_prime = True
for n in range(2, number):
if number % n == 0:
is_prime = False
if is_prime == True:
print("It is a prime number.")
else:
print("It is not a prime number.")

上面建议的命令运行良好。然而,我想将参数生成为is_prime = bool()(即没有标准值(,并且只有在这之后,函数才会将is_prime分类为"0";真"或";错误";。原因是我不喜欢用标准自变量生成变量的想法;相反,我更喜欢先生成填充有缺失值的变量,然后才用正确的参数填充它们。我尝试了这个命令,但它只会输出";它是一个素数":

def prime_checker(number):
is_prime = bool()
for n in range(2, number):
if number % n == 0:
is_prime = False
else:
is_prime = True
if is_prime == True:
print("It is a prime number.")
else:
print("It is not a prime number.")

我想知道是否有人知道为什么上面的命令将只输出"0";它是一个素数">

我不知道你为什么不喜欢这个想法,它在python中(以及在编程中(是非常标准的,并且经常使用。无论如何,你能写的最接近的东西是:

is_prime = None

这在python中等同于声明一个变量而不赋值。

我的最终命令是:

def prime_checker(number):
is_prime = None
if number <2:
is_prime = False
print(f"{number} is not prime")
else:
for n in range(2,number):
if number % n == 0:
is_prime = False
if is_prime == False:
print(f"{number} is not prime")
else:
is_prime = True
print(f"{number} is prime")

感谢所有在这篇文章中发表评论的人!当然欢迎任何其他意见。

这是因为您的第二个函数执行

else:
is_prime = True

在for循环中。因此,如果它发现它不是n的一个值的素数,那么下一次迭代(n+1(可能会使is_prime等于True

例如,如果你正在测试数字4:

  1. 它可以被2整除,所以将is_prime设置为False
  2. 它不能被3整除,所以将is_prime设置为True

在发现break不是素数后,您需要添加它,这样它就不会继续检查其他数字。

无论如何,执行is_prime = bool()会将其设置为False

最后,作为一个附加组件,有更快速的方法来检查原始性:

import math
def is_prime(number):
if number <= 2:
print(number, "is prime!")
return True
for i in range(3, math.floor(math.sqrt(number))+1, 2):
if number%i == 0:
print(number, "is prime!")
return True
print(number, "is not prime!")
return False

最新更新