• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

【Python基础】函数:输出一个区间内的素数

互联网 diligentman 2周前 (04-08) 6次浏览

【Python基础】函数:输出一个区间内的素数


前言

如果只是判断素数,那岂不是太没有新意了

所以我们这次要在判断素数的基础上再加入函数的调用

对一个区间的素数进行输出


思路解读

如果你还不知道什么是素数,那么是不是有点说不过去了

素数(质数):是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。我百度的,我也不会

既然我们已经知道什么是素数了,那么就将每个素数输出到一个列表里不就好了


判断质数

我们先来定义一个函数 ‘Prime’ ,用来判断质数

如何判断质数呢?

我们让这个数 ‘i’ 除以 2到i-1 的每一个数,如果出现余数为0,那么这个数就是合数

那么问题来了

什么是合数呢

阿~就不是素数就是合数

代码如下

def Prime(i):
    for a in range(2, i):
        if i % a == 0:
            break
        if a == i - 1:
            return i

这段代码会在这个数为素数的时候

返回这个数的值

反之则返回 none

(注意,不是素数的时候的并不是没有返回值,有返回值,返回值为’none’,代表返回了个寂寞)

但是细心的小伙伴就会发现了

上面那段代码并不能判断出2是素数

因为当i == 2时,会直接break

所以我们对代码进行一些小修改

def Prime(i):
    if i == 2:
        return 2
    for a in range(2, i):
        if i % a == 0:
            break
        if a == i - 1:
            return i

这样就能完美的判断素数了!


输出区间内的素数

通过上面的函数我们已经能够判断素数了

将判断出的素数输出到一个列表之中

就得到了我们的结果

那么我们再定义一个函数 'Primes’

用来输出已知区间内的所有素数

代码如下

def Primes(n,m):
    li=[]
    for i in range(n,m):
        li.append(Prime(i))
    return li

首先我们创建一个空列表 'li’

然后将上述函数的返回值都添加到列表 ‘li’

就得到了最终的结果

但是又会有细心的小伙伴又发现了

前文我们已经说过了

不是素数的时候并不是没有返回值

而会返回 none

那么你的输出结果会变成这个样子

以n=1,m=100为例

[None, 2, 3, None, 5, None, 7, None, None, None, 11, None, 13, None, None, None, 17, None, 19, None, None, None, 23, None, None, None, None, None, 29, None, 31, None, None, None, None, None, 37, None, None, None, 41, None, 43, None, None, None, 47, None, None, None, None, None, 53, None, None, None, None, None, 59, None, 61, None, None, None, None, None, 67, None, None, None, 71, None, 73, None, None, None, None, None, 79, None, None, None, 83, None, None, None, None, None, 89, None, None, None, None, None, None, None, 97, None, None]

显然,这并不是我们想要得到的效果

所以我们依旧要对代码进行一些小修改

def Primes(n,m):
    li=[]
    for i in range(n,m):
        if Prime(i) != None:
            li.append(Prime(i))
    return li

在添加到列表之前判断该值是否为 none

这样我们这道题就做完了


综上所述

完整代码如下

def Prime(i):
    if i == 2:
        return 2
    for a in range(2, i):
        if i % a == 0:
            break
        if a == i - 1:
            return i
def Primes(n,m):
    li=[]
    for i in range(n,m):
        if Prime(i) != None:
            li.append(Prime(i))
    return li

print('你想知道哪个区间中的全部素数?[n,m)')
n=int(input('n='))
m=int(input('m='))
print('区间[%d,%d)的所有素数为:'%(n,m),Primes(n,m))

同样以n=1,m=100为例,进行输出

得到如下输出

你想知道哪个区间中的全部素数?[n,m)
n=1
m=100
区间[1,100)的所有素数为: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

结尾

一家之言,如有疏漏之处,还请指出

望一同进步


程序员灯塔
转载请注明原文链接:【Python基础】函数:输出一个区间内的素数
喜欢 (0)