python实现is_prime()函数,参数为整数,要有异常处理。如果整数是质数,返回True,否则返回False
如有错误欢迎指正先看一下质数的定义质数(Prime number),又称素数,指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数(也可定义为只有1与该数本身两个因数的数)isprime函数必定要接收参数,那我们对参数的要求是大于1的自然数,我们无法保证别人输入的数据的类型,我们应该如何给参数设限呢,应该在函数内部设限还是在函数外部。这里可以看一下另一篇讨论的文章python写一个接
如有错误欢迎指正
先看一下质数的定义
质数(Prime number),又称素数,指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数(也可定义为只有1与该数本身两个因数的数)
isprime函数必定要接收参数,那我们对参数的要求是大于1的自然数,我们无法保证别人输入的数据的类型,我们应该如何给参数设限呢,应该在函数内部设限还是在函数外部。
这里可以看一下另一篇讨论的文章python写一个接收参数的函数,对传入的数据有要求,该怎么办,在內部检查还是靠外部_m0_59834108的博客-CSDN博客
我最后的做法是在函数内部用assert做一个判断,如果接收的数据不符合要求,就会抛出异常,终止函数。我的代码如下
遵循单一出口规范,我用flag做标记。
这里又有一个问题,在起始flag设为False还是True。刚开始写这个函数的时候我将flag设为False,后来写到for循环的时候,我发现应该将flag初始值设为True,因为我的算法是从在range(2, x)之间进行 x%i的判断,如果有一个数字可以整除,就说明x不是质数,我就应该将flag设为false,否则flag就应为True。如果将flag的初始值设为False,就与我的算法矛盾。
在写for循环的时候还有一个问题,range(2, x),如果传入的x是2怎么办,range()函数会怎么执行,我试了一下,发现range(2, 2)不执行。刚好2就是质数,我初始flag就是True,不执行就不执行吧,刚好。
在主函数中接收参数的时候用int()做“类型转换”,这一步其实已经做了一个很好的限制,输入的类型如果不是int型,就会报错。
更多推荐
所有评论(0)