为什么我的Python程序将数字1识别为素数?
我知道下面的代码不是最优的,我写它们只是为了自己的培训。但是我不知道为什么数字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,"
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是质数。哦,是的,愚蠢的错误,我改正了