【问题标题】:prime number python for loops素数python for循环
【发布时间】:2015-06-29 17:58:13
【问题描述】:

问题:

一个以正整数 n 作为输入的程序,如果 n 是素数则返回 True,否则返回 False。

我的回答:

n = int(input("Enter a number: "))
for i in range(2,n):
    if n%i == 0:
        print(False)
print(True)

当我输入一个素数时它可以工作,但是当我输入一个非素数时它不起作用。

示例:

>>> 
Enter a number: 12
False
False
False
False
True
>>> 

请帮忙!

【问题讨论】:

  • 你的意思是对非素数不起作用?
  • 你没有返回任何东西......(而且你只需要检查到 sqrt(n))

标签: python python-3.x for-loop prime-factoring


【解决方案1】:

您可以break 并使用else

n = int(input("Enter a number: "))
for i in range(2, n):
    if n % i == 0:
        print(False)
        break
else: 
    print(True)

True 只会在循环完全完成时打印,即没有n % i 等于 0。

【讨论】:

  • @JafarOcean,不用担心,如果您不使用函数,这可能是最简单的方法。
【解决方案2】:

您的代码总是在末尾打印True,并在此之前打印多个Falses。相反,您应该有一个变量 (isPrime?),当您发现它可以被某些东西整除时,它会被初始化为 True 并设置为 False。然后在最后打印那个变量。

【讨论】:

  • 那么它看起来怎么样?
【解决方案3】:

你只是在打印每个中间值,如果你在函数中使用return 它工作正常

def prime(n):
    for i in range(2, n):
        if n%i == 0:
            return False
    return True

>>> prime(5)
True
>>> prime(12)
False

【讨论】:

    【解决方案4】:

    您可以在此处使用 for-else 子句。此外,您不需要超出n 的平方根:

    import math
    
    for i in range(2, int(math.sqrt(n))):
        if n % i == 0:
            print "False"
            break
    else:
        print "True"
    

    【讨论】:

      【解决方案5】:

      有很多不同的方法可以修复你的代码,但所有这些方法都取决于这样一个事实,即如果你找到一个除数(即如果n%i == 0),你应该打破这个循环

      通常,你会有一个布尔值来存储你是否找到了一个除数,但 python 允许你做以下事情

      n = int(input("Enter a number: "))
      for i in range(2,n):
          if n%i == 0:
              print(False)
              break
      else:
          #else statement only happens if you don't break out of the loop
          print(True)
      

      【讨论】:

        【解决方案6】:

        在这里查看算法:

        http://www.programiz.com/python-programming/examples/prime-number

        # Python program to check if the input number is prime or not
        
        # take input from the user
        num = int(input("Enter a number: "))
        
        # prime numbers are greater than 1
        if num > 1:
           # check for factors
           for i in range(2,num):
               if (num % i) == 0:
                   print(num,"is not a prime number")
                   print(i,"times",num//i,"is",num)
                   break
           else:
               print(num,"is a prime number")
        
        # if input number is less than
        # or equal to 1, it is not prime
        else:
           print(num,"is not a prime number")
        

        【讨论】:

          【解决方案7】:

          如果您遇到in 取模零,那么您必须打印False 然后什么也不做。为此,您可以使用 flag 变量来处理这种情况。如果没有遇到这样的i,则标记保持1 并打印True

          n = int(input("Enter a number: "))
          flag = 1
          for i in range(2,n):
              if n%i == 0:
                  print(False)
                  flag = 0
                  break
          if flag:
              print(True)
          

          【讨论】:

            【解决方案8】:

            检查这一点,它应该清楚为什么else 语句是“非常规”缩进的:

            num = int(input('Enter the maximum value: '))
            
            for number in range(3, num+1):
                #not_prime = False
                for factor in range(2, number):
            
                    if number%factor == 0:
                        #not_prime = True
                        break
                #if not_prime:
                    #continue
                else:
                    print(number)
            

            【讨论】:

              【解决方案9】:

              以上所有内容都是正确的,但我想补充一点,您应该检查 1 的条件。如果有人将 1 作为整数,您将不得不返回 False。 1 不是素数

              【讨论】:

                【解决方案10】:
                def prime_num(num):
                    if num <= 0:
                        return "the number is not primary"
                    for i in range(2, num - 1):
                        if num % i == 0:
                            return "The number is not primary, it can be divided: " + str(i)
                    return "The number: " + str(num) + " is primary"
                

                【讨论】:

                  【解决方案11】:

                  这是解决它的众多方法之一:

                  def is_prime(num):
                  if (num == 2):
                      return True
                  elif any(x for x in range(2, num - 1) if (num % x == 0)):
                      return False
                  else:
                      return True
                  

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2017-11-02
                    • 1970-01-01
                    • 2015-01-08
                    • 2017-11-02
                    • 1970-01-01
                    相关资源
                    最近更新 更多