当前位置:   article > 正文

Python零基础学习7.2—Python自定义函数的综合应用_本关任务:素数问题函数。 (1)实现isprime()函数,参数为整数。如果是素数,返回true

本关任务:素数问题函数。 (1)实现isprime()函数,参数为整数。如果是素数,返回true

本章我们加大一点难度,来让大家更好的掌握Python函数的使用技巧

来看例题:

第1关:素数问题函数

任务描述

本关任务:素数问题函数。

(1)实现isPrime()函数,参数为整数。如果是素数,返回True,否则返回False。

(2)在(1)的基础上,编写一个函数listPrime(),该函数可以接受任意个数数据,返回其中所有的素数。调用函数,从键盘输入任意个数的数据,从中筛选出所有素数,并计算其平方和。要求使用匿名函数求平方。

(3)在(1)的基础上,编写一个函数printPrime(),参数为整数。打印传入整数以内的素数,以空格分隔,10个一行。调用函数,打印200以内的素数。

相关知识

为了完成本关任务,你需要掌握:1.素数判断的方法,2.列表推导式,3.映射函数map,4.过滤函数filter。

素数判断的方法

判断n是否素数,用2到int(√n)之间的所有整数去除,如果都不能整除,那么n是素数。 n求平方根需要用到math库中的sqrt()函数,或者使用n**0.5。

列表推导式

列表推导式的语法格式如下: [表达式 for 迭代变量 in 可迭代对象 ] 示例如下:

  1. a_range = range(10)
  2. # 对a_range执行for表达式
  3. a_list = [x * x for x in a_range]
  4. # a_list集合包含10个元素
  5. print(a_list)

上面代码的第 3 行会对 a_range 执行迭代,由于 a_range 相当于包含 10 个元素,因此程序生成的 a_list 同样包含 10 个元素,且每个元素都是 a_range 中每个元素的平方(由表达式 x*x 控制)。

输出:[0 , 1 , 4 , 9 , 16 , 25 , 36 , 49 , 64, 81]

映射函数map

map() 会根据提供的函数对指定序列做映射。 map(function, iterable, ...) 第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

  1. # 使用 lambda 匿名函数求x平方
  2. list(map(lambda x: x ** 2, [1, 2, 3, 4, 5]))

输出:[1, 4, 9, 16, 25]

过滤函数filter

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。 filter(function, iterable) function -- 判断函数。 iterable -- 可迭代对象。

  1. #过滤出列表中的所有奇数:
  2. def is_odd(n):
  3. return n % 2 == 1
  4. newlist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
  5. print(newlist)

输出结果 :[1, 3, 5, 7, 9]

测试说明

平台会对你编写的代码进行测试:

测试输入:

请输入任意个数整数(以空格分隔): 1 2 3 4 5 6 7 8 9

预期输出:

你输入的数据中所有素数的平方和为:87

200以内的素数有:

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 101 103 107 109 113

127 131 137 139 149 151 157 163 167 173

179 181 191 193 197 199

代码解析

  1. #(1)导入math库
  2. from math import *
  3. #(2)自定义函数isPrime,判断n是否为素数
  4. def isPrime(n):
  5. if n < 2:
  6. return False
  7. for i in range(2,int(sqrt(n))+1):
  8. if n%i == 0:
  9. return False
  10. return True
  11. #(3)自定义函数listPrime,将num数字序列中素数筛选出,返回素数列表
  12. def listPrime(*num):
  13. lst = list(filter(isPrime,num))
  14. return lst
  15. #(4)自定义函数printPrime,打印输出素数,每行10个
  16. def printPrime(n):
  17. c = 0
  18. for i in range(2,n+1):
  19. if isPrime(i):
  20. print(i,end = " ")
  21. c += 1
  22. if c%10 == 0:
  23. print()
  24. #(5)输入多个整数
  25. strdata=input("请输入任意个数整数(以空格分隔):")
  26. #(6)利用列表推导式将字符串strdata中数字存入列表data中
  27. data = [int(x) for x in strdata.split()]
  28. #(7)求列表data中素数的平方和
  29. s = 0
  30. data = listPrime(*data)
  31. for i in data:
  32. s += i**2
  33. print("你输入的数据中所有素数的平方和为:{}".format(s))
  34. #(8)调用printPrime函数,输出200以内的素数
  35. print("200以内的素数有:")
  36. printPrime(200)

第2关:递归求阶乘和

任务描述

本关任务:递归求阶乘和。 用递归的方法编写求n!的函数 fact(),在此基础上编写求和函数 factsum()。编程实现 1!+2!+……+m!的计算,其中m为自然数(大于0的正整数)。

相关知识

为了完成本关任务,你需要掌握:1.阶乘递归函数,2.累加求和的方法。

阶乘递归函数

递归求阶乘,阶乘的递归表示为:0!=1,1!=1,n!=n*(n-1)!。关键是找出阶乘的递归终止条件以及递归形式。

累加求和的方法

求和函数factsum()采用累加算法。利用循环将1到m的阶乘加入累加器变量,实现求阶乘和。

测试说明

平台会对你编写的代码进行测试:

测试输入: 请输入一个自然数:7

预期输出: 从1-7的阶乘和为:5913

代码解析

  1. #(1)自定义函数fact,递归求n的阶乘
  2. def fact(n):
  3. if n == 0:
  4. return 1
  5. else:
  6. return n*fact(n-1)
  7. #(2)自定义函数factsum,求1~m之间所有整数的阶乘之和
  8. def factsum(m):
  9. s = 0
  10. for i in range(1,m+1):
  11. s += fact(i)
  12. return s
  13. #(3)输入一个自然数
  14. num=eval(input("请输入一个自然数:"))
  15. #(4)调用factsum函数,求任意自然数之内所有自然数阶乘之和
  16. print(f"从1-{num}的阶乘和为:{factsum(num)}")

第3关:完数

任务描述

本关任务: 一个数如果恰好等于它的因子之和,这个数就称为"完数"。 例如6=1+2+3.

(1)判断任意数是否为完数。

(2)找出10000以内的所有完数。

测试说明

平台会对你编写的代码进行测试:

测试输入: 请输入一个自然数:28

预期输出:

是完数

6 28 496 8128

代码解析

  1. #(1)自定义函数,判断形参number是否为完数
  2. def wanshu(number):
  3. lst = []
  4. for i in range(1,number//2+1):
  5. if number%i == 0:
  6. lst.append(i)
  7. return(sum(lst) == number)
  8. #(2)从键盘输入任意自然数,判断是否为完数。
  9. num = int(input("请输入一个自然数:"))
  10. if wanshu(num):
  11. print("是完数")
  12. else:
  13. print("不是完数")
  14. #(3)遍历10000以内所有数,调用wanshu函数判断是否为完数,是完数则输出
  15. for i in range(6,10001):
  16. if wanshu(i):
  17. print(i,end = " ")
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/329311
推荐阅读
相关标签
  

闽ICP备14008679号