为了账号安全,请及时绑定邮箱和手机立即绑定

求大神讲解一下这段代码???

求大神讲解一下这段代码???

qq_往昔已逝_cfhILS 2018-12-09 19:56:55
maxNumber = int(input('请输入一个大于 2 的自然数:')) lst = list(range(2, maxNumber)) #最大整数的平方根 m = int(maxNumber**0.5) for index, value in enumerate(lst):      #如果当前数字已大于最大整数的平方根,结束判断     if value > m:         break     #对该位置之后的元素进行过滤     lst[index+1:] = filter(lambda x: x%value != 0, lst[index+1:]) print(lst)
查看完整描述

1 回答

?
pardon110

TA贡献1038条经验 获得超227个赞

input(prompt)  该函数会读取标准输入流数据,返回一个字符串,prompt是作为你输入之前的提示文字, 可选。输入完毕,回车表示结束。

range(2,maxNum) 在此接受了两个参数,返回一个序列对象。第一个参数是起始数,第二个参数是终止(不包含)

上述两个包装函数,int(),list()分别将各自的字符串类型转为整形,序列类型转为列表类型

转型的目的是由于不同的数据类型对象拥有各自不同的方法。

emumerate(iterable,start=0)类接受两个参数,通常第一个参数是可迭代的序列对象,每迭代一次返回一个元组(该元组含两个元素)。在此处是列表对象(列表是对序列的扩展,另外元组也是),它会枚举带索引(数字索引)的序列对象元素,从0开始,像这样(0,seq[0]),(1,seq[1])....

平方根常识,就不说了,参考数学知识

 lst[index+1:] = filter(lambda x: x%value != 0, lst[index+1:]) print(lst)

关键是filter函数,实际上是python中一个过滤器类。第一个参数是一个参数或None对象,第二个参数是可迭代对象。在此是python中的lambda函数(也就是其它语言中的匿名函数,x为匿名函数的参数 冒号右侧部分是匿名函数返回值表达式值),若函数返回值为true可迭代对象项中元素将被返回。作用主要是过滤。filter主要作用是,逐次调用匿名函数,匿名函数接收可迭代对象中的每一元素作为参数,其返回值为真的元素留下。


对于不清楚的概念性东西,比如元组,序列,可迭代,列表,不可变等等建议学习一下python基础,了解一下也就会明白。

查看完整回答
反对 回复 2018-12-09
  • qq_往昔已逝_cfhILS
    qq_往昔已逝_cfhILS
    m = int(maxNumber**0.5) for index, value in enumerate(lst): #如果当前数字已大于最大整数的平方根,结束判断 if value > m: break 大神,我想问一下value为什么是大于maxNumber**0.5,而不是maxNumber呀
  • pardon110
    pardon110
    看你这段代码的需求很明显是寻找质数,质数的定义是能被1和它本身整除。其中的问题在于如何判断目标数能否被其它数整除,而找到并缩小这个‘其它数’是关键。 假设一下求100以下的质数,事实上只要判断1到100间内的数能不能被2到10(100的平方根)整除,就能找到其范围内的质数了。当然了,你也可以用常规思维找,比如判断69是不是质数,判断69分别除2到68的数整除。最终的效果肯定是一样,用平方根的目的主要还是小计算量(循环次数),逻辑判断。这往大的说是算法,是计算思维。
  • 1 回答
  • 0 关注
  • 1944 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信