Python练习笔记——采用生成器函数实现两数之间的素数计算

题目:编写一个生成器函数myprimes(start, end),实现[start, end)范围内的所有素数计算2 3 5 7. …

第一 常规函数方法

方法1

def myprime(num):
    if num == 1:
        return False
    elif num == 2:
        return 2
    for i in range(2, num):
        if num % i == 0:
            return False
    return num


def myprimes(start,end):
    for i in range(start,end):
        if myprime(i):
            print(i)

myprimes(1,20)

输出结果:

2 3 5 7 11 13 17 19

方法2

def myprime(num):
    if num == 1:
        return False
    k = int(num/2 +1)
    for i in range(2,k):
        if num % i == 0:
            return False
    return num


def myprimes(start,end):
    for i in range(start,end):
        if myprime(i):
            print(i)

myprimes(1,20)

运行结果

2 3 5 7 11 13 17 19

方法3

def myprime(x):
    """判断一个数x是否为素数,如果为素数,
    返回True,否则返回False
    """
    if x <= 1:
        return False
    for i in range(2, x):
        if x % i == 0:
            return False
    return True

def myprimes(start, end):
    for i in range(start,end):
        if myprime(i):
            print(i)

myprimes(1,20)

运行结果

2 3 5 7 11 13 17 19

 

方法4(该方法不用函数)

for i in range(2,20):
    fg = 0
    for j in range(2,int(i/2)):
        if (i % j ==0):
            fg=1
    if (fg == 0):
        print(i)

运行结果

2 3 5 7 11 13 17 19

 

第二 生成器函数

 

def myprime(x):
    """判断一个数x是否为素数,如果为素数,
    返回True,否则返回False
    """
    if x <= 1:
        return False
    for i in range(2, x):
        if x % i == 0:
            return False
    return True

def myprimes(start, end):
    for i in range(start,end):
        if myprime(i):
            yield i

print([x for x in myprimes(1, 10)])

for x in myprimes(1,10):
    print(x)

运行结果

[2, 3, 5, 7]
2
3
5
7

 

标签