Python程序开发基础 课件 项目6 搭建自己的模块_第1页
Python程序开发基础 课件 项目6 搭建自己的模块_第2页
Python程序开发基础 课件 项目6 搭建自己的模块_第3页
Python程序开发基础 课件 项目6 搭建自己的模块_第4页
Python程序开发基础 课件 项目6 搭建自己的模块_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目6

搭建自己的模块项目内容模拟计算器获取兔子数列0102项目目标知识目标熟悉函数的定义和调用熟悉函数参数的传递方式熟悉特殊函数的分类和应用了解常用的内置函数会定义并调用函数会利用函数解决代码复用问题会利用匿名函数和递归函数解决实际问题技能目标

模拟计算器01

众所周知,随着程序功能的提升,程序开发的难度在不断升级,程序的复杂度也变得越来越高,如果依旧按照以前的方法编写代码,那么程序代码的可读性和后期的维护管理会给开发人员带来更多的困扰。

为了解决以上问题,提高代码的复用性,更好地组织代码逻辑和结构,我们引入了“函数”,即“模块”。

对于函数,先要清楚什么是函数?如何定义和调用函数?弄清楚这些我们就可以求解问题,完成任务。函数的概念

函数指被封装起来的、实现某种功能的一段代码。Python安装包、标准库中自带的函数统称为内置函数,用户自己编写的函数称为自定义函数,不管是哪种函数,其调用方式是一样的。

就像一个人站在装满镜子的房间中,看到的影像就是递归的结果。递归只需少量代码就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。函数的定义Python中使用关键字def定义函数。def函数名([参数列表]):["函数文档字符串"]

函数体[return语句]接收传入函数中的数据,可省略函数的说明信息,可省略将结果返回给函数调用者若函数的参数列表为空,这个函数称为无参函数。函数定义之时可以设置参数列表,以实现更灵活的功能。defweather():print("*"*13)print("日期:10月7日")print("温度:14~28℃")print("空气状况:良")print("*"*13)defmodify_weather(today,temp,air_quality):print("*"*13)print(f"日期:{today}")print(f"温度:{temp}")print(f"空气状况:{air_quality}")print("*"*13)定义好的函数直到被程序调用时才会执行。函数的调用格式如下:函数名([参数列表])例如,调用weather()函数。weather()*************日期:10月7日温度:14~28℃空气状况:良*************调用modify_weather函数。modify_weather(‘10月6日','15~26℃','优')*************日期:10月6日温度:15~26℃空气状况:优*************

实例1:定义一个函数,用于判断输入的年份是否是闰年,具体要求如下:(1)输出提示信息:请输入一个年份。(2)输出判断结果:若是闰年,则输出“是闰年”,否则输出“不是闰年”。defis_leapyear():year=int(input("请输入一个年份:"))if(year%4==0andyear%100!=0)oryear%400==0:print("是闰年")else:print("不是闰年")is_leapyear()

根据题意,利用函数的定义格式定义一个无参函数,将输入的年份放在函数体内,其程序如下:defis_leapyear(year):if(year%4==0andyear%100!=0)oryear%400==0:print("是闰年")else:print("不是闰年")year=int(input('请输入一个年份:'))is_leapyear(year)如果将输入的年份作为函数的参数,则可以定义一个有参函数,其代码如下:

函数的参数传递是指将实际参数传递给形式参数的过程。当调用带有参数的函数时需要传入参数,这个传入的参数称为实际参数。而在定义有参函数时,函数名后面的参数则被称为形式参数。

根据参数传递形式的不同,函数的参数可分为:

位置参数关键字参数默认值参数不定长参数函数参数的传递位置参数的传递调用函数时,解释器会将函数的实际参数按照位置顺序依次传递给形式参数。defdivision(num_one,num_two):print(num_one/num_two)division(6,2)关键字参数的传递关键字参数是通过“形式参数=实际参数”的格式将实际参数与形式参数相关联,根据形参的名称进行参数传递。definfo(name,age,address):print(f'姓名:{name}')print(f'年龄:{age}')print(f'地址:{address}')info(name=“李婷婷”,age=21,address=“北京")默认参数传递定义函数时若指定形式参数的默认值。调用函数时,若未给默认参数传值:使用参数的默认值;若给默认参数传值:使用实际参数的值;defconnect(ip,port=3306):print(f"连接地址为:{ip}")print(f"连接端口号为:{port}")print("连接成功")connect('127.0.0.1')connect(ip='127.0.0.1',port=8080)

实例2:编写函数,计算20×19×18×……×3的结果。defprot(m,n=3):pro=1foriinrange(m,n-1,-1):pro*=ireturnproprint(prot(m=20))不定长参数的传递如果传入函数中的参数的个数不确定,可以使用不定长参数。不定长参数也称可变参数,此种参数接收参数的数量可以任意改变。定义格式:def函数名([formal_args,]*args,**kwargs):

函数体[return语句]*args和**kwargs都是不定长参数,它们可搭配使用,亦可单独使用。不定长参数*args用于接收不定数量的位置参数,调用函数时传入的所有参数被*args接收后以元组形式保存。deftest(*args):

print(args)test(1,2,3,'a','b','c')(1,2,3,'a','b','c')**kwargs用于接收不定数量的关键字参数,调用函数时传入的所有参数被**kwargs接收后以字典形式保存。deftest(**kwargs):print(kwargs)test(a=1,b=2,c=3,d=4){'c':3,'d':4,'a':1,'b':2}

实例3:给定一组成绩,求平均成绩。defaverage(*a):

sum,n=0foriina:

sum+=i

n=n+1

ave=sum/nreturnaveprint(average(98,93,97,88,79,90))函数的返回值

如果函数体经过处理以后有计算结果,除了直接利用print()函数输出,还可以在函数体中通过return语句返回主调函数。因此,函数中的return语句可以在函数结束时将数据返回程序,同时让程序回到函数被调用的位置继续执行。deffilter_words(words):#定义过滤敏感词的函数 if'躺平'inwords: new_words=words.replace('躺平','***')

returnnew_words>>>result=filter_words('目前情况我们不能躺平!')>>>print(result)目前情况我们不能***!

当return语句返回一个值时,会被保存在变量中,当return语句返回多个值时,这些值会被保存在元组中。变量的作用域变量的作用域是指变量的作用范围。根据作用范围,Python中的变量分为局部变量与全局变量。局部变量局部变量是在函数内定义的变量,只在定义它的函数内生效。局部变量只能在函数内部使用,不能在函数外部使用。defuse_var():

name='python'#局部变量print(name)#函数内访问use_var()print(name)#函数外访问pythonNameError:name'name'isnotdefined全局变量全局变量是在函数外定义的变量,它在程序中任何位置都可以被访问。函数中只能访问全局变量,但不能修改全局变量。count=10#全局变量defuse_var():print(count)#函数内访问count=0#修改全局变量use_var()print(count)#函数外访问

1010若要在函数内部修改全局变量的值,需先在函数内使用关键字“global”进行声明。count=10defuse_var():

globalcount#声明全局变量count=0use_var()print(count)0全局变量的值变为0。实例4:冰雹猜想。冰雹猜想是一种数学现象,它的具体内容是以一个正整数n为例,如果n为偶数,就将它变为n/2,若n/2为奇数,则将它乘以3加1,即3n/2+1。不断重复这样的运算,经过有限步后,必然会得到1。根据数学家们的攻关研究表明,所有小于7×1011的自然数都符合这个规律。本实例要求编写代码,计算用户输入的数据按照以上规律经过多少次运算后可以变成1。#冰雹猜想defguess(number):i=0 #统计变换的次数original_number=number #记录最初的numberwhilenumber!=1:ifnumber%2==0: #number为偶数number=number/2else: #number为奇数number=number*3+1i+=1print(f"{original_number}经过{i}次变换后回到1")num=int(input("请输入一个大于1的正整数:"))guess(num)任务实践-模拟计算器

计算器极大地提高了人们进行数字计算的效率与准确性,平时的简单计算都离不开计算器。计算器最基本的功能是四则运算。本任务要求编写程序,利用函数实现计算器的四则运算功能。

任务实践-模拟计算器

根据题意,计算器的四则运算功能是指加、减、乘、除,它可实现计算两个数的和、差、积、商。因此,定义一个包含两个参数的函数,分别接收用户输入的任意两个数,而函数主要用来实现这两个数的加、减、乘、除4项运算,具体执行哪种运算需用户输入相应的运算符,然后根据运算符来计算结果即可。代码如下:#模拟计算器defoper(x,y):operator=input('请选择要执行的运算:+、-、*、/'+'\n')ifoperator=="+":print("计算结果为:",x+y)elifoperator=='-':print("计算结果为:",x-y)elifoperator=='*':print("计算结果为:",x*y)elifoperator=='/':ify==0:print('被除数不能为0')else:print("计算结果为:",x/y)a=int(input('请输入第一个数:'))b=int(input('请输入第二个数:'))oper(a,b)根据函数定义和调用方法,程序如下:获取兔子序列02函数的特殊形式

在Python中,除了前面介绍的标准函数和自定义函数,还提供了两个具有特殊形式的函数,即匿名函数和递归函数。匿名函数匿名函数是无需函数名标识的函数,它的函数体只能是单个表达式。Python中使用关键字lambda定义匿名函数。函数名=lambda<参数列表>:<表达式>匿名函数并非没有名字,而是将函数名作为函数结果返回。等价于:def函数名(<参数列表>):return<表达式>匿名函数与普通函数主要有以下不同:普通函数匿名函数需要使用函数名进行标识无需使用函数名进行标识函数体中可以有多条语句函数体只能是一个表达式可以实现比较复杂的功能只能实现比较单一的功能可以被其它程序使用不能被其它程序使用area=lambdaa,h:(a*h)*0.5(直角三角形面积)print(area(3,4))6.0递归函数

递归是一个函数过程在定义中直接调用自身的一种方法,它通常把一个大型的复杂问题层层转化为一个与原问题相似,但规模较小的问题进行求解。如果一个函数中调用了函数本身,这个函数就是递归函数。递归函数只需少量代码就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。函数递归调用时,需要确定两点:一是递归公式,二是边界条件。递归公式是递归求解过程中的归纳项,用于处理原问题以及与原问题规律相同的子问题。边界条件即终止条件,用于终止递归。递归函数的定义格式:def函数名([参数列表]):if边界条件:return结果else:return递归公式

调用递归函数时,也需要确定两点,一是递归公式,二是边界条件。递归公式是递归求解过程中的归纳项,用于处理原问题及与原问题规律相同的子问题。边界条件即终止条件,用于终止递归。实例5:deffactorial(n):ifn==1orn==0:return1else:returnn*factorial(n-1)n=int(input(“n=“))print(factorial(n))

常用内置函数Python内置了一些实现特定功能的函数,这些函数无需由Python使用者重新定义便可直接使用。函数说明abs()计算绝对值,其参数必须是数字类型len()返回序列对象(字符串、列表、元组等)的长度map()根据提供的函数对指定的序列做映射help()用于查看函数或模块的使用说明ord()用于返回Unicode字符对应的码值chr()与ord()功能相反,用于返回码值对应的Unicode字符filter()用于过滤序列,返回由符合条件的元素组成的新序列abs()函数abs()函数用于计算绝对值,其参数必须是数字类型。如果参数是一个复数,那么abs()函数返回的绝对值是此复数与它的共轭复数乘积的平方根。print(abs(-5))print(abs(8+3j))ord()函数ord()函数用于返回字符在Unicode编码表中对应的码值,其参数是一个

字符。print(ord('a'))prin

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论