【问题标题】:Returning whether or not a number is prime as a Boolean in Python返回一个数字是否为素数作为 Python 中的布尔值
【发布时间】:2020-07-24 21:38:36
【问题描述】:

对于上下文,我正在尝试使用 Python 解决 Project Euler problem 3

600851475143 的最大质因数是多少?

作为第一步,我正在尝试编写一个函数,该函数将一个数字是否为素数作为布尔值返回。我做了第一次尝试,并检查了以前是如何编写的。我最终得到了以下代码:

def isprime(x):
    limit = x**0.5
    i = 2

    if x < 2:
        return False
    elif x == 2:
        return True
    else:
        while i <= limit:
            if x%i == 0:          
                return False
                i = i + 1       
            else:
                return True

由于某种原因,上面的代码不能完美运行。例如,isprime(99) 将返回 True。

请,有人可以帮我理解为什么这不起作用吗?我试图避免只是复制和粘贴别人的代码,因为我想确切地了解这里发生了什么。

对我来说,问题似乎出在最后的 else 声明上。我这样说是因为逻辑上写着“如果x%i == 0,这个数字不是素数”,但它没有明确说明如果没有x%i 迭代== 0 时该怎么做。

对此的任何帮助将不胜感激!我不一定要寻找最干净、最整洁的方式来做这件事,而更多的只是试图首先让这段代码工作。

【问题讨论】:

  • 永远无法到达i = i + 1 行。
  • return 立即结束函数,return 之后的代码永远不会执行 - i = i + 1

标签: python boolean primes


【解决方案1】:

只是为了展示一个替代方案,如果操作(x % i) 等于零,您可以做的是从数字 2 到您的数字进行检查。如果它从未发生过,那将是一个质数。

def isprime(x):
   # check for factors
   for i in range(2,x):
       if (x % i) == 0:
           return False
   else:
       return True

print(isprime(99))

【讨论】:

    【解决方案2】:

    你需要知道当x%i==0条件不满足和i的值保持不变时会发生什么,还需要看看什么时候所有条件都不满足,那么它是一个素数

    # your code goes here
    def isprime(x):
        limit = x**0.5
        i = 2
    
        if x < 2:
            return False
        elif x == 2:
            return True
        else:
            while i <= limit:
                if x%i == 0:         
                    return False
                i+=1
        return True
    print(isprime(144)) # false
    print(isprime(99)) # false
    print(isprime(131)) # true
    

    【讨论】:

      【解决方案3】:

      试试这个:

      def isprime(x):
          limit = x**0.5
          i = 2
          if x <= 2:
              return False
      
          while i <= limit:
              if x%i == 0:          
                  return False      
              i = i + 1
          return True 
      

      我改变了很多东西。记住这一点,当您在 return 块的末尾添加 else 时,不需要 else 子句。

      【讨论】:

      • 谢谢大家,解决了缩进和使用else的一些问题!
      猜你喜欢
      • 2020-04-07
      • 2011-04-06
      • 1970-01-01
      • 2012-08-26
      • 1970-01-01
      • 2017-08-27
      • 2015-02-19
      • 1970-01-01
      相关资源
      最近更新 更多