【循序渐进学Python】使用多种方法实现素数之和

【循序渐进学Python】运用Python实现素数之和

今天我们运用我们所学的知识,写一个案例,进一步对所学知识进行熟悉!

素数之和

需求:

  • 求出1-200之内所有的素数之和素数是指只能被1和自身整除的数

方法一:

思路:

  1. 我们可以先求出1-200之间的所有素数
  2. 然后把所有素数放到列表中进行最后的相加求和

实现:

# 首先定义一个空的列表
num = []
# 然后for循环遍历1-200之间的所有数
for i in range(1, 201):
    # 然后再用for循环遍历2到i之间的所有数
    # 因为1肯定可以被任何数整除,所以我们从2开始
    # 然后range方法是左开右闭所以我们选择2到i,但是不包括i
    # 把比i小的数都除一遍
    for temp in range(2, i):
        # 然后用if进行判断
        # 当i除于temp取余等于0的话
        if i % temp == 0:
            # 那么说明,在2到i之间还有数可以被整除,则不是素数了,跳出循环
            break
    else:
        # 反之,则把i添加到上面我们定义好的空列表中去
        num.append(i)

print(num)
# 对列表输出进行查看
# 定义一个变量让它等于0
ret = 0
# for循环遍历列表
for i in num:
    # 进行相加
    ret += i
# 最后输出列表相加的和值
print(ret)

方法二:

思路:

  1. 利用列表推导式把1-200所有数放到一起
  2. 定义函数判断是否是素数
  3. 利用高阶函数进行过滤,求和得出最终结果

实现:

# 首先我们导入高阶函数reduce需要的包
import functools

# 然后利用列表推导式把1-200的所有数放到一个列表中
num = [i for i in range(1, 201)]


# 定义一个函数
def fun(x):
    # for循环遍历2到x之间的数
    # x 代表高阶函数中传入函数的序列
    for temp in range(2, x):
        # 利用if 进行判断
        # 如果取余等于0的话
        # 那么该数就不是素数
        if x % temp == 0:
            # 返回一个 False
            return False
    else:
        # 反之,返回一个 True
        return True


# 利用高阶函数filter进行过滤,过滤掉不是素数的数
ret = filter(fun, num)
# 然后利用匿名函数和高阶函数reduce进行累计求和
res = functools.reduce(lambda x, y: x + y, list(ret))
# 得出最后的结果
print(res)

你可能感兴趣的:(循序渐进学Python,列表推导式,高阶函数)