前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Python编程实验四:函数的使用

Python编程实验四:函数的使用

作者头像
Francek Chen
发布于 2025-01-22 12:44:07
发布于 2025-01-22 12:44:07
7200
代码可运行
举报
运行总次数:0
代码可运行

一、实验目的与要求

(1)通过本次实验,学生应掌握函数的定义与调用的基本语法,能根据需要灵活应用递归函数; (2)掌握函数的可变参数的常见用法,以及列表作为参数传递时的注意事项; (3)学习map函数和lambda表达式的应用; (4)按照实验题目要求独立正确地完成实验内容(编写、调试算法程序,提交程序清单及及相关实验数据与运行结果)

二、实验内容

请使用Python语言在Jupyter Notebook环境下编程,完成下列题目的要求:

1、改编自教材第120页实训1:编写一个计算列表中位数的函数。

要求根据下图给定的程序框架完善median函数的定义,并且不允许函数修改实参列表。

2、定义并调用一个名为specify的函数,实现计算多个月份的平均访客量。请根据下图给定的程序框架完善specify函数的定义,每个月的访客量数据由data列表给出。

3、定义并调用一个名为person的函数,实现人员信息的输出。请根据预期的输出效果完善下面的程序框架,要求人员的名字信息必须要有,其他信息可有可无。

4、改编自教材第120页实训2:使用map函数和lambda表达式对列表中的元素求平方。请根据下图给定的程序框架,利用map函数和lambda表达式,只填写一行代码,实现对列表中每个元素求平方。

5、定义一个递归函数实现对字符串的逆序输出。例如,对“student”字符串,调用该函数,实现逆序输出为“tneduts”。

三、主要程序清单和程序运行结果

第1题

1、改编自教材第120页实训1:编写一个计算列表中位数的函数。 要求根据下图给定的程序框架完善median函数的定义,并且不允许函数修改实参列表。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def median(ls):
    sorted_ls = sorted(ls)  # 对列表进行排序
    n = len(sorted_ls)
    
    if n % 2 == 0:
        mid_idx = n // 2
        median = (sorted_ls[mid_idx - 1] + sorted_ls[mid_idx]) / 2
    else:
        mid_idx = n // 2
        median = sorted_ls[mid_idx]
    return median

ls1=[26,92,-5,13,6]
ls2=ls1+[117,-25,73]
print("列表ls1的中位数是{}".format(median(ls1)))
print("列表ls2的中位数是{}".format(median(ls2)))
print("调用函数后列表ls1中的元素:",ls1)
print("调用函数后列表ls2中的元素:",ls2)

运行结果:

第2题

2、定义并调用一个名为specify的函数,实现计算多个月份的平均访客量。请根据下图给定的程序框架完善specify函数的定义,每个月的访客量数据由data列表给出。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def specify(*lst):
    total_visitors = 0
    for visitors in lst:
        total_visitors += data[visitors]
    average = total_visitors / len(lst)
    print("指定月份的平均访客量位{:.2f}".format(average))

data=[200,388,123,456,987,342,767,234,124,345,123,234]
specify(1,2,3,4)
specify(10,9,8,7,6)

运行结果:

第3题

3、定义并调用一个名为person的函数,实现人员信息的输出。请根据预期的输出效果完善下面的程序框架,要求人员的名字信息必须要有,其他信息可有可无。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def person(name,**kwargs):
    print(f"The information of {name} is:")
    for key,value in kwargs.items():
        print(f"{key}:{value}")

person('Alice',city='GL')
person('Bob',gender='M',job='Teacher')
emp1={"name":"Rose","favorite":"music","age":18}
person(**emp1)

运行结果:

第4题

4、改编自教材第120页实训2:使用map函数和lambda表达式对列表中的元素求平方。请根据下图给定的程序框架,利用map函数和lambda表达式,只填写一行代码,实现对列表中每个元素求平方。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ls=[1,3,7]
squared_numbers = list(map(lambda x: x**2, ls))
print(squared_numbers)

运行结果:

第5题

5、定义一个递归函数实现对字符串的逆序输出。例如,对“student”字符串,调用该函数,实现逆序输出为“tneduts”。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def reverse_string(string):
    if len(string) == 0:
        return ""
    else:
        return reverse_string(string[1:]) + string[0]

result = reverse_string("student")
print(result)

运行结果:

四、实验结果分析与体会

通过本次实验,掌握了函数的定义与调用的基本语法,能根据需要灵活应用递归函数。学会了函数的可变参数的常见用法,以及列表作为参数传递时的注意事项;map函数和lambda表达式的应用。

模块化和重用性:函数允许将一段代码封装成一个独立的模块,这样可以在程序中多次调用,提高了代码的重用性和可维护性。参数传递:函数可以接受输入参数,这使得函数更加灵活和通用。通过参数的传递,可以让函数处理不同的数据,实现不同的功能。返回值:函数可以返回计算结果,这样可以将函数的输出作为其他部分的输入,实现更复杂的逻辑。作用域:函数内部可以定义局部变量,这些变量只在函数内部有效,避免了命名冲突和变量污染。匿名函数和闭包:Python支持匿名函数和闭包的特性,这使得函数的使用更加灵活和方便。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-08-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java学习历程之----提升篇(三)
贝赫和斯维讷通-戴尔猜想:指的是对有理数域上的任一椭圆曲线, 其L函数在1的化零阶等于此曲线上有理点构成的Abel群的秩。数学家总是被诸如X**2+Y**2=Z**2这样的代数方程的所有整数解的刻画问题着迷。欧几里德曾经对这一方程给出完全的解答,但是对于更为复杂的方程,这就变得极为困难。事实上,正如马蒂雅谢维奇指出,希尔伯特第十问题是不可解的,即不存在一般的方法来确定这样的方法是否有一个整数解。当解是一个阿贝尔簇的点时,贝赫和斯维讷通-戴尔猜想认为,有理点的群的大小与一个有关的蔡塔函数z(s)在点s=1附近的性态。特别是,这个有趣的猜想认为,如果z⑴等于0,那么存在无限多个有理点(解),相反,如果z⑴不等于0,那么只存在有限多个这样的点。
用户5410712
2022/06/01
2320
Java学习历程之----提升篇(三)
Java学习历程之----提升篇(五)
正态分布:又称高斯分布,是一个在数学、物理及工程等领域都非常重要的概率分布,在统计学的许多方面有着重大的影响力。正态曲线呈钟型,两头低,中间高,左右对称因其曲线呈钟形,因此人们又经常称之为钟形曲线。若随机变量X服从一个数学期望为μ、方差为σ^2的正态分布,记为N(μ,σ^2)。其概率密度函数为正态分布的期望值μ决定了其位置,其标准差σ决定了分布的幅度。当μ = 0,σ = 1时的正态分布是标准正态分布。其概率密度函数及期望方差如下图所示:
用户5410712
2022/06/01
2690
Java学习历程之----提升篇(五)
Java学习历程之----提升篇(二)
描述粘性不可压缩流体动量守恒的运动方程。简称N-S方程。因1821年由纳维和1845年由斯托克斯分别导出而得名。是流体力学中描述粘性牛顿流体的方程,是尚未被完全解决的方程,只有大约一百多个特解被解出来,是最复杂的方程之一。N-S方程反映了粘性流体(又称真实流体)流动的基本力学规律,在流体力学中有十分重要的意义。它是一个非线性偏微分方程,求解非常困难和复杂,只有在某些十分简单的流动问题上能求得精确解;但在有些情况下,可以简化方程而得到近似解。
用户5410712
2022/06/01
3650
Java学习历程之----提升篇(二)
Java学习历程之----提升篇(一)
杨-米尔斯规范场存在性和质量间隔假设:杨-米尔斯场论讲的是现代规范场(规范场讲的就是在一定条件下,每一种物品都是有规律的)理论的基础,旨在使用非阿贝尔李群描述基本粒子的行为,是由物理学家杨振宁和米尔斯在1954年首先提出来的。以杨·米尔斯理论为基础的规范场论可以说是20世纪后半叶最伟大的物理成绩之一,其成功为量子电动力学、弱相互作用和强相互作用提供了一个统一的数学形式化架构——标准模型,而标准模型准确地预言了在世界各地实验室中观察到的事实,其应用已经深入在物理学的其他分支中,诸如统计物理、凝聚态物理和非线性系统等等。
用户5410712
2022/06/01
1830
Java学习历程之----提升篇(一)
Java学习历程之----提升篇(七)
上周我们学习了抽象类,抽象类可以包含常规类能够包含的任何东西,还可以包含抽象方法,也可以包含非抽象方法,但当一个抽象类除了抽象方法外什么都没有的时候,用接口则更为合适,本周我们就来学习何为接口。
用户5410712
2022/06/01
2920
Java学习历程之----提升篇(七)
Java学习历程之----提升篇(八)
世界地球日,奏响低碳生活进行曲,以蓝天为乐谱,以绿树为音符,以碧水为琴弦弹奏出环保最强音,为地球母亲祈祷平安吃五谷杂粮,穿天然布衣,住节能住宅,行无车之旅,用厉行节俭。让我们怀着敬畏感恩之心,向地球母亲贺寿。
用户5410712
2022/06/01
2400
Java学习历程之----提升篇(八)
Java学习历程之----提升篇(六)
前面我们学习了Java语言的三大特性----继承,封装和多态,在前面的Java学习历程之----进阶篇(一)中我们学习到,在面向对象中,类和对象是最基本、最重要的组成单元。所有的对象都是通过类来描绘的,即类是对象的抽象,对象是类的具体,比如学生是一个类,具体到张三同学就是一个对象。Java 语言提供了两种类,分别为具体类和抽象类。前面学习接触的类都是具体类。这一节我们来介绍一下抽象类。
用户5410712
2022/06/01
2490
Java学习历程之----提升篇(六)
Java核心-面向对象(中)
前一篇简单聊了一下类、对象,还有方法的相关定义和操作,现在来介绍一下面向对象的三大特性:封装、继承和多态。本次内容是我们学习的核心和重点。
reload
2024/01/20
2490
Java核心-面向对象(中)
Java学习历程之----提升总结篇(十三)
伯努利分布:指的是对于随机变量x有, 参数为p(0<p<1),如果它分别以概率p和1-p取1和0为值。期望E(X)= p,方差Var(X)=p(1-p)。伯努利试验成功的次数服从伯努利分布,参数p是试验成功的概率。伯努利分布是一个离散型机率分布,是N=1时二项分布的特殊情况。
用户5410712
2022/06/01
1580
【JAVA-Day56】Java面向对象编程:深入理解类、对象、属性和方法的核心概念
作为一名博主,我们将在本篇技术博客中深入研究Java面向对象编程的核心概念,包括类、对象、属性和方法。我们将详细探讨这些概念,加入小表情使文章更生动有趣。让我们一起探索这个令人兴奋的领域!
默 语
2024/11/20
1900
【JAVA-Day56】Java面向对象编程:深入理解类、对象、属性和方法的核心概念
Java复习【知识改变命运】第六章
1.区别相同名的类 2.当类很多时候更好的管理[API文档] 3.控制访问范围
用户11319080
2024/10/17
840
Java复习【知识改变命运】第六章
Java 方法示例代码demo
先来看下方法重载(Overloading)的定义:如果有两个方法的方法名相同,但参数不一致,哪么可以说一个方法是另一个方法的重载。 具体说明如下: 方法名相同 方法的参数类型,参数个不一样 方法的返回类型可以不相同 方法的修饰符可以不相同 main 方法也可以被重载
默 语
2024/11/20
730
Java 方法示例代码demo
JAVA知识总结
下面是一个简单的HelloWorld.java程序,展示了Java程序的基本结构和注释的使用。
lfffffy
2024/12/26
800
Java 重写(Override)与重载(Overload)总结
重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。 重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。
赵哥窟
2018/11/09
7900
Java学习笔记 (继承、this、super)
重写(Overiding) : 子类继承父类的方法,并重新实现该方法。重写体现了Java优越性,重写是建立在继承关系上,它使语言结构更加丰富。在Java中的继承中,子类既可以隐藏和访问父类的方法,也可以覆盖继承父类的方法。
用户5513909
2023/04/25
1900
Java学习笔记  (继承、this、super)
JAVA基础知识总结
学习视频【狂神说Java】Java零基础学习视频通俗易懂_哔哩哔哩 (゜-゜)つロ 干杯~-bilibil
半生瓜的blog
2023/05/12
8230
JAVA基础知识总结
Java方法重写与重载的区别
在Java程序中,类的继承关系可以产生一个子类,子类继承父类,它具备了父类所有的特征,继承了父类所有的方法和变量。
全栈程序员站长
2022/09/08
6640
【10】JAVASE-面向对象-继承【从零开始学JAVA】
Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机,Java 仍是企业和开发人员的首选开发平台。
用户4919348
2024/05/25
520
【10】JAVASE-面向对象-继承【从零开始学JAVA】
java菜鸟教程+视频笔记
参考菜鸟教程:http://www.runoob.com/java/java-collections.html
全栈程序员站长
2022/07/01
1.1K0
java菜鸟教程+视频笔记
JAVA入门学习三
一个Java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作。
全栈工程师修炼指南
2020/10/23
7580
JAVA入门学习三
推荐阅读
相关推荐
Java学习历程之----提升篇(三)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验