为什么我的Python程序将数字1识别为素数?

为什么我的Python程序将数字1识别为素数?,python,Python,我知道下面的代码不是最优的,我写它们只是为了自己的培训。但是我不知道为什么数字1被认为是质数。 请帮帮我 n=input ('Enter number: ') def prime (): global n try: n=int (n) for I in range (2, n): if n==1 or n%I==0: print (n,"

我知道下面的代码不是最优的,我写它们只是为了自己的培训。但是我不知道为什么数字1被认为是质数。 请帮帮我

n=input ('Enter number: ')
def prime ():           
     global n    
     try:
       n=int (n)           
       for I in range (2, n):
            if n==1 or n%I==0:
              print (n,"is not prime ")  
              break           
       else:
            print (n,"is Prime")
       if True:     
           n=input ('enters number: ')
           prime ()
     except:
           n=input ('Please enter a number not a word: ')
           prime ()        
prime ()

原因是,当n=1时,因为范围2,1为空,所以没有计算第一个if语句。所以它转到else语句并将1打印为素数。要解决此问题,应将范围扩展到0,n,并按如下方式重做if语句:

n=input ('Enter number: ')
def prime ():
     global n
     try:
       n=int (n)
       for I in range (0, n):
            if n == 1 or (I > 1 and  n%I == 0):
              print (n,"is not prime ")
              break
       else:
            print (n,"is Prime")
       if True:
           n=input ('enters number: ')
           prime ()
     except:
           n=input ('Please enter a number not a word: ')
           prime ()
prime ()

#output:
Enter number: 3
3 is Prime
enters number: 2
2 is Prime
enters number: 1
1 is not prime 

原因是,当n=1时,因为范围2,1为空,所以没有计算第一个if语句。所以它转到else语句并将1打印为素数。要解决此问题,应将范围扩展到0,n,并按如下方式重做if语句:

n=input ('Enter number: ')
def prime ():
     global n
     try:
       n=int (n)
       for I in range (0, n):
            if n == 1 or (I > 1 and  n%I == 0):
              print (n,"is not prime ")
              break
       else:
            print (n,"is Prime")
       if True:
           n=input ('enters number: ')
           prime ()
     except:
           n=input ('Please enter a number not a word: ')
           prime ()
prime ()

#output:
Enter number: 3
3 is Prime
enters number: 2
2 is Prime
enters number: 1
1 is not prime 

你也可以这样做

n=input ('Enter number: ')
def prime ():           
    global n    
    try:
        n=int (n) 

        if n == 1:
            print('n is not prime')
        else:        
            for I in range (2, n):
                if n%I==0:
                    print (n,"is not prime ")  
                    break           
            else:
                print (n,"is Prime")
    except:
        n=input ('Please enter a number not a word: ')
prime ()

你也可以这样做

n=input ('Enter number: ')
def prime ():           
    global n    
    try:
        n=int (n) 

        if n == 1:
            print('n is not prime')
        else:        
            for I in range (2, n):
                if n%I==0:
                    print (n,"is not prime ")  
                    break           
            else:
                print (n,"is Prime")
    except:
        n=input ('Please enter a number not a word: ')
prime ()

根据什么逻辑,您认为您的代码不会指示1为素数?range2,1为空,因此如果n=1,将触发else子句。只有特例1和2。谢谢大家,@Buddybobii抱歉。。我格式化了。@khelwood。@supersormer是的,谢谢你解决了这个问题。@HiwaSadeghpour这不是你唯一的问题,你的代码存在多个问题,比如在except子句中递归调用自己和if-True:语句没有任何意义。有许多寻找素数的好例子。为什么不先研究其中的一些呢?只需插入一个if语句来处理1和2在顶部的特殊情况,然后在else挂起语句中添加for loopBy,您认为您的代码不会指示1为素数的逻辑是什么?range2,1为空,因此如果n=1,将触发else子句。只有特例1和2。谢谢大家,@Buddybobii抱歉。。我格式化了。@khelwood。@supersormer是的,谢谢你解决了这个问题。@HiwaSadeghpour这不是你唯一的问题,你的代码存在多个问题,比如在except子句中递归调用自己和if-True:语句没有任何意义。有许多寻找素数的好例子。为什么不先研究其中的一些呢?只需插入一个if语句来处理1和2在顶部的特殊情况,然后在一个else未决语句中添加for loop,非常感谢。。它真的帮助了我。!谢谢。。它真的帮助了我。!2是质数。哦,是的,愚蠢的错误,我改正了。2是质数。哦,是的,愚蠢的错误,我改正了