本篇文章主要介绍了如何用Python解决一系列质数问题,解释超详细,偏口语化,简单易懂,注释详细,可能部分解释不准确,但程序均跑过一般没有问题。望采纳。
对质数于,大家听起来熟悉但如果要求准确说出概念,可能会出现语无伦次的情况,那么先来普及下什么是质数。
质数(又称素数),是指在大于1的自然数中,除了1和它本身外,不能被其他自然数整除(除0以外)的数称之为质数(素数)。比1大但不是质数的数称为合数,1和0既非素数也非合数。
那么如何用python判断一个数是否为质数有什么方法呢?
1.判断某一个数是否为质数
import math #调用math模块 def isPrime(n): #定义一个判断一个数是否为质数的函数,n为形参 if n <= 1: return False#至此函数定义结束 for i in range(2, int(math.sqrt(n)) + 1): #编程思想,遍历2~(num开方后取整+1)(+1不包括) if n % i == 0: return False return True
讯享网
此程序较简单,形参和实参均用n表示 。再来详细说明一下以下代码:
讯享网 for i in range(2, int(math.sqrt(n)) + 1)
range()表示有序整数序列,包括开始数字,不包括结束数字。int()代表对括号内的数据进行取整操作。math.sqrt()是math函数中开平方的操作。
举例 若输入17,即n=17,那么最终遍历结果为:2,3,4。
接下来用17除以这些值余数均不为零,所以17是质数。有关数学证明,感兴趣的话可以百度,在这里就不多赘述了。
2.求2-N之间不包括N的所有质数并输出
from math import sqrt #调用math函数中的sqrt方法 N = 99 listname=[ p for p in range(2, N) if 0 not in [ p% d for d in range(2, int(sqrt(p))+1)] ] print(listname)
输出结果:
讯享网[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
这里解释一下第三行程序:
这里用到了一个列表推导式语句:
listname = [expression for variable in 对象(if condition)]
listname:新生成的列表名字
expression:表达式
variable:变量名
(if condition):用于从对象中选择符合要求的列表。
在这里2-99内的所有整数都用形参p表示,for语句遍历了每一个p,在遍历每一个p时进行了下一步操作,也就是之前提到过的指数检验方法,满足检验就会被输出到新的列表中。
3.求某一区间内质数的个数
讯享网mylist=[] for x in xrange(2002,8008): n = 0 for y in xrange(1,x+1): if x % y == 0: n = n + 1 if n == 2 :#既然只能被1或者自己整出,那说明只有2次余数为0的时候才说明这个数是质数 print x mylist.append(x) print mylist
xrange返回的是一个生成器,不会一下子开辟出所有的内存空间。要生成很大的数字序列的时候,用xrange会比range性能优很多,因为不需要一上来就开辟一块很大的内存空间。
4.如何优雅地判断一组数据是否全为质数
首先,第一步还是先写一个判断函数即:
def is_prime(num):
......
然后:
讯享网if __name__ == '__main__':
当运行“if __name__=='__main__':”语句时,如果当前模块时被直接执行,__name__的值就是__main__,条件判断的结果为True,“if __name__=='__main__':”下面的代码块就会被执行。换句话说当哪个模块被直接执行时,该模块“__name__”的值就是“__main__”。
接下来需要用到异常值处理中的 try...except语句,语法格式为:
try: block Except [typeerror ]: deal
block为我们的程序执行过程中可能会抛出异常的语句,typeerror为错误类型,如果省略就不指定类型,即捕获全部异常,deal为具体的处理语句。
讯享网try: my_list =[]#首先创建一个空的列表。 for i in range(4):#这里表示只处理4个数据,可根据实际情况进行修改。 s = int(input()) my_list.append(s)#将每一个输入的数据添加到my_list列表中(四个) print('my_list当前数据:',my_list) for i in my_list: assert is_prime(i) == True,'ERROR'#arrest后跟的是表达式 except AssertionError:#except后跟的是错误类型
中间block部分我们首先创建一个空列表,接下来第一个for循环用来遍历我们列表中的数据,可更改,这里用4。变量s对应我们从键盘上输入的数,一共要输四个,每输一个,回车一次。appen()函数表示依次增添到列表中。
第二个for循环用来遍历我们所输入的每一个数,注意第二个for和第一个for不是嵌套关系。这里用到一个assert语句,简要说明一下:assert在程序调试的时候被称为断言,它的语法结构为:
assert expression[,describe]
expression为一个表达式,如果为真就不采取操作,反之抛出AssertionError异常。
在这里遍历到第一个不为True,for循环结束,执行deal语句即:
讯享网 print('列表中存在非质数')
如果 全遍历完均为True,则输出:
print('列表中全为质数')#判断值为真的的处理语句
完整程序如下(注释均为手打,可能会有不严谨或错误,欢迎批评指点)
讯享网def is_prime(num):#num只是个形参,真正带入函数进行运算的实参是后面input()输入的数 from math import sqrt#调用math模块中的开方 for i in range(2, int(sqrt(num) + 1)):#编程思想,遍历2~(num开方后取整+1)(+1不包括) if num % i == 0: return False else: return True if __name__ == '__main__': try: my_list =[]#首先创建一个空的列表。 for i in range(4):#这里表示只处理4个数据,可根据实际情况进行修改。 s = int(input()) my_list.append(s)#将每一个输入的数据添加到my_list列表中(四个) print('my_list当前数据:',my_list) for i in my_list: assert is_prime(i) == True,'ERROR'#arrest后跟的是表达式 except AssertionError:#except后跟的是错误类型 print('列表中存在非质数')#判断为错误后的处理语句 else: print('列表中全为质数')#判断值为真的的处理语句
求采纳!!!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/123249.html