2025年Python小白爬坑笔记之有关质数的问题详解(超详细注释,小白也能看的懂)

Python小白爬坑笔记之有关质数的问题详解(超详细注释,小白也能看的懂)本篇文章主要介绍了如何用 Python 解决一系列质数问题 解释超详细 偏口语化 简单易懂 注释详细 可能部分解释不准确 但程序均跑过一般没有问题 望采纳 对质数 于 大家听起来熟悉但如果要求准确说出概念 可能会出现语无伦次的情况 那么先来普及下什么是质数

大家好,我是讯享网,很高兴认识大家。

本篇文章主要介绍了如何用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('列表中全为质数')#判断值为真的的处理语句

求采纳!!!

小讯
上一篇 2025-01-12 14:23
下一篇 2025-01-29 07:29

相关推荐

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