Python零基础学习7.2—Python自定义函数的综合应用

这篇具有很好参考价值的文章主要介绍了Python零基础学习7.2—Python自定义函数的综合应用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本章我们加大一点难度,来让大家更好的掌握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 可迭代对象 ] 示例如下:

a_range = range(10)
# 对a_range执行for表达式
a_list = [x * x for x in a_range]
# a_list集合包含10个元素
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 函数返回值的新列表。

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

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

过滤函数filter

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

#过滤出列表中的所有奇数:
def is_odd(n):
return n % 2 == 1
newlist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
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)导入math库
from math import *
#(2)自定义函数isPrime,判断n是否为素数
def isPrime(n):
    if n < 2:
        return False
    for i in range(2,int(sqrt(n))+1):
        if n%i == 0:
            return False
    return True
#(3)自定义函数listPrime,将num数字序列中素数筛选出,返回素数列表
def listPrime(*num):
    lst = list(filter(isPrime,num))
    return lst
#(4)自定义函数printPrime,打印输出素数,每行10个
def printPrime(n):
    c = 0
    for i in range(2,n+1):
        if isPrime(i):
            print(i,end = " ")
            c += 1
            if c%10 == 0:
                print()
#(5)输入多个整数                       
strdata=input("请输入任意个数整数(以空格分隔):")
#(6)利用列表推导式将字符串strdata中数字存入列表data中
data = [int(x) for x in strdata.split()]
#(7)求列表data中素数的平方和
s = 0
data = listPrime(*data)
for i in data:
    s += i**2
print("你输入的数据中所有素数的平方和为:{}".format(s))
#(8)调用printPrime函数,输出200以内的素数
print("200以内的素数有:")
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)自定义函数fact,递归求n的阶乘
def fact(n):
    if n == 0:
        return 1
    else:
        return n*fact(n-1)
#(2)自定义函数factsum,求1~m之间所有整数的阶乘之和
def factsum(m):
    s = 0
    for i in range(1,m+1):
        s += fact(i)
    return s
#(3)输入一个自然数
num=eval(input("请输入一个自然数:"))
#(4)调用factsum函数,求任意自然数之内所有自然数阶乘之和
print(f"从1-{num}的阶乘和为:{factsum(num)}")

第3关:完数

任务描述

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

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

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

测试说明

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

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

预期输出:

是完数

6 28 496 8128 文章来源地址https://www.toymoban.com/news/detail-778103.html

代码解析

#(1)自定义函数,判断形参number是否为完数
def wanshu(number):
    lst = []
    for i in range(1,number//2+1):
        if number%i == 0:
            lst.append(i)
    return(sum(lst) == number)
#(2)从键盘输入任意自然数,判断是否为完数。
num = int(input("请输入一个自然数:"))
if wanshu(num):
    print("是完数")
else:
    print("不是完数")
#(3)遍历10000以内所有数,调用wanshu函数判断是否为完数,是完数则输出
for i in range(6,10001):
    if wanshu(i):
        print(i,end = " ")

到了这里,关于Python零基础学习7.2—Python自定义函数的综合应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 知识图谱实战应用8-从文本关系抽取到知识图谱关系构建流程贯通

    大家好,我是微学AI,今天给大家介绍一下知识图谱实战应用8-从文本关系抽取到知识图谱关系构建流程贯通。我们从文本数据中采集到关键信息,并抽取出其中的关系信息,然后在存入图数据库中,整个过程实现自动化,我这里将举一个文本例子进行抽取。 对于知识图谱的

    2024年02月02日
    浏览(41)
  • 【Python基础】- 自定义函数和匿名函数(文末送书3本)

      🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。   函数能提高

    2024年02月15日
    浏览(38)
  • 0基础学习PyFlink——用户自定义函数之UDTAF

    在前面几篇文章中,我们分别介绍了UDF、UDTF和UDAF这三种用户自定义函数。本节我们将介绍最后一种函数:UDTAF——用户自定义表值聚合函数。 UDTAF函数即具备了UDTF的特点,也具备UDAF的特点。即它可以像《0基础学习PyFlink——用户自定义函数之UDTF》介绍的UDTF那样 可以返回任

    2024年02月08日
    浏览(52)
  • 0基础学习PyFlink——用户自定义函数之UDTF

    在《0基础学习PyFlink——用户自定义函数之UDF》中,我们讲解了UDF。本节我们将讲解表值函数——UDTF 我们对比下UDF和UDTF 可以发现: UDF比UDTF多了func_type和udf_type参数; UDTF的返回类型比UDF的丰富,多了两个List类型:List[DataType]和List[str]; 特别是最后一点,可以认为是UDF和UD

    2024年02月07日
    浏览(33)
  • 0基础学习PyFlink——用户自定义函数之UDAF

    在前面几篇文章中,我们学习了非聚合类的用户自定义函数。这节我们将介绍最简单的聚合函数UDAF。 我们对比下UDAF和UDF的定义 可以发现: udaf比udf多了一个参数accumulator_type udaf比udf少了一个参数udf_type accumulator中文是“累加器”。我们可以将其看成聚合过后(比如GroupBy)的

    2024年02月08日
    浏览(44)
  • 0基础学习PyFlink——用户自定义函数之UDF

    PyFlink中关于用户定义方法有: UDF:用户自定义函数。 UDTF:用户自定义表值函数。 UDAF:用户自定义聚合函数。 UDTAF:用户自定义表值聚合函数。 这些字母可以拆解如下: UD表示User Defined(用户自定义); F表示Function(方法); T表示Table(表); A表示Aggregate(聚合); Aggr

    2024年02月08日
    浏览(47)
  • 【Python从入门到人工智能】16个必会的Python内置函数(4)——数据转换与计算 (详细语法参考+参数说明+具体示例) | 求和、四舍五入、幂运算的综合应用

      成长的标准就是,拒绝别人以后,没有任何的愧疚感。——萨特     🎯作者主页: 追光者♂🔥          🌸个人简介:   💖[1] 计算机专业硕士研究生💖   🌟[2] 2022年度博客之星人工智能领域TOP4🌟   🏅[3] 阿里云社区特邀专家博主🏅   🏆[4] CSDN-人工智能领域优质

    2024年02月15日
    浏览(69)
  • C++ 学习 ::【基础篇:14】:C++ 类的基本成员函数:析构函数的作用 及 自定义析构函数情形

    本系列 C++ 相关文章 仅为笔者学习笔记记录,用自己的理解记录学习!C++ 学习系列将分为三个阶段: 基础篇、STL 篇、高阶数据结构与算法篇 ,相关重点内容如下: 基础篇 : 类与对象 (涉及C++的三大特性等); STL 篇 : 学习使用 C++ 提供的 STL 相关库 ; 高阶数据结构与算

    2024年02月07日
    浏览(45)
  • vue 简单实验 自定义组件 综合应用 传参数 循环

    1.代码   2.运行结果

    2024年02月11日
    浏览(53)
  • 【python基础】—函数def()的定义与调用、参数、return返回值及变量作用域

    语法: 举例: 上面我们定义一个名字为hello的函数,括号内部是函数接收的参数name,紧接着就是函数的功能代码。 多次调用 位置参数 这里的\\\"手拍黄瓜\\\"和\\\"大米饭\\\"是对应参数appetizer和course的位置顺序传递的,所以被叫作位置参数,这也是最常见的参数类型。 默认参数 注意

    2024年02月02日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包