For loop_python
我不知道为什么这么简单的语法会导致错误。有人能帮我看看我是否漏掉了什么吗 本部分仅尝试检查特定(num)是否为素数。 不确定为什么我的检查(10)结果为“素数”。因为我从3,4,5,6,…,9>循环y,然后10%5==0,我想它返回true,结果是“非素数” 我在循环中有没有做错什么For loop_python,python,loops,Python,Loops,我不知道为什么这么简单的语法会导致错误。有人能帮我看看我是否漏掉了什么吗 本部分仅尝试检查特定(num)是否为素数。 不确定为什么我的检查(10)结果为“素数”。因为我从3,4,5,6,…,9>循环y,然后10%5==0,我想它返回true,结果是“非素数” 我在循环中有没有做错什么 def check_primes(num): for y in range(3,num): if num%y==0: return 'Non PRIME'
def check_primes(num):
for y in range(3,num):
if num%y==0:
return 'Non PRIME'
else:
return 'PRIME'
“素数”的定义说明一个数是素数当且仅当它只能被1和它本身整除。这意味着,如果您从
2
到n-1
找到一个数字,则该数字是非素数,该数字除以n
。要检查数字是否为素数,必须检查从2
到n-1
的每个数字。在这两种情况下,测试3的可除性后,代码立即停止。返回“素数”或“非素数”的方法,如示例所示:
def check_primes(num):
is_prime = True
for y in range(3,num):
if num % y==0:
return 'Non PRIME'
else:
continue
return 'PRIME'
在验证数字是否为非素数时,您将返回“Non PRIME”。或者,如果您的所有检查都成功,您将根据需要返回“PRIME”
(请注意,这不是获取素数的非常有效的方法)
(请注意,下面的注释是正确的,此方法的工作方式与使用或不使用else子句的工作方式完全相同)您应该使用
print
而不是return。返回循环时正在中断循环。欢迎使用堆栈溢出。请仔细检查您的代码是否与正在运行的代码缩进相同。您的循环只执行一次;它总是仅根据数字是否可被3整除而返回,不可能进行进一步检查。@jasonharper,我应该在中断时添加吗?不要返回,print
!这样,您的循环就不会中断阅读有关如何调试代码的提示。只需检查从2到楼层(sqrt(n))。@jarmod这是一个非常好的优化。我认为对于学习编码的人来说,直接从“素数”的定义实现一个简单的算法是一个很好的学习体验,可以帮助他们理解这样的优化的好处。仅仅用print
替换return
并不能解决问题。函数需要返回
某些内容才能正确。不需要else
子句。我留下了else
子句,以便更直接地演示如何使他的示例工作。也许这会让答案变得不那么清晰,但我认为对于一个对这类事情比较新的人来说,它也可以很容易地走另一条路。