问题:自定义一个生成小于某个整数的所有素数的迭代器
class MySuShuIterator():
def __init__(self,start,end):
self.__start = start
self.__end = end
def __iter__(self):
return self
def __next__(self):
for item in range(self.__start,self.__end):
if self.isPrime(item):
self.__start = item+1
return item
raise StopIteration
def isPrime(self,item):
if item == 1:
return False
else:
for value in range(2,item):
if item % value == 0:
return False
return True
思路:
思路1):因此判断一个整数m是否是素数,只需把 m 被 2 ~ m-1 之间的每一个整数去除,如果都不能被整除,那么 m 就是一个素数。
思路2):另外判断方法还可以简化。m 不必被 2 ~ m-1 之间的每一个整数去除,只需被 2 ~ m的开平方根之间的每一个整数去除就可以了。如果m不能被2~m的开平方根间任一整数整除,m必定是素数。
例如:判别17是否是素数,只需使17被2~4之间的每一个整数去除,由于都不能整除,可以判定17是素数
编程思路:
1、先把创建迭代器的类写好,需新建一个迭代器的class, 定义上迭代器协议方法
class MyIteration(object):
def __init__(self,start,end):
self.start = start
self.end = end
def __iter__(self):
return self
def __next__(self):
if [xxx]:
pass
else:
raise StopIteration
2、在迭代器类里定义一个是否是素数逻辑的方法(重点:使用range()内置函数,拿到可以进行去整除的数)
def isPrime(self):
if item == 1:
return False
else:
for value in range(2,item):
if item % value == 0:
return False
return True