【头歌系统Python实验】函数调用_函数调用头歌-程序员宅基地

技术标签: Python实验  python  microsoft  windows  开发语言  

目录

第1关:内置函数 - 让你偷懒的工具 

第2关:函数正确调用 - 得到想要的结果

第3关:函数与函数调用 - 分清主次


如果对你有帮助的话,不妨点赞收藏评论一下吧,爱你么么哒️️️

第1关:内置函数 - 让你偷懒的工具 

任务描述

我们在编程过程中会用到很多函数,但我们不需要每个函数都自己去编写,因为 Python 内置了很多十分有用的函数,我们在编程过程中可以直接调用。本关目标是让学习者了解并掌握一些常用的 Python 内置函数的用法。

相关知识

数学运算

abs():返回数值的绝对值,例如:

  1. >>> abs(-4)

  2. 4

divmod():返回两个数值的商和余数,例如:

  1. >>> divmod(7,2)

  2. (3,1)

max():返回元素中的最大值,例如:

  1. >>> max(2,6,1,7)

  2. 7

min():返回元素中的最小值,例如:

  1. >>> min(2,6,1,7)

  2. 1

sum():返回传入元素之和,例如:

  1. >>> sum((1,2,3,4))

  2. 10

  3. >>> sum([1,2,3,4])

  4. 10

  5. >>> sum((1,2,3,4),-10)

  6. 0

类型转换

bool():根据传入的参数的逻辑值创建一个新的布尔值,例如:

  1. >>> bool()

  2. False

  3. >>> bool(1)

  4. True

  5. >>> bool(0)

  6. False

  7. >>> bool('str')

  8. True

int():根据传入的参数创建一个新的整数,例如:

  1. >>> int('3')

  2. 3

  3. >>> int('3.6')

  4. 3

float():根据传入的参数创建一个新的浮点数,例如:

  1. >>> float() # 不提供参数的时候,返回0.0

  2. 0.0

  3. >>> float(3)

  4. 3.0

  5. >>> float('3')

  6. 3.0

complex():根据传入的参数创建一个新的复数,例如:

  1. >>> complex() # 当两个参数都不提供时,返回复数0j

  2. 0j

  3. >>> complex('2+4j')

  4. (2+4j)

  5. >>> complex(1,2)

  6. (1+2j)

序列操作

all():判断可迭代对象的每个元素是否都为True值,例如:

  1. >>> all([1,2,3]) # 列表中每个元素逻辑值均为True,返回True

  2. True

  3. >>> all([0,1,2]) # 列表中0的逻辑值为False,返回False

  4. False

  5. >>> all(()) # 空元组

  6. True

any():判断可迭代对象的元素是否有为True值的元素,例如:

  1. >>> any([0,1,2]) # 列表元素有一个为True,则返回True

  2. True

  3. >>> any([0,0]) # 列表元素全部为False,则返回False

  4. False

  5. >>> any([]) # 空列表

  6. False

sorted():对可迭代对象进行排序,返回一个新的列表。例如:

  1. >>> a = ['a','b','d','c','B','A']

  2. >>> a

  3. ['a', 'b', 'd', 'c', 'B', 'A']

  4. >>> sorted(a) # 默认按字符ascii码排序

  5. ['A', 'B', 'a', 'b', 'c', 'd']

对象操作

help():返回对象的帮助信息;

dir():返回对象或者当前作用域内的属性列表。

交互操作

print():向标准输出对象打印输出;

input():读取用户输入值。

文件操作

open():使用指定的模式和编码打开文件,返回文件读写对象。例如:

  1. # t为文本读写,b为二进制读写

  2. >>> a = open('test.txt','rt')

  3. >>> a.read()

  4. some text

  5. >>> a.close()

编程要求

本关的编程任务是补全src/Step2/prime.py文件的代码,实现相应的功能。具体要求如下:

  • 定义一个函数,功能是判断一个数是否为素数;

  • 调用函数,对输入的整数进行判断。如果是素数则输出为True,否则输出为False

本关涉及的代码文件src/Step2/prime.py的代码框架如下:

  1. # coding=utf-8

  2. # 输入一个整数n

  3. n = int(input())

  4. # 请在此添加代码,对输入的整数进行判断,如果是素数则输出为True,否则输出为False

  5. ########## Begin ##########

  6. ########## End ##########

  7. print(prime(n))

测试说明

本关的测试文件是src/Step2/prime.py,测试过程如下:

  1. 平台自动编译生成prime.exe

  2. 平台运行prime.exe,并以标准输入方式提供测试输入;

  3. 平台获取prime.exe输出,并将其输出与预期输出对比。如果一致则测试通过,否则测试失败。

以下是平台对src/Step2/prime.py的样例测试集:


开始你的任务吧,祝你成功!

# coding=utf-8

# 输入一个整数n
n =  int(input())
# 请在此添加代码,对输入的整数进行判断,如果是素数则输出为True,不是素数则输出为False
########## Begin ##########
def prime(n):
    if(n==1):
        return False
    for i in range(2,n):   
        if(n%i==0):
            return False    
    return True
########## End ##########
print(prime(n))

第2关:函数正确调用 - 得到想要的结果

任务描述

函数被定义后,本身是不会自动执行的,只有在被调用后,函数才会被执行,得到相应的结果。本关的目标是让学习者了解并掌握函数调用的相关知识。

相关知识

定义函数与调用函数的顺序

在定义了函数之后,就可以调用该函数了。但是在 Python 中我们要注意一个关键点,就是Python不允许前向引用,即在函数定义之前,不允许调用该函数。例如:

  1. print plus(1,2)

  2. def plus(a,b):

  3. return a+b

运行结果为:

  1. NameError: name 'plus' is not defined

从报错结果可以看出,名字为plus的函数还没进行定义(虽然我们是在后面进行了定义)。所以当我们在调用函数时,一定要确定在调用之前进行了函数定义。

正确使用参数

我们要在调用函数时,需要正确调用函数的名称和参数,例如我们定义了一个加法函数:

  1. def plus(a,b):

  2. return a+b

我们在调用plus()函数时,如果传入的参数类型不对,会报TypeError错误。而且有时我们传入的参数类型不是规定类型的话,就算调用函数运行结果没有报错,也会产生逻辑错误。例如:

  1. # 定义plus函数,作用是求两个正整数之和

  2. def plus(a,b):

  3. return a+b

  4. # 调用plus函数,参数类型为'1','2'

  5. print(plus('1','2'))

输出结果:

  1. 12

虽然上述例子的程序运行结果没有报错,但是结果却与我们的预期不符,因为我们的本意是调用plus()函数实现两个整数的加法。但是如果我们传入的是字符串类型的数值时,结果就是两个字符串的拼接。所以这个例子告诉我们一定要注意传入参数的类型。

当我们传入正常类型的参数时,传入的参数个数不一致时,也会报TypeError错误。例如:

  1. # 定义plus函数,作用是求两个正整数之和

  2. def plus(a,b):

  3. return a+b

  4. # 调用plus函数,参数为1,2,3

  5. print(plus(1,2,3))

报错:

  1. TypeError: plus() takes 2 positional arguments but 3 were given

报错原因显示,因为plus()函数允许有且仅有2个参数,但是却在调用时传入了3个参数,所以程序报错。

小结

函数的调用十分重要,只有学会正确调用函数,才会得到正确的函数运行结果。

编程要求

本关的编程任务是补全src/Step2/func_call.py文件的代码,实现相应的功能。具体要求如下:

  • 定义一个函数,实现对输入的数值列表进行从小到大的顺序排序;

  • 输出排序后的数值列表。

本关涉及的代码文件src/Step2/func_call.py的代码框架如下:

  1. # coding=utf-8

  2. # 输入数字字符串,并转换为数值列表

  3. a = input()

  4. num1 = eval(a)

  5. numbers = list(num1)

  6. # 请在此添加代码,对数值列表numbers实现从小到大排序

  7. ########## Begin ##########

  8. ########## End ##########

测试说明

本关的测试文件是src/Step2/func_call.py,测试过程如下:

  1. 平台自动编译生成func_call.exe

  2. 平台运行func_call.exe,并以标准输入方式提供测试输入;

  3. 平台获取func_call.exe输出,并将其输出与预期输出对比。如果一致则测试通过,否则测试失败。

以下是平台对src/Step2/func_call.py的样例测试集:

测试输入:

  1. 103,47,21,34,11,2,5,88,13

预期输出:

  1. [2, 5, 11, 13, 21, 34, 47, 88, 103]

测试输入:

  1. 12,31,0,23,25,109,77,3

预期输出:

  1. [0, 3, 12, 23, 25, 31, 77, 109]

测试输入:

  1. 6,4,11,34,12,1,4

预期输出:

  1. [1, 4, 4, 6, 11, 12, 34]

测试输入:

  1. 5,4,3,2,1

预期输出:

  1. [1, 2, 3, 4, 5]


开始你的任务吧,祝你成功!

# coding=utf-8

# 输入数字字符串,并转换为数值列表
a = input()
num1 = eval(a)
numbers = list(num1)
# 请在此添加代码,对数值列表numbers实现从小到大排序
########## Begin ##########
numbers.sort()
print((numbers))
########## End ##########

第3关:函数与函数调用 - 分清主次

任务描述

我们一般将字符串、列表等变量作为参数进行函数调用。但函数本身也是一个对象,所以我们也可以将函数作为参数传入另外一个函数中并进行调用。 本关的目标是让学习者了解并掌握函数作为参数传入另外一个函数中并进行调用的相关知识。

相关知识

我们要学习函数与函数之间的调用,就应该对函数调用的顺序与参数有清晰的认识,我们将会从五种情况让读者了解并掌握函数与函数之间的调用的基本关系和联系。

第一种情况

程序代码如下:

  1. def x(f):

  2. def y():

  3. print(1)

  4. return y

  5. def f():

  6. print(2)

  7. x(f)

运行结果:

  1. 无结果

分析:因为第9行中的x(f)中的f没有带括号,f只是一个普通的参数,所以程序只调用执行了x(f)函数,没有调用执行f()函数。x(f)函数中虽然也定义了y()函数,但是x(f)函数中没有调用执行y()函数,只是执行了return y。而y变量也没有值,所以整个程序的返回值就为无结果。

第二种情况

程序代码如下:

  1. def x(f):

  2. def y():

  3. print(1)

  4. return y

  5. def f():

  6. print(2)

  7. x(f())

运行结果:

  1. 2

分析:因为第9行中的x(f())中的f()带括号,所以程序先调用执行f()函数,先输出2。然后2作为参数传入到x(f)函数中,程序开始调用执行x(f)函数。x(f)函数中虽然也定义了y()函数,但是x(f)函数中没有调用执行y()函数,只是执行了return y。而y变量也没有值,所以调用执行x(f)函数没有产生任何结果。因此该程序最终只输出了2

程序代码如下:

  1. def x(f):

  2. def y():

  3. print(1)

  4. return y()

  5. def f():

  6. print(2)

  7. x(f)

运行结果:

  1. 1

分析:因为第9行中的x(f)中的f没有带括号,f只是一个普通的参数,所以程序只调用执行了x(f)函数,没有调用执行f()函数。x(f)函数中也定义了y()函数,并且返回是y()函数。因此程序调用执行了y()函数,输出结果是1

第四种情况

程序代码如下:

  1. def x(f):

  2. def y():

  3. print(1)

  4. return y()

  5. def f():

  6. print(2)

  7. x(f())

运行结果:

  1. 2

  2. 1

分析:因为第9行中的x(f())中的f()带括号,所以程序调用执行了f()函数,先输出2。然后2作为参数传入到x(f)函数中,程序开始调用执行x(f)函数。x(f)函数中也定义了y()函数,并且返回是y()函数。因此程序也调用执行了y()函数,也输出了1。最终该程序先后输出了21

第五种情况

程序代码如下:

  1. def x(f):

  2. def y():

  3. print(1)

  4. print(f())

  5. return y()

  6. def f():

  7. #print(2)

  8. return 2

  9. x(f)

运行结果:

  1. 1

  2. 2

分析:因为第9行中的x(f)中的f没有带括号,f只是一个普通的参数,所以程序只是先调用执行了x(f)函数。在x(f)函数中也定义了y()函数,而且返回值是y()函数,所以程序会调用执行y()函数。在y()函数中先是执行print(1)语句,输出1,接着执行print(f())语句,所以程序在这时也会调用执行f()函数,输出2。最终该程序先后输出了12

小结

以上是对函数与函数之间调用的五种情况的探讨与分析。函数作为参数传入另外一个函数中并进行调用的情况有很多,我们需要时刻注意函数调用的相关要求与细节,才能正确使用函数。

编程要求

本关的编程任务是补全src/step3/func_ref.py文件的代码,实现相应的功能。具体要求如下:

  • 定义一个函数,要求实现圆的面积的计算;

  • 根据输入的不同整数值的半径,调用函数计算,并输出圆的面积,结果保留两位小数。

本关涉及的代码文件src/step3/func_ref.py的代码框架如下:

  1. # coding=utf-8

  2. from math import pi as PI

  3. n = int(input())

  4. # 请在此添加代码,实现圆的面积计算,并输出面积结果

  5. ########## Begin ##########

  6. ########## End ##########

测试说明

本关的测试文件是src/step3/func_ref.py,测试过程如下:

  1. 平台自动编译生成func_ref.exe

  2. 平台运行func_ref.exe,并以标准输入方式提供测试输入;

  3. 平台获取func_ref.exe输出,并将其输出与预期输出对比。如果一致则测试通过,否则测试失败。

以下是平台对src/step3/func_ref.py的样例测试集:


开始你的任务吧,祝你成功!

# coding=utf-8

from math import pi as PI
n = int(input())
# 请在此添加代码,实现圆的面积计算,并输出面积结果
########## Begin ##########
def cricle(n):
    return 3.1415926*n*n;
m=cricle(n)
print("%.2f"%m)
########## End ##########


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/YK3020936216/article/details/134934980

智能推荐

分布式光纤传感器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告_预计2026年中国分布式传感器市场规模有多大-程序员宅基地

文章浏览阅读3.2k次。本文研究全球与中国市场分布式光纤传感器的发展现状及未来发展趋势,分别从生产和消费的角度分析分布式光纤传感器的主要生产地区、主要消费地区以及主要的生产商。重点分析全球与中国市场的主要厂商产品特点、产品规格、不同规格产品的价格、产量、产值及全球和中国市场主要生产商的市场份额。主要生产商包括:FISO TechnologiesBrugg KabelSensor HighwayOmnisensAFL GlobalQinetiQ GroupLockheed MartinOSENSA Innovati_预计2026年中国分布式传感器市场规模有多大

07_08 常用组合逻辑电路结构——为IC设计的延时估计铺垫_基4布斯算法代码-程序员宅基地

文章浏览阅读1.1k次,点赞2次,收藏12次。常用组合逻辑电路结构——为IC设计的延时估计铺垫学习目的:估计模块间的delay,确保写的代码的timing 综合能给到多少HZ,以满足需求!_基4布斯算法代码

OpenAI Manager助手(基于SpringBoot和Vue)_chatgpt网页版-程序员宅基地

文章浏览阅读3.3k次,点赞3次,收藏5次。OpenAI Manager助手(基于SpringBoot和Vue)_chatgpt网页版

关于美国计算机奥赛USACO,你想知道的都在这_usaco可以多次提交吗-程序员宅基地

文章浏览阅读2.2k次。USACO自1992年举办,到目前为止已经举办了27届,目的是为了帮助美国信息学国家队选拔IOI的队员,目前逐渐发展为全球热门的线上赛事,成为美国大学申请条件下,含金量相当高的官方竞赛。USACO的比赛成绩可以助力计算机专业留学,越来越多的学生进入了康奈尔,麻省理工,普林斯顿,哈佛和耶鲁等大学,这些同学的共同点是他们都参加了美国计算机科学竞赛(USACO),并且取得过非常好的成绩。适合参赛人群USACO适合国内在读学生有意向申请美国大学的或者想锻炼自己编程能力的同学,高三学生也可以参加12月的第_usaco可以多次提交吗

MySQL存储过程和自定义函数_mysql自定义函数和存储过程-程序员宅基地

文章浏览阅读394次。1.1 存储程序1.2 创建存储过程1.3 创建自定义函数1.3.1 示例1.4 自定义函数和存储过程的区别1.5 变量的使用1.6 定义条件和处理程序1.6.1 定义条件1.6.1.1 示例1.6.2 定义处理程序1.6.2.1 示例1.7 光标的使用1.7.1 声明光标1.7.2 打开光标1.7.3 使用光标1.7.4 关闭光标1.8 流程控制的使用1.8.1 IF语句1.8.2 CASE语句1.8.3 LOOP语句1.8.4 LEAVE语句1.8.5 ITERATE语句1.8.6 REPEAT语句。_mysql自定义函数和存储过程

半导体基础知识与PN结_本征半导体电流为0-程序员宅基地

文章浏览阅读188次。半导体二极管——集成电路最小组成单元。_本征半导体电流为0

随便推点

【Unity3d Shader】水面和岩浆效果_unity 岩浆shader-程序员宅基地

文章浏览阅读2.8k次,点赞3次,收藏18次。游戏水面特效实现方式太多。咱们这边介绍的是一最简单的UV动画(无顶点位移),整个mesh由4个顶点构成。实现了水面效果(左图),不动代码稍微修改下参数和贴图可以实现岩浆效果(右图)。有要思路是1,uv按时间去做正弦波移动2,在1的基础上加个凹凸图混合uv3,在1、2的基础上加个水流方向4,加上对雾效的支持,如没必要请自行删除雾效代码(把包含fog的几行代码删除)S..._unity 岩浆shader

广义线性模型——Logistic回归模型(1)_广义线性回归模型-程序员宅基地

文章浏览阅读5k次。广义线性模型是线性模型的扩展,它通过连接函数建立响应变量的数学期望值与线性组合的预测变量之间的关系。广义线性模型拟合的形式为:其中g(μY)是条件均值的函数(称为连接函数)。另外,你可放松Y为正态分布的假设,改为Y 服从指数分布族中的一种分布即可。设定好连接函数和概率分布后,便可以通过最大似然估计的多次迭代推导出各参数值。在大部分情况下,线性模型就可以通过一系列连续型或类别型预测变量来预测正态分布的响应变量的工作。但是,有时候我们要进行非正态因变量的分析,例如:(1)类别型.._广义线性回归模型

HTML+CSS大作业 环境网页设计与实现(垃圾分类) web前端开发技术 web课程设计 网页规划与设计_垃圾分类网页设计目标怎么写-程序员宅基地

文章浏览阅读69次。环境保护、 保护地球、 校园环保、垃圾分类、绿色家园、等网站的设计与制作。 总结了一些学生网页制作的经验:一般的网页需要融入以下知识点:div+css布局、浮动、定位、高级css、表格、表单及验证、js轮播图、音频 视频 Flash的应用、ul li、下拉导航栏、鼠标划过效果等知识点,网页的风格主题也很全面:如爱好、风景、校园、美食、动漫、游戏、咖啡、音乐、家乡、电影、名人、商城以及个人主页等主题,学生、新手可参考下方页面的布局和设计和HTML源码(有用点赞△) 一套A+的网_垃圾分类网页设计目标怎么写

C# .Net 发布后,把dll全部放在一个文件夹中,让软件目录更整洁_.net dll 全局目录-程序员宅基地

文章浏览阅读614次,点赞7次,收藏11次。之前找到一个修改 exe 中 DLL地址 的方法, 不太好使,虽然能正确启动, 但无法改变 exe 的工作目录,这就影响了.Net 中很多获取 exe 执行目录来拼接的地址 ( 相对路径 ),比如 wwwroot 和 代码中相对目录还有一些复制到目录的普通文件 等等,它们的地址都会指向原来 exe 的目录, 而不是自定义的 “lib” 目录,根本原因就是没有修改 exe 的工作目录这次来搞一个启动程序,把 .net 的所有东西都放在一个文件夹,在文件夹同级的目录制作一个 exe._.net dll 全局目录

BRIEF特征点描述算法_breif description calculation 特征点-程序员宅基地

文章浏览阅读1.5k次。本文为转载,原博客地址:http://blog.csdn.net/hujingshuang/article/details/46910259简介 BRIEF是2010年的一篇名为《BRIEF:Binary Robust Independent Elementary Features》的文章中提出,BRIEF是对已检测到的特征点进行描述,它是一种二进制编码的描述子,摈弃了利用区域灰度..._breif description calculation 特征点

房屋租赁管理系统的设计和实现,SpringBoot计算机毕业设计论文_基于spring boot的房屋租赁系统论文-程序员宅基地

文章浏览阅读4.1k次,点赞21次,收藏79次。本文是《基于SpringBoot的房屋租赁管理系统》的配套原创说明文档,可以给应届毕业生提供格式撰写参考,也可以给开发类似系统的朋友们提供功能业务设计思路。_基于spring boot的房屋租赁系统论文