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

Python - for-loop does not enter correct argument for boolean parameter

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

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 分类为“True”或“False”。原因是我不喜欢用标准参数生成变量的想法;相反,我更喜欢先生成填充有缺失值的变量,然后才用适当的参数填充它们。我试过这个命令,但它只会输出“It is a prime number”。:

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.")

不知道有没有人知道为什么上面的命令只会输出“It is a prime number”。

我不确定您为什么不喜欢这个想法,它在 python(以及一般的编程)中非常标准并且经常使用。不管怎样,你能写的最接近的东西是:

is_prime = None

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

因为你的第二个函数

else:
    is_prime = True

在 for-loop 内。 因此,如果它发现 n 的一个值不是质数,则下一次迭代 (n+1) 可能会使 is_prime 等于 True.

例如,如果您要测试数字 4:

  1. 可以被2整除,所以设置is_primeFalse
  2. 不能被3整除,所以设置is_primeTrue

你发现它不是质数后需要添加一个break,这样它就不会尝试继续检查其他数字。

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

最后,只是一个add-on,有更快的方法来检查素数:

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

我的最终命令是:

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")

感谢所有在此 post 发表评论的人!当然欢迎任何其他评论。