完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
进入第四天学习,遇到一个练习
请尝试用filter()删除1~100的素数 首先要明白什么是素数:百度一下 质数(prime number)又称素数,有无限个。 质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。 习惯了C的人,首先也会先用c的方式考虑问题,如果是用c写,如下 k=(int)sqrt(m); for(i=2;i<=k;i++) if(m%i==0) break; if(i>k) printf("%d 是素数。n",m); else printf("%d 不是素数。n",m); 分析一下,首先是取该数的平方根的int部分赋给K,然后把该数对小于该数的所有数取模,如果有任何一个能整除的就跳出,随后判断i值与k值的大小。如果换做是python,这种方法是否可行能,可以先尝试一下。 首先要导入math库,这块,还不太明白,就百度一下。 语法 以下是 sqrt() 方法的语法: import math math.sqrt( x ) 这是百度的原文,然后照葫芦画瓢,写出了python的代码,如下: import math for i in range(2,101): k = int(math.sqrt(i)) for n in range(2,101): if i%n==0: break if n>k: print i 这是我的第一个python程序,竟然能运行了,太兴奋了,当然练习是要用filter函数,需要继续研究一下filter如何用在素数上 filter() 接收一个函数和一个序列 ,就是需要把上面的程序写成一个函数,然后filter调用函数即可。 def fis_prime(m): k= int(math.sqrt(m)) for n in range(2,101): if m%n==0: break if n>k: print m filter(fis_prime,range(2,101)) 这里有个问题,如果把函数里的for n in range(2,101)这个101换成k+1,会报n未定义错误, 如果增加n= 0后,就没有输出,用print def fis_prime(7)调用,会出现一个None,但是7未打印。 是因为没有加return的原因吗? 又尝试了几种方法,终于解决了,太开心了, for m in range(2,101): k = int(math.sqrt(m)) f = 0 for i in range(2,k+1): if m%i==0: f = 1 break if f == 0: print m 如上,加个标志变量即可。 def fis_prime(m): if m == 1: return k = int(math.sqrt(m)) f= 0 for n in range(2,k+1): if m%n==0: f = 1 break if f==0: print m filter(fis_prime,range(1,101)) 发帖与2017年12月21日 评分
|
||
相关推荐 |
||
只有小组成员才能发言,加入小组>>
39个成员聚集在这个小组
加入小组3377 浏览 0 评论
5992 浏览 0 评论
2300 浏览 0 评论
5296 浏览 0 评论
1936 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 01:25 , Processed in 0.527223 second(s), Total 55, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号