Discuss / Python / 求各位大神指点:求100以内的素数,下面用for in循环代替例子中的next结果为啥是2-20的所有数?it = filter(_not_divisible(n), it) 好像没有执行一样

求各位大神指点:求100以内的素数,下面用for in循环代替例子中的next结果为啥是2-20的所有数?it = filter(_not_divisible(n), it) 好像没有执行一样

Topic source

花泽的类

#1 Created at ... [Delete] [Delete and Lock User]

def _not_divisible(n): return lambda x: x % n > 0

def primes():

it=range(2,20+1) 
for n in it: 
    print(n) 
    it = filter(_not_divisible(n), it)

primes() 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

花泽的类

#2 Created at ... [Delete] [Delete and Lock User]

求20以内的素数,题目打错了

it=range(2,20+1) for n in it: print(n) it = filter(_not_divisible(n), it) 首先你在循环外给it赋值,那么for循环取到的数值列表就是[2,3,4,5,6,...,20] 然后进入for循环,首先打印列表中第一个元素2,之后你的操作虽然是踢出后重新赋值给it,for循环的结束条件是列表中的元素全部跑完,那么还是按照原先的列表[2,3,4,5,...,20]继续执行,每次执行的第一步就是打印这个元素。至于后边的it赋值语句虽然执行,但是不会改变循环中列表的元素。 在你的it = filter(_not_divisible(n), it)后边加上一句print(it)你就知道了

花泽的类

#4 Created at ... [Delete] [Delete and Lock User]

@路紫陌氵嗨: 这就是我不明白的地方:按理说for in 循环中,如果循环条件(it)改变的话,循环次数不应该也会跟着改变的吗? 而我这个代码执行的时候为什么不变呢?


  • 1

Reply