《python程序设计(AI赋能版)》课件-项目五 函数构建模拟空间站管理系统_第1页
《python程序设计(AI赋能版)》课件-项目五 函数构建模拟空间站管理系统_第2页
《python程序设计(AI赋能版)》课件-项目五 函数构建模拟空间站管理系统_第3页
《python程序设计(AI赋能版)》课件-项目五 函数构建模拟空间站管理系统_第4页
《python程序设计(AI赋能版)》课件-项目五 函数构建模拟空间站管理系统_第5页
已阅读5页,还剩74页未读, 继续免费阅读

下载本文档

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

文档简介

项目五:利用Python函数构建模拟空间站管理系统知识目标|knowledge熟练掌握函数定义的语法结构理解位置参数、关键字参数、默认值参数、不定长参数和打包解包参数理解掌握匿名函数的应用理解递归函数的基本原理,能够用递归函数解决问题清楚区分局部变量和全局变量的作用域掌握模块的定义和作用,掌握如何创建和使用模块能力目标|Ability能够独立设计和编写功能完整、逻辑清晰的函数,解决实际问题灵活运用不同类型的参数,合理设置参数,提高函数的通用性和灵活性运用函数的知识和技巧,分析和解决各种问题能够合理组织和管理自定义模块,将函数和数据封装在模块中,便于代码的复用和维护学会从已有的代码中提取可复用的函数,合理复用,提高开发效率和代码质量素养目标|Literacy贯彻“加快实现高水平科技自立自强”战略,提升科技创新与自主可控意识践行“坚持系统观念”方法论,强化系统观念与模块化思维响应“加快建设航天强国”号召,厚植航天强国与家国情怀践行协同合作与工程伦理,培养责任分工意识,理解个人贡献与集体目标的关系知识学习

函数在Python编程中起着至关重要的作用,它是构建复杂程序的基石。通过将复杂的任务分解成一个个小的函数,程序的结构更加清晰,便于理解、维护和扩展。就像空间站的组装思想,把庞大的设施拆分成多个独立舱,每个舱段专注于特定功能,最终组合成一个强大的整体。函数概念6.1

先定一个小目标!了解函数,能够简述函数的概念以及程序中使用函数的好处6.1函数概念函数(Function)是组织代码的一种方式,它允许我们将一组相关的代码块封装在一起,以便在程序中多次调用,减少代码冗余,提高可读性和可维护性。6.1函数概述(1)内置函数(Built-inFunctions)表5-1常见内置函数汇总函数名功能示例abs()返回一个数的绝对值abs(-5)返回5divmod()同时返回商和余数,接收两个数值类型的参数,返回一个包含商和余数的元组divmod(10,3)返回(3,1)max()返回可迭代对象中的最大值,或多个参数中的最大值max([1,3,2])返回3;max(1,3,2)也返回3min()返回可迭代对象中的最小值,或多个参数中的最小值min([1,3,2])返回1;min(1,3,2)也返回1pow()计算幂次方,接收两个或三个参数,两个参数时计算x**y,三个参数时计算(x**y)%zpow(2,3)返回8;pow(2,3,3)返回2round()对数字进行四舍五入,可指定保留的小数位数round(3.14159,2)返回3.14sum()对可迭代对象中的元素求和sum([1,2,3])返回6bool()将给定参数转换为布尔类型,根据参数的真假性返回True或Falsebool(0)返回False;bool(1)返回Trueint()将给定参数转换为整数类型,可指定进制int('10',2)返回2;int(3.14)返回3float()将给定参数转换为浮点数类型float('3.14')返回3.14str()将给定参数转换为字符串类型str(123)返回'123'函数名功能示例list()将给定参数转换为列表类型list((1,2,3))返回[1,2,3]tuple()将给定参数转换为元组类型tuple([1,2,3])返回(1,2,3)set()将给定参数转换为集合类型,集合中的元素具有唯一性set([1,2,2,3])返回{1,2,3}dict()创建一个字典,可通过多种方式初始化dict(a=1,b=2)返回{'a':1,'b':2}len()返回对象的长度或元素个数,可用于字符串、列表、元组、集合、字典等len([1,2,3])返回3;len('hello')返回5sorted()对可迭代对象进行排序,返回一个新的列表,原对象不变sorted([3,1,2])返回[1,2,3]reversed()返回一个反向迭代器,用于反向遍历可迭代对象list(reversed([1,2,3]))返回[3,2,1]enumerate()用于将一个可迭代对象组合为一个索引序列,同时列出数据和数据下标,一般用在for循环当中list(enumerate(['a','b','c']))返回[(0,'a'),(1,'b'),(2,'c')]zip()用于将多个可迭代对象的对应元素打包成一个个元组,然后返回由这些元组组成的对象list(zip([1,2,3],['a','b','c']))返回[(1,'a'),(2,'b'),(3,'c')]input()从标准输入读取一行文本,返回一个字符串name=input("请输入你的名字:")将输入内容赋值给nameprint()用于将对象打印输出到标准输出,可接受多个参数,用逗号分隔print('Hello','World')输出HelloWorld用户自定义函数6.2(1)用户自定义函数(User-definedFunctions):deffunction_name(parameters):["""文档字符串"""]function_body[return[expression]]定义函数的开始参数列表:接收传入函数中的数据函数名:函数的唯一标识说明函数功能的注释函数功能的具体代码返回值:标志函数的结束函数定义注意事项:①

即使函数名后面的参数是0个,也必须保留一对括号,且括号后面的冒号不能省略。②

文档字符串儿是用来告诉调用者这个函数的功能,可有可无。③

编写函数体时,函数体与def关键字之间需要进行缩进。④

return语句可以在函数体的任何位置出现,return语句是可选的。如果有return语句,但是return后面没有接表达式或值的,则返回None,如果没有return语句,则自动返回None。返回值单个值可以赋值给变量,多个值保存为一个元组。案例5-1

defcalculate_orbit_circumference(radius):"""

计算天宫空间站轨道的周长

:paramradius:轨道半径

:return:轨道周长

"""

pi=3.1415926circumference=2*pi*radiusreturncircumference(2)函数的调用:function_name(parameters):参数列表:接收传入函数中的数据函数名:函数的唯一标识

函数定义完成后,可以通过调用该函数执行函数代码实现其功能,也可以将函数作为一个值赋给指定的变量。案例5-2defcalculate_orbit_circumference(radius):"""

计算天宫空间站轨道的周长

:paramradius:轨道半径

:return:轨道周长

"""

pi=3.1415926circumference=2*pi*radiusreturncircumference

orbit_radius=6771#轨道半径

单位:千米#调用函数并复制给变量circumference=calculate_orbit_circumference(orbit_radius)print(f"天宫空间站轨道周长约为{circumference:.2f}千米")(3)函数的参数:在Python中,函数参数是函数定义时用于接收外部传入数据的占位符,在调用函数时可以将实际的数据传递给这些参数,从而让函数能够处理不同的数据。根据参数的作用分为形参和实参两种:形参(形式参数):在函数定义时,括号内指定的参数名称,用于接收调用函数时传递的数据。例如,在calculate_orbit_circumference(radius)函数中,radius就是形参。实参(实际参数):在调用函数时,传递给函数的具体数据。例如,在调用calculate_orbit_circumference(radius)函数时,orbit_radius就是实参。在函数调用的过程中,根据将实参传递给形参的参数传递过程分为位置参数传递、关键字参数传递、默认值参数传递,不定长参数及混合传递几类。

先定一个小目标!

位置参数的传递掌握位置参数传递,能够通过位置参数传递参数当调用函数传递位置参数时,实参会按照位置顺序依次传递给对应的形参。也就是说,第1个实参会传递给第1个形参,第2个实参会传递给第2个形参,以此类推。注意,实参的数量和位置必须与函数定义中位置参数的数量和位置保持一致,否则会导致解释器运行时出现异常信息,或者错误的参数匹配。defadd_numbers(a,b):returna+bresult=add_numbers(3,5)print(result)#输出8

定义一个求两个数之和的函数add_numbers(a,b),调用add_numbers(a,b)函数,通过位置参数的方式传递实参,示例代码如下:第一个实参3传递给第一个形参a,第二个实参5传递给第二个形参b。案例5-4

defcalculate_orbit_speed(radius,time):"""

计算天宫空间站的轨道速度

:paramradius:轨道半径(千米)

:paramtime:轨道周期(小时)

:return:轨道速度(千米/小时)

"""importmathcircumference=2*math.pi*radiusspeed=circumference/timereturnspeed

#调用函数,使用位置参数radius=6771#轨道半径time=1.5#轨道周期speed=calculate_orbit_speed(radius,time)print(f"天宫空间站的轨道速度约为{speed:.2f}千米/小时")

先定一个小目标!关键字参数的传递掌握关键字参数传递,能够通过关键字参数传递参数当函数有较多参数时,记住每个参数的位置和含义可能会很困难,因此按照位置参数的方式传参并不是一个好的选择。此时,可以使用关键字参数的方式传参。关键字参数的传递通过使用“形参=实参”的格式将实参与对应的形参关联起来,根据具体的参数名传递参数,从而避免记忆参数位置的困扰。defdescribe_person(name,age,city):print(f"{name}is{age}yearsoldandlivesin{city}.")describe_person(age=25,name="Alice",city="NewYork")

关键字参数允许在调用函数时,通过参数名来指定传递的参数,而不必按照形参的顺序传递。这样可以提高代码的可读性,尤其是当函数有多个参数时,例如:执行后会将"25"传递给关联的形参age;将"Alice"传递给关联的形参name;将"NewYork"传递给关联的形参city。案例5-5#使用关键字参数调用calculate_orbit_speed函数speed=calculate_orbit_speed(time=1.5,radius=6771)print(f"天宫空间站的轨道速度约为{speed:.2f}千米/小时")运行代码,结果如下:天宫空间站的轨道速度约为28362.30千米/小时

先定一个小目标!默认参数的传递掌握默认参数传递,能够通过默认参数传递参数定义函数时可以指定形参的默认值,调用函数时可以选择是否给带有默认值的形参传值。若没有给带有默认值的形参传值,直接使用参数的默认值;若给带有默认值的形参传值,则使用实参的值覆盖默认值。defgreet(name="Guest"):print(f"Hello,{name}!")greet()#输出"Hello,Guest!"greet("Alice")#输出"Hello,Alice!")定义一个显示名字的函数,在该函数中给一个参数指定默认值,另一个参数不指定默认值,示例代码如下:调用两次greet()函数,分别使用默认值和不使用默认值,示例代码如下:greet()#输出"Hello,Guest!"greet("Alice")#输出"Hello,Alice!")案例5-6defcalculate_fuel_consumption(distance,speed,fuel_rate=0.1):"""

计算航天器飞行的燃料消耗

:paramdistance:飞行距离(千米)

:paramspeed:飞行速度(千米/小时)

:paramfuel_rate:燃料消耗率(升/千米),默认值为0.1:return:燃料消耗(升)

"""consumption=distance*fuel_ratereturnconsumption

#调用函数,使用默认值参数distance=1000#飞行距离speed=28000#飞行速度consumption=calculate_fuel_consumption(distance,speed)print(f"飞行{distance}千米的燃料消耗约为{consumption}升")

#调用函数,指定燃料消耗率consumption=calculate_fuel_consumption(distance,speed,fuel_rate=0.15)print(f"飞行{distance}千米,燃料消耗率为0.15时的燃料消耗约为{consumption}升")

先定一个小目标!参数的打包与解包学习参数的打包与解包,能够实现多个参数和可迭代对象之间的转换Python中参数的打包是指将多个实参打包成一个元组或字典,在函数调用时作为一个整体传递给形参。如果形参的前面加上“*”,那么它可以接收以元组形式打包的多个值;如果形参的前面加上“**”,那么它可以接收以字典形式打包的多个值。参数*args参数**kwargs#可变位置参数示例defsum_numbers(*args):returnsum(args)result=sum_numbers(1,2,3,4)print(result)#输出10定义一个形参为*args的函数。#可变关键字参数示例defprint_info(**kwargs):forkey,valueinkwargs.items():print(f"{key}:{value}")print_info(name="Alice",age=25,city="NewYork")定义一个形参为**kwargs的函数。值得一提的是,虽然函数中添加“*”或“**”的形参可以是符合命名规范的任意名称,但这里建议使用*args和**kwargs。若函数没有接收到任何数据,参数*args和**kwargs为空,即它们为空元组或空字典。6.3.4参数的打包与解包Python中参数的解包是指使用特殊语法将元组或字典拆分为多个值并赋值给对应的形参。如果函数在调用时接收的实参是元组类型的数据,那么可以使用“*”将元组拆分成多个值,并按照位置参数传递的方式赋值给形参;如果函数在调用时接收的实参是字典类型的数据,那么可以使用“**”将字典拆分成多个键值对,并按照关键字参数传递的方式赋值给与键名称对应的形参。6.3.4参数的打包与解包使用“*”对列表执行解包使用“**”对该字典执行解包#可迭代对象参数解包defcalculate_total(*numbers):returnsum(numbers)numbers_list=[1,2,3,4]total=calculate_total(*numbers_list)print(total)defdescribe_person(name,age):print(f"{name}is{age}yearsold.")person_info={'name':'Bob','age':30}describe_person(**person_info)案例5-7defcalculate_total_mass(*masses):"""

计算多个物体的总质量

:parammasses:物体的质量(千克)

:return:总质量(千克)

"""total=sum(masses)returntotal

#调用函数,传递多个质量值mass1=1000mass2=2000mass3=3000total=calculate_total_mass(mass1,mass2,mass3)print(f"总质量为{total}千克")案例5-8defprint_space_station_info(**info):"""

打印天宫空间站的信息

:paraminfo:空间站的信息,键值对形式

"""forkey,valueininfo.items():print(f"{key}:{value}")

#调用函数,传递关键字参数print_space_station_info(name="天宫空间站",modules=["天和核心舱","问天实验舱","梦天实验舱"])混合传递函数参数的传递方式按优先级从高到低依次为位置参数传递、关键字参数传递、默认参数传递、打包传递。在定义函数时,带有默认值的参数必须位于普通参数(不带默认值或星号标识的参数)之后,带有“*”标识的参数必须位于带有默认值的参数之后,带有“**”标识的参数必须位于带有“*”标识的参数之后。混合传递注意事项:参数的定义顺序必须遵循特定规则:位置参数>默认值参数>

*args

>

**kwargs。否则Python解释器会抛出语法错误。在函数调用时,同一个参数不能既作为位置参数又作为关键字参数传递,否则会导致

TypeError。默认值参数应该在位置参数之后定义。并且默认值参数的默认值在函数定义时就已经确定*args

之后的参数必须使用关键字参数传递。**kwargs不能有重复的关键字参数,否则会抛出

TypeError。虽然混合使用各种参数类型可以让函数更加灵活,但过度使用可能会降低代码的可读性。在实际开发中,应该根据具体情况合理选择参数类型,尽量让函数的调用和定义清晰易懂。如果函数的参数过于复杂,可以考虑将其拆分成多个小函数,或者使用类来封装相关的操作。匿名函数6.3

先定一个小目标!匿名函数匿名函数也称为Lambda函数,是一种简洁的函数定义方式,通常用于定义简单的、一次性使用的函数。基本语法add=lambdax,y:x+yresult=add(3,5)print(f"3和5的和为{result}")语法lambdaarguments:expressionarguments是函数的参数,expression是函数的返回值表达式。例如,计算两个数之和的匿名函数:案例5-9power=5#设备功率(千瓦)time=3#运行时间(小时)energy_multiplier=2#能耗倍数calculate_energy=lambdap,t,m:p*t*menergy=calculate_energy(power,time,energy_multiplier)print(f"设备在{time}小时内,考虑{energy_multiplier}倍能耗的总量为{energy}千瓦时")变量作用域6.4

先定一个小目标!局部变量掌握局部变量,能够在程序中使用局部变量

局部变量是指在函数内部定义的变量,它的作用域仅限于函数内部,只能在函数内部进行访问或使用。一旦函数执行结束,局部变量将无法再被访问或使用。例如,test_function()函数中定义一个局部变量local_variable,分别在该函数内和函数外访问局部变量local_variable,代码如下:deftest_function():#定义局部变量local_variable=10print("在函数内部访问局部变量:",local_variable)test_function()#程序调用test_function()函数后成功访问并输出了局部变量local_variable的值

print(local_variable)

#尝试在函数外部访问局部变量,会引发NameError案例5-10defcalculate_water_usage():water_per_person=3#每人每天用水量(升)

person_count=3total_water=water_per_person*person_countprint(f"天宫空间站每天的总用水量为{total_water}升")

#尝试访问局部变量会报错#print(water_per_person)

#调用函数calculate_water_usage()

先定一个小目标!全局变量掌握全局变量,能够在程序中使用全局变量

全局变量是在函数外部定义的变量,它的作用域是整个程序。全局变量可以在程序的任何地方被访问和使用,但在函数内部默认情况下只能访问全局变量,不能直接修改它。例如,global_variable是一个全局变量,分别在该函数内和函数外访问该变量,代码如下:#定义全局变量global_variable=20defanother_function():print("在函数内部访问全局变量:",global_variable)another_function()print("在函数外部访问全局变量:",global_variable)

函数内容均可访问。在函数内部访问全局变量:20在函数外部访问全局变量:20案例5-11total_supply=1000#总物资储备量(千克)

defconsume_supply(amount):globaltotal_supplytotal_supply-=amountprint(f"消耗{amount}千克物资后,剩余物资{total_supply}千克")

#调用函数consume_supply(200)

先定一个小目标!global

和

nonlocal

关键字掌握和使用global

和

nonlocal

关键字

当需要在函数内部修改全局变量的值时,就需要使用

global

关键字。global关键字用于在函数内部声明一个变量为全局变量,这样在函数内部就可以对全局变量进行修改,而不是创建一个新的局部变量。#定义全局变量global_variable=10defmodify_global():#使用global关键字声明要修改的全局变量globalglobal_variable#修改全局变量的值global_variable=20print("函数内部修改后的全局变量值:",global_variable)#调用函数modify_global()print("函数外部的全局变量值:",global_variable)加上global关键字,运行结果如下:函数内部修改后的全局变量值:20函数外部的全局变量值:20如果注释掉global关键字,运行结果如下:函数内部修改后的全局变量值:20函数外部的全局变量值:10案例5-12#定义全局变量,表示空间站的总能源量(单位:焦耳)total_supply=1000

defconsume_supply(amount):"""

此函数用于消耗空间站的能源

:paramamount:要消耗的能源量

"""#使用global关键字声明要修改的全局变量

globaltotal_supplyiftotal_supply>=amount:#消耗能源

total_supply-=amountprint(f"成功消耗{amount}焦耳能源,剩余能源:{total_supply}

焦耳")else:print("能源不足,无法消耗!")

#调用函数消耗能源consume_supply(200)print("当前全局记录的总能源量:",total_supply)

当在嵌套函数中需要修改外层函数的局部变量时,就可以使用

nonlocal

关键字。nonlocal

关键字用于在嵌套函数内部引用并修改其外层(非全局)函数的局部变量。这种内层函数引用了外层函数的局部变量,并且外层函数将内层函数作为返回值返回的现象在python中被称为闭包。闭包是指在一个嵌套函数中,闭包可以保留外层函数的状态,常用于实现数据封装和延迟计算。defouter_function():#外层函数的局部变量outer_variable=10definner_function():#使用nonlocal关键字声明要修改的外层函数的局部变量nonlocalouter_variable#修改外层函数的局部变量的值outer_variable=20print("内层函数内部修改后的外层变量值:",outer_variable)#调用内层函数inner_function()print("外层函数中的变量值:",outer_variable)#调用外层函数outer_function()运行代码,结果如下:内层函数内部修改后的外层变量值:20外层函数中的变量值:20注意事项nonlocal关键字只能用于嵌套函数中,用于引用外层函数的局部变量,不能用于引用全局变量。案例5-13defcabin_environment():#外层函数的局部变量,表示舱室当前温度(单位:摄氏度)

current_temperature=22

defadjust_temperature(change):"""

此函数用于调节舱室温度

:paramchange:温度的变化量

"""#使用nonlocal关键字声明要修改的外层函数的局部变量

nonlocalcurrent_temperature#调节温度

current_temperature+=changeprint(f"温度已调节,当前舱室温度:{current_temperature}摄氏度")

#调用内层函数调节温度

adjust_temperature(3)print("外层函数中记录的当前舱室温度:",current_temperature)

#调用外层函数cabin_environment()递归函数6.5

先定一个小目标!掌握递归函数的使用,能够运用递归函数解决重复子结构的问题递归函数6.7.1递归函数函数在定义时可以直接或间接地调用其他函数。若函数内部调用了自身,则这个函数被称为递归函数。递归函数通常用于解决结构相似的问题,它采用递归的方式,将一个复杂的大型问题转化为与原问题结构相似的、规模较小的若干子问题,之后对最小化的子问题求解,从而得到原问题的解。递归函数的执行可以分为以下两个阶段:(1)递推:递归的执行基于上一次的运算结果,将问题规模逐渐缩小,通过不断调用自身来求解子问题,这一阶段也称为递归调用。(2)回溯:当递归达到边界条件时,递归开始回溯,逐级返回函数调用过程中得到的结果,将得到的部分结果组合成最终的解,这一阶段也称为递归的回溯。递归函数的一般定义格式如下所示:def函数名([参数列表]):

if边界条件:

return结果

else:return递归公式6.7.1递归函数递归最经典的应用便是阶乘。在数学中,求正整数n!(n的阶乘)问题根据n的取值可以分为以下两种情况:(1)当n=1时,所得的结果为1。(2)当n>1时,所得的结果为n×(n-1)!。那么利用递归求解阶乘时,n=1是边界条件,n×(n-1)!是递归公式。编写代码实现n!求解,示例代码如下:deffunc(num):ifnum==1:return1else:returnnum*func(num-1)num=int(input("请输入一个整数:"))result=func(num)print("5!=%d"%result)6.7.1递归函数func(5)的求解过程如图所示。6.7.1递归函数程序将求解func(5)转化为求解5*func(4),想要得到func(5)的结果,必须先得到func(4)的结果;func(4)求解又会被转换为4*func(3),同样地想要得到func(4)的结果必须先得到func(3)的结果。以此类推,直到程序开始求解2*func(1),此时触发临界条件,func(1)的值可以直接计算,之后结果开始向上层层传递,直到最终返回func(5)的位置,求得5!。案例5-14defcountdown(n):"""递归实现火箭发射倒计时"""ifn<0:#基线条件:倒计时结束

print("点火发射!")return

print(f"倒计时:{n}秒")countdown(n-1)#递归调用,n逐次减1

#调用函数,从5开始倒数countdown(5)6.7.2匿名函数案例5-15defhanoi(n,source,auxiliary,target):#当只有一个圆盘时,直接将其从起始柱子移动到目标柱子

ifn==1:print(f"将圆盘1从{source}移动到{target}")return#第一步:将n-1个圆盘从起始柱子移动到辅助柱子

hanoi(n-1,source,target,auxiliary)#第二步:将第n个圆盘从起始柱子移动到目标柱子

print(f"将圆盘{n}从{source}移动到{target}")#第三步:将n-1个圆盘从辅助柱子移动到目标柱子

hanoi(n-1,auxiliary,source,target)

#测试代码,假设有3个圆盘num_disks=3hanoi(num_disks,'A','B','C')实训案例6.6

先定一个小目标!负责空间站物资的添加、查询和消耗操作,维护物资总量和物资列表。任务1实现物资管理功能函数案例5-16#全局变量,用于存储空间站的物资信息

total_supply=1000supplies=[]

defadd_supply(item):globaltotal_supplysupplies.append(item)print(f"已成功添加物资:{item}")

defquery_supply(item):returniteminsupplies

defconsume_supply(amount):globaltotal_supplyiftotal_supply>=amount:total_supply-=amountprint(f"成功消耗{amount}单位物资,剩余物资:{total_supply}单位")else:print("物资不足,无法消耗!")

先定一个小目标!根据输入的轨道半径和轨道周期,通过函数封装数学计算逻辑,实现天宫空间站轨道周长和轨道速度的精准计算,参数支持灵活传入,结果直接返回。任务2实现轨道计算功能函数案例5-17importmath

defcalculate_orbit_circumference(radius):"""

计算天宫空间站轨道的周长

:paramradius:轨道半径

:return:轨道周长

"""return2*math.pi*radius

defcalculate_orbit_speed(radius,time):"""

计算天宫空间站的轨道速度

:paramradius:轨道半径(千米)

:paramtime:轨道周期(小时)

:return:轨道速度(千米/小时)

"""circumference=calculate_orbit_circumference(radius)speed=circumference/timereturnspeed

先定一个小目标!通过嵌套函数封装空间站舱室温度调节逻辑,外层函数定义初始温度,内层函数实现温度动态调整,利用nonlocal关键字实现嵌套函数间的变量修改,模拟真实的舱室温度调节过程。任务3实现温度控制功能函数案例5-18defcabin_environment():#外层函数的局部变量,表示舱室当前温度(单位:摄氏度)

current_temperature=22

defadjust_temperature(change):"""

此函数用于调节舱室温度

:paramchange:温度的变化量

"""nonlocalcurrent_temperature#调节温度

current_temperature+=changeprint(f"温度已调节,当前舱室温度:{current_temperature}摄氏度")returnadjust_temperature

先定一个小目标!利用不定长参数封装货物管理核心功能,实现任意数量货物总质量的计算,以及空间站任意键值对信息的展示,提升函数的通用性和灵活性,适配不同数量的货物和信息传入场景。任务4实现货物管理功能案例5-19defcalculate_total_mass(*masses):"""

计算多个物体的总质量

:parammasses:物体的质量(千克)

:return:总质量(千克)

"""returnsum(masses)

defprint_space_station_info(**info):"""

打印天宫空间站的信息

:paraminfo:空间站的信息,键值对形式

"""forkey,valueininfo.items():print(f"{key}:{value}")

先定一个小目标!封装主调度函数main()作为系统入口,统一调用物资管理、轨道计算、温度控制、货物管理的所有功能函数,整合匿名函数实现设备能耗计算、递归函数实现火箭发射倒计时,完成模拟空间站管理系统的整体联动,实现一站式的功能调度。任务5实现主调函数机系统整体调用案例5-20#主调度函数:系统入口defmain():print("=====天宫空间站模拟管理系统=====")#1.物资管理操作add_supply("氧气罐")print(f"氧气罐是否存在:{query_supply('氧气罐')}")consume_supply(200)print("-"*30)

#2.轨道计算操作orbit_radius=6771orbit_time=1.5circumference=calculate_orbit_circumference(orbit_radius)speed=calculate_orbit_speed(orbit_radius,orbit_time)print(f"天宫空间站轨道周长约为{circumference:.2f}千米")print(f"天宫空间站的轨道速度约为{speed:.2f}千米/小时")print("-"*30)继续上一页#3.温度控制操作adjust_temp=cabin_environment()adjust_temp(3)#升温3

温馨提示

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

评论

0/150

提交评论