版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
人工智能及Python应用第8章文件和异常—项目日报管理
1任务导入2职业能力目标3知能达标4素养提升5视野拓展6任务评价目录1任务导入返回主目录
某公司作为科技领域的龙头企业,其项目规模庞大、团队成员众多,项目管理面临着进度把控难、资源协调复杂等挑战。为了提升管理效率,公司决定开发一款高效的项目日报管理系统,帮助项目经理实时掌握项目动态、优化资源配置。小E是公司开发部门的骨干成员,凭借丰富的项目开发经验和对Python技术的深入理解,主动承担了这一模块的设计与开发任务。接下来,让我们一起跟随小E的脚步,探索如何用Python语言编程实现项目管理,打造一款智能化、高效化的日报管理系统。2职业能力目标返回主目录职业技能类别职业能力要求人工智能工程师(HCIA-AI)掌握Python文件操作掌握Python异常操作人工智能训练师(四级)理解文件的使用方式理解异常的分类“Python程序开发”技能竞赛能正确操作使用文件能正确处理不同的异常3知能达标返回主目录文件与异常
至此,大家已经掌握开发Python程序所需的基本技能。本章主要进一步学习文件处理,让程序能够快速地处理批量的数据;还将学习异常处理,避免程序在面对意外情形时崩溃。在学习这些知识点后,将能提高程序的适用性、可用性和稳定性。主要知识点【知能基础】文件操作文件是操作系统用于存储信息的基本单位。在Python中,文件是存储在磁盘或其他持久性存储介质上的数据集合,可以是文本文件、二进制文件、图片、视频、音频等任何形式的数据。Python提供了一套内置的文件操作函数和方法,允许程序打开、读取、写入和关闭文件。
第一个filename参数是文件名字符串,要打开的目标文件名。
第二个mode参数是设置打开文件时的模式,取值有多个,“r”表示文件只能读取,“w”表示文件只能写入(如有同名会被覆盖),“a”表示打开文件时并追加内容,任何写入的数据会自动添加到文件末尾,“r+”表示打开文件进行读写。mode参数是可选项,省略时默认为“r”模式。
第三个enconding参数是指定文件的编码格式,为可选项,为确保兼容性和扩展性,推荐使用utf-8。f=open(filename,mode="
",enconding="
")格式【知能基础】文件操作-文件打开打开文件是文件操作的第一步,可使用open()函数打开文件,语法格式为:第一行代码:打开test1.txt,这个filename参数是必输的,其余参数可缺省,返回一个文件对象,并将其赋值给变量f。第二行代码:打印输出变量f。
提示:test1.txt需提前准备好。【知能基础】文件操作-文件打开【示例】使用open()函数打开已有文件test1.txt。f=open("test1.txt")print(f)示例代码运行结果【知能基础】文件操作-文件打开通过运行结果可以看到,open()函数返回了一个文件对象,文件名称是“test1.txt”,读取文件的模式是“只读”,默认编码方式是“cp936”。【示例】使用open()函数打开不存在的文件A.txt。【知能基础】文件操作-文件打开f=open("A.txt")print(f)示例代码运行结果【知能基础】文件操作-文件打开通过运行结果可以看到,若打开的文件不存在,open()函数打开文件失败,程序则会抛出异常,显示“FileNotFoundError”报错信息。【知能基础】文件操作-文件打开f=open("test1.txt","r",encoding="utf-8")print(f)示例代码"r"读取模式(只读)"w"写入模式(只写)"r+"读写模式(可读可写)"a"追加写入模式
文件打开并操作完,需要关闭文件,以释放资源。常见的文件关闭方法有两种:显式关闭和使用with语句。(1)显式关闭
使用显式方式关闭文件test1.txt。【知能基础】文件操作-文件关闭#显式关闭文件操作f=open("test1.txt","r",encoding="utf-8")print(f.tell())f.close()print(f.tell())#报错:ValueError示例代码
f.tell()函数用于获取当前文件指针的位置(以字节数为单位),初始打开文件时指针位于文件开头(位置
0)。运行结果【知能基础】文件操作-文件关闭0Traceback(mostrecentcalllast):File"",line5,in<module>print(f.tell())#报错:ValueError:I/OoperationonclosedfileValueError:I/Ooperationonclosedfile.(2)使用with语句with语句是一种上下文管理器,当with中的代码块执行完毕时,会自动关闭文件。【示例】使用with语句关闭文件。【知能基础】文件操作-文件关闭#使用with语句关闭文件操作withopen("test1.txt",encoding="UTF-8")asf:print(f.tell())#文件在这里已经被自动关闭print(f.tell())#报错:ValueError示例代码【知能基础】文件操作-文件关闭运行结果0Traceback(mostrecentcalllast):File"",line5,in<module>print(f.tell())#报错:ValueError:I/OoperationonclosedfileValueError:I/Ooperationonclosedfile.以上介绍的两种方式都可以完成文件关闭。在实际使用时:(1)如果使用with语句,则不需要显式调用close()函数。(2)如果没使用with语句,请确保在适当的位置调用close()函数以关闭文件。(3)两种方式中优先推荐with方式,因为它确保文件在使用完毕后被正确关闭。【知能基础】文件操作-文件关闭Tips
文件除了打开与关闭操作外,读取文件是常见的操作,以下是常用的文件读取操作。(1)read()方法:使用read()方法读取指定文件不同长度的文件内容。【示例】使用read()方法读取指定文件前3个字节。以下是运行结果图。运行结果【知能基础】文件操作-文件读取withopen("test2.txt","r",encoding="utf-8")asf:content1=f.read(3)print("read(3)方法读取到的文件内容:\n",content1)示例代码【知能基础】文件操作-文件读取【示例】在上述示例代码基础上,使用read()方法读取整个文件内容。观察运行结果和原文有何不同?【知能基础】文件操作-文件读取withopen("test2.txt","r",encoding="utf-8")asf:content2=f.read()print("read()方法读取到的文件内容:\n",content2)示例代码运行结果【知能基础】文件操作-文件读取read()方法读取到的文件内容:
三中全会决定解读|健全绿色低碳发展机制2024-07-2208:34新华社北京7月21日电(记者高敬)21日发布的《中共中央关于进一步全面深化改革、推进中国式现代化的决定》对深化生态文明体制改革作出部署,提出健全绿色低碳发展机制。决定提出,聚焦建设美丽中国,加快经济社会发展全面绿色转型,健全生态环境治理体系,推进生态优先、节约集约、绿色低碳发展,促进人与自然和谐共生。决定提出关于健全绿色低碳发展机制的一系列重大部署,如“实施支持绿色低碳发展的财税、金融、投资、价格政策和标准体系”“优化政府绿色采购政策”“加快规划建设新型能源体系”“建立能耗双控向碳排放双控全面转型新机制”“构建碳排放统计核算体系、产品碳标识认证制度、产品碳足迹管理体系”等。习近平生态文明思想研究中心副主任俞海表示,中国式现代化是人与自然和谐共生的现代化。当前,我国经济社会发展已进入加快绿色化、低碳化的高质量发展阶段。要把绿色低碳发展作为解决生态环境问题的治本之策,加快形成绿色生产方式和生活方式,厚植高质量发展的绿色底色。同时也要看到,我国绿色低碳发展水平整体还不高,经济社会发展全面绿色转型内生动力不足、基础薄弱。【示例】在上述示例代码基础上,再次使用read()方法读取整个文件,观察运行结果又有何变化?【知能基础】文件操作-文件读取withopen("test2.txt","r",encoding="utf-8")asf:content3=f.read()print(“再次调用read()方法读取到的文件内容:\n",content3)示例代码运行结果【知能基础】文件操作-文件读取通过运行结果可以看到,没有读取到任何文件中的内容,是因为前一次read()方法已经到达了文件末尾,所以当前只会返回一个空字符串。从以上3个示例的运行结果可以发现:(1)read(size)方法可用于读取文件内容,它会读取一些数据,并以字符串的形式返回结果。当read(size)方法中size传递了一个非负参数时,会读取并返回文本中的前size个字符。(2)当read(size)方法中省略size或者size为负数时,会读取并返回整个文件的内容。(3)若前面程序已经读取过内容,那当次read就会从前一次读取的内容后开始读取,若前面程序没有读取过内容,则会从文本的开始读取所有内容。【知能基础】文件操作-文件读取Tips(2)readline()方法:从文件中读取单行数据。【示例】使用readline()方法读取文件。以下是运行结果图。运行结果【知能基础】文件操作-文件读取withopen("test2.txt","r",encoding="utf-8")asf:print("第一次调用readline()\n",f.readline())print("第二次调用readline()\n",f.readline())print("第三次调用readline()\n",f.readline())print("第四次调用readline()\n",f.readline())示例代码【知能基础】文件操作-文件读取(3)readlines()方法:从文件中读取所有行到列表中。【示例】使用readlines()方法读取文件。以下是运行结果图。运行结果【知能基础】文件操作-文件读取withopen("test2.txt","r",encoding="utf-8")asf:print(f.readlines())示例代码【知能基础】文件操作-文件读取【示例】在上个示例基础上,去掉每行末尾的“\n”。以下是实现效果图。运行结果【知能基础】文件操作-文件读取withopen("test2.txt","r",encoding="utf-8")asf:contents=f.readlines()
contents=[content.strip()forcontentincontents]print(contents)示例代码【知能基础】文件操作-文件读取在Python中,写入文件是一项常见的任务。使用文件对象的write()方法将数据写入文件中。(1)write()方法【示例】使用write()方法将字符串写入文件中。以下是运行结果图。运行结果【知能基础】文件操作-文件写入content="欢迎进入人工智能及Python的世界!"
withopen("write_example.txt",'w',encoding="utf-8")asf:f.write(content)
print("写入完成")示例代码【知能基础】文件操作-文件写入从上个示例运行结果来看,程序没有出现问题,打印输出“写入成功”。效果图也显示出字符串已经成功写入了txt文件中。还有一点需要注意,在执行代码前,项目中是没有存在“write_example.txt”这个文件的,为什么代码执行完后,项目中存在了呢?这是因为使用了“w”写入模式,这个模式的规则是如果文件“write_example.txt”已存在,它会被覆盖;如果文件不存在,它会被创建。
如果文件已经存在,我们希望在文件末尾追加内容而不是覆盖原文件,该怎么做呢?【知能基础】文件操作-文件写入withopen("write_example.txt",'a',encoding="utf-8")asf:f.write("这是一个美妙的世界!")
print("追加完成!")示例代码【知能基础】文件操作-文件写入成功地将新的内容“这是一个美妙的世界!”追加到了在文件后。运行结果【知能基础】文件操作-文件写入【示例】使用write()方法将其他类型数据写入文件。以下是运行结果图。运行结果【知能基础】文件操作-文件写入data_list=["apple","banana","cherry"]
withopen("my_list.txt",'w',encoding="utf-8")asf:foritemindata_list:f.write(f"{item}\n")
print("列表已写入文件!")示例代码【知能基础】文件操作-文件写入【知能基础】异常处理
程序错误分为两种:语法错误与异常错误。
语法错误是指代码没有按照Python规定语法去写从而产生的错误,这种错误是没有办法抑制的。
而语句或者表达式使用了正确的语法,执行时仍触发让Python不知所措的错误,执行代码时将检测到的错误称为异常错误,这种错误是可以避免的。软件开发中,程序错误(Bug)是不可避免的,但优秀的程序员应具备高效处理错误的能力。
大多数异常不会被程序处理,而是显示下图中的错误信息。错误信息的最后一行说明程序遇到了什么类型的错误。
异常有不同的类型,而类型名称会作为错误信息的一部分打印出来。右图中的异常类型依次是ZeroDivisionError(除数为零)、NameError(尝试访问一个不存在的变量)、TypeError(不同类型间的无效操作)。【知能基础】异常处理
try…except…语句用于处理解决程序异常问题,把有可能报错的代码放到try代码块中,如果有报错,直接执行except代码块;如果没有报错,不执行except代码块。
在企业开发规范中明确提出:异常类型需明确捕获(如ValueError),禁止空的except语句。【示例】使用try…except语句处理除数为0时的异常问题。以下为运行结果图。运行结果【知能基础】异常处理defdivide_numbers(a,b):try:result=a/bexceptZeroDivisionError:print("Error:除数为0是不允许的!")
if__name__=='__main__':x=float(input("请输入被除数x:"))y=float(input("请输入除数y:"))divide_numbers(x,y)示例代码【知能基础】异常处理
无论程序是否正确,代码执行完成,是不是都应该给用户返回运行结果呢?如何修改以上代码达到这样的效果呢?【知能进阶】异常处理【知能进阶】异常处理使用try…except…else…finally语句处理异常,可以实现以下效果。defdivide_numbers(a,b):try:result=a/bexceptZeroDivisionError:print("Error:除数为0是不允许的!")else:print(f"{a}/{b}的结果是{result}")finally:print("divide_numbers的执行已完成")if__name__=='__main__':x=float(input("请输入被除数x:"))y=float(input("请输入除数y:"))divide_numbers(x,y)示例代码【知能进阶】异常处理
在异常处理时,还可以在except代码块中捕获多个异常类型,以下为实现效果。【知能进阶】异常处理try:value1=float(input("请输入被除数:"))value2=float(input("请输入除数:"))result=value1/value2exceptValueError:print("请输入一个有效的数字")exceptZeroDivisionError:print("除数不能为0")exceptExceptionase:print(f"发生了一个异常:{e}")示例代码【知能进阶】异常处理-多个异常错误处理4素养提升返回主目录【任务实践】项目日报管理
小E负责开发的项目日报管理主要实现将日报保存至csv文件,便于查看,具体实现步骤如下:(1)如果用户是第一次使用项目日报管理系统,先创建一个csv文件,为了储存之后的日报。(2)如果用户不是第一次使用项目日报管理系统,那就输入除了1以外的正整数,即可顺利进入到系统中,用户会看到如下图所示菜单界面:用户如果选择1,将内容写入到csv文件中。用户如果选择2,读取出csv文件中所有的日报内容。用户如果选择3,打印出所有日报数量。用户如果选择4,退出系统。任务描述任务实施(1)创建存放源代码的文件夹创建项目名为【report】,在该项目文件夹下新建Python文件,名为【daily_report.py】。准备就绪就可以开始编码了。【任务实践】项目日报管理(2)在项目文件中搭建整体代码框架。if__name__=='__main__':num=int(input("请问您是第一次使用日报系统吗?('是'请输入1,'否'请输入2)"))ifnum==1:create_file()print("日报系统已创建,请重启系统")else:whileTrue:print("\n日报管理系统")print("1.添加日报")print("2.查看所有日报")print("3.统计日报数量")print("4.退出")#获取用户输入choice=input("请选择操作(1-4):")ifchoice=='1':add_reports()elifchoice=='2':look_reports()elifchoice=='3':statistics_reports()elifchoice=='4':print("退出系统。")breakelse:print("无效的选择,请重新输入。")【任务实践】项目日报管理(3)在项目文件中编写create_file()函数。defcreate_file():if(notos.path.exists(file_name)):withopen(file_name,mode='w',newline='',encoding='gbk')asfile:file.write("date,title,content\n")
print("日报文件创建成功!")【任务实践】项目日报管理(4)在项目文件中编写日报add_reports()函数。
defadd_reports():date=input("请输入日期(如2024-09-18):")title=input("请输入今日工作标题:")content=input("请输入今日工作具体内容:")line_data=date+","+title+","+content+'\n'
withopen(file_name,'a',encoding='gbk')asfile:file.write(line_data)
print("日报添加成功!!")【任务实践】项目日报管理(5)在项目文件中编写查看日报look_reports()函数。
deflook_reports():withopen(file_name,'r')asfile:file_content=file.read()print("\n日报内容:\n",file_content)【任务实践】项目日报管理(6)在项目文件中编写统计日报statistics_reports()函数。
defstatistics_reports():row_count=0
withopen(file_name,'r')asfile:forrowinfile:row_count+=1
print(f"日报文件中有{row_count-1}条数据")【任务实践】项目日报管理结果展示【任务实践】项目日报管理任务拓展
在写入csv文件之前,对于用户输入的工作标题和学习内容进行验证,如果字段为空,需要提示“内容不能为空,请再次输入”的字样。请在本任务的基础上,继续完善代码,满足输入内容的完整性要求。【任务实践】项目日报管理5视野拓展返回主目录人工智能推动项目管理走向精细化人工智能在项目管理中的应用越来越广泛。在自动化任务分配方面:人工智能可以通过分析项目需求和团队成员的技能、经验,自动分配任务,确保资源得到最优配置。在进度跟踪与预测方面:利用机器学习算法,人工智能可以实时跟踪项目进度,预测潜在的延误风险,并提前发出预警。在问题识别与解决方面:通过自然语言处理和数据分析,人工智能可以识别项目中的问题和瓶颈,提供解决方案或建议。6任务评价返回主目录通过学习本章内容,评价自己是否达成了以下学习目标,在学习评测表中标出已经完成的目标情况(分A、B、C、D四个等级)。评测标准自我评价小组评价教师评价企业评价掌握文件操作方式
掌握异常处理方法
【说明】A为学习目标达成;B为学习目标基本达成;C为学习目标部分达成;D为学习目标未实现。
谢谢!人工智能及Python应用第9章面向对象编程—学生就业管理
1任务导入2职业能力目标3知能达标4
素养提升5视野拓展6任务评价目录1任务导入返回主目录
每年毕业季时,同学们既憧憬又迷茫,为了帮助大家更好地规划职业方向,顺利找到满意的工作。学校计划开发一款学生就业管理系统,这个系统将帮助学生记录和跟踪自己的求职进展,帮助学校就业管理人员完成学生就业信息的快速录入、就业岗位的精准匹配、企业招聘信息的及时发布等。请大家一起来完成这项任务吧。2职业能力目标返回主目录职业技能类别职业能力要求人工智能工程师(HCIA-AI)v理解面向对象的编程思想v掌握类和对象的基本操作人工智能训练师(四级)v熟悉使用Python语言进行面向对象编程“Python程序开发”技能竞赛v学会使用面向对象编程解决实际问题3知能达标返回主目录什么是面向对象?面向对象是程序开发领域的重要思想,这种思想模拟了人类认识客观世界的思维方式,将开发中遇到的事物皆看作对象,在主流编程语言中都有面向对象编程思想,例如Java、Python等。Python语言中的面向对象编程(Object-OrientedProgramming,OOP)是一种解决软件复用的设计和编程方法,使得代码更加直观、灵活和可重用。分析解决问题的步骤使用函数实现每个步骤的功能按步骤依次调用函数分析问题,从中提炼出多个对象将不同对象各自的特征和行为进行封装通过控制对象的行为来解决问题面向过程面向对象主要知识点【知能基础】类与对象面向对象编程有两个非常重要的概念:类(Class)和对象(Object)。“人以类聚,物以群分”,具有相同或相似特征和行为的事物的集合统称为类,类是抽象的,不具体指代一个实体。在实际使用的时候通常会找到这个类的一个具体的存在,这个具体的存在就是对象,对象在现实世界中是看得见摸得着的,万物皆对象,例如一本书、一辆车、一名学生这些都是对象。对象是根据类创建的,一个类可以对应多个对象,类是对象的抽象,对象是类的实例,类就是创建对象的模板,如图所示,“学生”是一个类,具有相似的特征和行为,张明、王丽、李梅、赵云都是具体的对象。类与对象的关系在Python编程时,使用类的顺序是:先定义(创建)类,然后再创建类的对象(实例),通过对象实现特定的功能。类是由3部分组成:(1)类的名称:大驼峰命名法,首字母一般大写,例如Student(学生类)。(2)类的属性:用于描述事物的特征,例如学号。(3)类的方法:用于描述事物的行为,例如学习。特别注意,在类中定义的是方法虽然跟前面学习的函数基本一致,但是不能称其为“函数”。【知能基础】定义类定义一个类使用class关键字实现,语法格式为:格式【知能基础】定义类class类名:属性名=属性值
def方法名(self):
方法体定义一个学生类,示例代码如下:示例代码【知能基础】定义类classStudent:
#类属性
student_id='202420241156'#属性:学号
name='张明'#属性:姓名
#类方法
defstudy(self):
#方法:学习
print("正在学习")
defplay_sports(self):
#方法:运动
print("正在运动")【知能基础】定义类
如何把日常生活中的事物抽象成程序中的类?
一般名词都是类(称为名词提炼法),例如张明在图书馆看书,其中“张明”可以抽象为Student类,“图书馆”可以抽象为Library类,“书”可以抽象为Book类。【思考】Student、Library、Book这些类的属性和方法有哪些?请大家按照定义类的示例格式写出来吧。
张明
在
图书馆
看
书Student类Library类Book类
前面定义了一个Student类,就好比有学生的一个模板了,那么接下来就可以根据已经定义的类去创建出一个个具体的“学生”对象了。例如张明、李梅等、
根据类创建对象的语法格式为:
对象名=类名()
使用对象的本质是访问对象成员,语法格式为:
对象名.属性名
对象名.方法名()格式【知能基础】创建对象格式定义一个学生类并创建对象,示例代码如下:【知能基础】创建对象classStudent:
#类属性
student_id='202420241156'#属性:学号
name='张明'#属性:姓名
#类方法
defstudy(self):
#方法:学习
print("正在学习")
defplay_sports(self):
#方法:运动
print("正在运动")#创建一个对象,并用变量stu1来保存它的引用stu1=Student()stu1.student_id='202420241157'='李梅'stu1.study()stu1.play_sports()print(stu1.student_id)print()示例代码
在类的定义中,类的成员分为公有成员和私有成员,均包括属性和方法,它们规定了类的特征和行为。【知能基础】类的成员
属性按声明的方式可以分为两类:类属性和实例属性。
类属性是声明在类内部、方法外部的属性。可以通过类或对象进行访问,但只能通过类进行修改。【知能基础】类的成员-属性示例代码#定义学生类classStudent:
#类属性
student_id='202420241156'
#属性:学号
name='张明'
#属性:姓名
#类方法
defstudy(self):
#方法:学习
print("正在学习")
defplay_sports(self):
#方法:运动
print("正在运动")#创建一个对象,并用变量stu2来保存它的引用stu2=Student()print(S)
#通过类Student访问类属性print()
#通过对象stu2访问类属性S='赵云'
#通过类Student修改类属性nameprint(S)print()='王丽'
#通过对象stu2修改类属性nameprint(S)print()【思考】在以上示例中,stu2对象不能修改类属性的值,但是最后一句代码“print(stu2.name)”为什么对象访问的属性值为”王丽”?
实例属性是在方法内部声明的属性,Python支持动态添加实例属性,只能通过对象访问和修改实例属性。请通过以下3个示例对比验证,进一步理解实例属性的操作方法。
(1)动态添加实例属性,示例代码如下:【知能基础】类的成员示例代码#动态添加实例属性classStudent:defstudy(self):
self.name='李昊'
#添加实例属性stu3=Student()
#创建对象stu3stu3.study()S='李广'
#修改实例属性print()
#通过对象stu3访问实例属性stu3.course="计算机"#动态地添加实例属性print(stu3.course)
(2)访问实例属性,示例代码如下:【知能基础】类的成员示例代码#访问实例属性classStudent:
defstudy(self):
self.name='李昊'
#添加实例属性stu4=Student()
#创建对象stu4stu4.study()print()
#通过对象stu4访问实例属性print(S)
#通过类Student访问实例属性,报错
(3)修改实例属性,示例代码如下:【知能基础】类的成员示例代码#修改实例属性classStudent:
defstudy(self):
self.name='李昊'
#添加实例属性stu5=Student()
#创建对象stu5stu5.study()S='王欢'
#修改实例属性print()
#通过对象stu5访问实例属性
方法按定义方式和用途可以分为三类:实例方法、类方法和静态方法。
(1)实例方法形似函数,但它定义在类内部。以self为第一个形参,self参数代表对象本身,只能通过对象调用,示例代码如下:【知能基础】类的成员-方法示例代码#方法classStudent:
defstudy(self):
#实例方法
print("我是实例方法")stu6=Student()stu6.study()
#通过对象调用实例方法Student.study()
#通过类调用实例方法,报错
(2)类方法是定义在类内部,使用装饰器@classmethod修饰的方法,第一个参数为cls,代表类本身,可以通过类和对象调用,示例代码如下:【知能基础】类的成员-方法示例代码#类方法classStudent:
@classmethod
defexam(cls):
#类方法
print("我是类方法")stu7=Student()stu7.exam()
#通过对象调用类方法Student.exam()
#通过类调用类方法补充说明:类方法中可以使用cls访问和修改类属性的值,示例代码如下:【知能进阶】类的成员-方法示例代码classStudent:
name='李力'
#类属性
@classmethod
defexam(cls):
#类方法
print(cls.name)
#使用cls访问类属性
cls.name='鲁西'#使用cls修改类属性
print(cls.name)stu8=Student()stu8.exam()
(3)静态方法是定义在类内部,使用装饰器@staticmethod修饰的方法,没有任何默认参数,静态方法可以通过类和对象调用,示例代码如下:【知能基础】类的成员-方法示例代码#静态方法classStudent:
@staticmethod
deftest():
#静态方法
print("我是静态方法")stu9=Student()stu9.test()
#通过对象调用静态方法Student.test()
#通过类调用静态方法
补充说明:静态方法内部不能直接访问属性或方法,但可以使用类名访问类属性或调用类方法,示例代码如下:【知能进阶】类的成员-方法示例代码classStudent:
name='李力'
#类属性
@staticmethod
deftest():
print("我是静态方法")
print(f"类属性的值为{S}")
#静态方法中访问类属性
前面讲的类的成员默认是公有成员,可以在类的外部通过类或对象随意地访问,这样显然不够安全。为了保证类中数据的安全,Python支持将公有成员改为私有成员,在一定程度上限制在类的外部对类成员的访问。Python通过在类成员的名称前面添加双下划线(__)的方式来表示私有成员,语法格式为:
__属性名
__方法名【知能进阶】类的成员-私有成员格式
示例代码如下:【知能进阶】类的成员-私有成员示例代码#私有属性classStudent:
__name='李力'
#私有属性
def__study(self):
#私有方法
print("学习")
私有成员在类的内部可以直接访问,在类的外部不能直接访问,但可以通过调用类的公有成员方法的方式进行访问,示例代码如下:【知能进阶】类的成员-私有成员示例代码classStudent:
__name='李力'
#私有属性
def__study(self):
#私有方法
print("学习")
deftest(self):
print(f"学生{self.__name}在打篮球")
#公有方法中访问私有属性
self.__study()
#公有方法中调用私有方法
类中还包括两个特殊的方法:构造方法和析构方法,这两个方法都是系统内置方法。
构造方法指的是__init__()方法。创建对象时系统自动调用,从而实现对象的初始化。每个类默认都有一个__init__()方法,可以在类中显式定义__init__()方法。__init__()方法可以分为无参构造方法和有参构造方法。
(1)当使用无参构造方法创建对象时,所有对象的属性都有相同的初始值,无参构造方法示例代码如下:
【知能进阶】类的成员-私有方法示例代码#无参构造方法classStudent:
def__init__(self):
#无参构造方法
self.course="人工智能"
defstudy(self):
print(f"正在学习:{self.course}")stu1=Student()
#创建对象并初始化stu1.study()stu2=Student()
#创建对象并初始化stu2.study()
(2)当使用有参构造方法创建对象时,对象的属性可以有不同的初始值,有参构造方法示例代码如下:【知能进阶】类的成员-私有成员示例代码#有参构造方法classStudent:
def__init__(self,course):
#有参构造方法
self.course=course
#将形参赋值给属性
defstudy(self):
print(f"正在学习:{self.course}")
stu1=Student("计算机")
#创建对象,并根据实参初始化属性stu1.study()stu2=Student("人工智能")
#创建对象,并根据实参初始化属性stu2.study()
(3)析构方法即__del__()方法,是销毁对象时系统自动调用的方法。每个类默认都有一个__del__()方法,可以显式定义析构方法,示例代码如下:【知能进阶】类的成员-私有成员示例代码#析构方法classStudent:
def__init__(self):
self.course="英语"print("对象被创建")
def__del__(self):
print("对象被销毁")stu=Student()print(stu.course)delstuprint(stu.course)
#报错【知能基础】面向对象的三大特性
源于软件工程的核心需求(降低管理复杂度、提升复用性、增强扩展性),面向对象主要有三大特性,分别为封装、继承和多态。
智能家居系统中的典型应用场景封装:灯光亮度调节算法和温度传感器数据被隐藏在墙内控制盒中,用户只需语音指令下达命令。继承:所有智能设备都共享「连接协议」,新风系统子类扩展「空气净化」方法,智能窗帘子类新增「光照感应」属性。多态:执行"打开"指令时,门锁调用解锁协议,空调启动制冷程序,智能音箱播放欢迎语,同一指令触发不同硬件设备响应。【知能基础】面向对象的三大特性-封装
封装是面向对象的重要特性之一,它的基本思想是对外隐藏类的细节,提供用于访问类成员的公开接口。类的外部无需知道类的实现细节,只需要使用公开接口便可访问类的内容,在一定程度上保证了类内部数据的安全。
为了契合封装思想,在定义类时需要满足以下两点要求。
(1)将类属性声明为私有属性。
(2)添加两类供外界调用的公有方法,分别用于设置或获取私有属性的值。
示例代码如下:【知能基础】面向对象的三大特性-封装示例代码#封装classStudent:
def__init__(self,name):
self.name=name
#姓名,公共属性
self.__age=18
#年龄,私有属性,默认为18岁
#设置私有属性值的方法
defset_age(self,new_age):
if0<new_age<=120:
#判断年龄是否合法
self.__age=new_age
#获取私有属性值的方法
defget_age(self):
returnself.__agestu=Student("张明")stu.set_age(20)print(f"年龄为{stu.get_age()}岁")
继承是面向对象的重要特性之一,它主要用于描述类与类之间的关系,在不改变原有类的基础上扩展原有类的功能。若类与类之间具有继承关系,被继承的类称为父类或基类,继承其他类的类称为子类或派生类,子类会自动拥有父类的公有成员。
在程序中,继承描述的是事物之间的所属关系,例如猫和狗都属于动物,程序中便可以描述为猫和狗继承自动物;同理,布偶猫和波斯猫都继承自猫,而拉布拉多导盲犬和德牧警犬都继承自狗。【知能基础】面向对象的三大特性-继承动物猫布偶猫波斯猫狗拉布拉多导盲犬德牧警犬
根据继承的方式,继承分为单继承和多继承。
单继承即子类只继承一个父类。例如,布偶猫、波斯猫都属于猫类,它们之间存在的继承关系即为单继承。【知能基础】面向对象的三大特性-继承猫布偶猫波斯猫Python中单继承的语法格式如下:class子类名(父类名):
子类继承父类的同时会自动拥有父类的公有成员。自定义类默认继承基类object。【知能基础】面向对象的三大特性-继承示例代码格式【提示】子类不会拥有父类的私有成员,也不能访问父类的私有成员。在上述示例代码中,如添加以下代码将报错:print(persianCat.__age) #子类访问父类的私有属性persianCat.__test() #子类调用父类的私有方法
#继承classCat(object):
def__init__(self,color):
self.color=color
self.__age=1
defwalk(self):
print("走猫步~")
def__test(self):
print("测试")#定义继承Cat的Persian类classPersian(Cat):
passpersianCat=Persian("白色")
#创建子类的对象print(f"{persianCat.color}的波斯猫")
#子类访问从父类继承的属性persianCat.walk()
#子类调用从父类继承的方法
多继承是指程序中的一个类也可以继承多个类,如此子类具有多个父类,也自动拥有所有父类的公有成员。
现实生活中,房屋具有居住功能,汽车具有驾驶功能,房车继承了房屋和汽车的功能,房车和房屋、汽车之间存在的多继承的关系。【知能进阶】面向对象的三大特性-继承房屋汽车房车居住驾驶居住驾驶Python中多继承的语法格式为:【知能进阶】面向对象的三大特性-继承示例代码格式class子类名(父类名1,父类名2,...):#多继承#定义一个表示房屋的类classHouse(object):
deflive(self):
#居住
print("供人居住")#定义一个表示汽车的类classCar(object):
defdrive(self):
#行驶
print("行驶")#定义一个表示房车的类classTouringCar(House,Car):
passtour_car=TouringCar()tour_car.live()
#子类对象调用父类House的方法tour_car.drive()
#子类对象调用父类Car的方法
如果House类和Car类中有一个同名的方法,那么子类会调用哪个父类的同名方法呢?
如果子类继承的多个父类是平行关系的类,那么子类先继承哪个类,便会先调用哪个类的方法。
子类会原封不动地继承父类的方法,但子类有时需要按照自己的需求对继承来的方法进行调整,也就是在子类中重写从父类继承来的方法。在子类中定义与父类方法同名的方法,在方法中按照子类需求重新编写功能代码即可,示例代码如下:【知能进阶】面向对象的三大特性-继承示例代码#定义一个表示人的类classPerson(object):
defsay_hello(self):
print("Hello!")#定义一个表示中国人的类classChinese(Person):
defsay_hello(self):
#重写的方法
print("您好!")chinese=Chinese()chinese.say_hello()
#子类调用重写的方法
子类重写了父类的方法之后,无法直接访问父类的同名方法,但可以使用super()函数间接调用父类中被重写的方法,示例代码如下:【知能进阶】面向对象的三大特性-继承示例代码#定义一个表示中国人的子类classChinese(Person):
defsay_hello(self):
super().say_hello()
#调用父类被重写的方法
print("您好!")
多态是面向对象的重要特性之一,它的直接表现即让不同类的同一功能可以通过同一个接口调用,表现出不同的行为。【知能进阶】面向对象的三大特性-多态示例代码#支付classPayment:
defpay(self,amount):
raiseNotImplementedError("Subclassesshouldimplementthis!")#信用卡支付classCreditCardPayment(Payment):
defpay(self,amount):
print(f"Paid{amount}
usingCreditCard")#支付宝支付classAlipayPayment(Payment):
defpay(self,amount):
print(f"Paid{amount}
usingAlipay")#微信支付classWeChatPayment(Payment):
defpay(self,amount):
print(f"Paid{amount}
usingWeChatPay")defmake_payment(payment_method,amount):
payment_method.pay(amount)#使用多种方式进行支付credit_card=CreditCardPayment()alipay=AlipayPayment()wechat=WeChatPayment()make_payment(credit_card,100)
#输出:Paid100usingCreditCardmake_payment(alipay,200)
#输出:Paid200usingAlipaymake_payment(wechat,300)
#输出:Paid300usingWeChatPay①②4素养提升返回主目录
大学生就业管理系统以促进学生就业为核心,为师生提供就业相关服务。本任务要求编写代码,实现一个基于面向对象的大学生就业管理系统,具有公司信息显示、职位信息显示、学生名单显示、就业统计、已就业名单显示、未就业名单显示和退出等功能。【任务实践】学生就业管理任务描述初始页登录页主页【任务实践】学生就业管理具体需求:1.定义类(1)Student(学生):存储学生基本信息(2)Job(职位):存储职位信息(3)Company(公司):存储公司信息(4)Login(登录):用户登录管理(5)EmploymentManager(就业管理):负责管理学生就业信息,包括学生、职位和公司之间的关系2.实现首页、登录页和主页功能(1)按照要求展示首页(2)按照要求提示输入账号和密码,控制密码输入次数为3次。如果用户名或密码输入错误,则提示“账号或密码错误,还剩下*次机会”;如果错误输入超过3次,则提示“账号或密码错误次数过多,登录失败!”;如果用户名或密码输入正确,则提示“登录成功,请选择对应的操作”,按要求显示主页。(3)按照主页要求分别实现公司信息显示、职位信息显示、学生名单显示、就业统计、已就业名单显示、未就业名单显示和退出功能。【任务实践】学生就业管理输入1,显示所有公司信息,效果为:主页功能(一)输入2,显示所有职业信息,效果为:输入3,显示所有学生信息,效果为:输入4,显示就业统计结果,效果为:输入5,显示已就业名单,效果为:【任务实践】学生就业管理输入6,显示未就业名单,效果为:主页功能(二)输入q或者Q,退出系统,效果为:【任务实践】学生就业管理(1)创建项目名为“employment”,在该项目中新建Python文件“student.py”,在文件中定义Student(学生)类,存储学生基本信息。classStudent:def__init__(self,name,student_id,gender,grade,major):=nameself.student_id=student_idself.gender=genderself.grade=gradeself.major=majorself.employed=Falseself.job=Nonepany_name=Noneself.job_title=Nonedefapply_for_job(self,job):self.job_title=job.titlepany_name=self.employed=Truedef__str__(self):returnf"姓名:{},学号:{self.student_id},性别:{self.gender},年级:{self.grade},专业:{self.major}"
【任务实践】学生就业管理任务实施(2)在项目中新建Python文件“company.py”,在文件中定义Company(公司)类,存储公司信息。classCompany:def__init__(self,name,industry):=nameself.industry=industrydef__str__(self):returnf"公司:{},行业:{self.industry}"
【任务实践】学生就业管理(3)在项目中新建Python文件“job.py”,在文件中定义Job(职位)类,存储存储职位信息。classJob:def__init__(self,title,company,requirements):self.title=titlepany=companyself.requirements=requirementsself.taken=Falsedefis_available(self):returnnotself.takendeftake_job(self):self.taken=Truedef__str__(self):returnf"职位:{self.title},公司:{}"
【任务实践】学生就业管理(4)在项目中新建Python文件“login.py”,在文件中实现Login(登录)类。按照要求提示输入账号和密码,控制密码输入次数为3次。如果用户名或密码输入错误,则提示“账号或密码错误,还剩下*次机会”;如果错误输入超过3次,则提示“账号或密码错误次数过多,登录失败!”;如果用户名或密码输入正确,则提示“登录成功,请选择对应的操作”,并按要求显示主页。【任务实践】学生就业管理(5)在项目中新建Python文件“employment_manager.py”,在文件中实现EmploymentManager(就业管理)。负责管理学生就业信息,包括学生、职位和公司之间的关系.,按照主页要求分别实现公司信息显示、职位信息显示、学生名单显示、就业统计、已就业名单显示、未就业名单显示和退出功能。【任务实践】学生就业管理任务拓展
随着公司和职位的变化,学生就业信息管理系统对公司和职位信息的除了要具有新增和查看的功能,还需具有修改功能,确保公司和职位信息是最新的。请在本任务的基础上,继续完善代码,满足对公司和职位信息的管理要求。【任务实践】学生就业管理5视野拓展返回主目录人工智能会替代人类哪些工作?
从人类的发展进程上看,我们一直在寻求提高效率的途径,即以更少的资源获得更多。古代人类用尖锐的石头,更高效地狩猎和采集食物;近代人类用蒸汽机,减少了对马匹的需求。当代人类实现自动化的每一步都在改变工作生活。在人工智能的时代,哪些工作会被人工智能取代呢?
人工智能可能会取代这些工作,例如:重复性强的工作、创造性低的工作、弱社交的工作、无法保证人身安全的工作等。如今,我们正从“替代体力”的效率革命,迈入“增强乃至替代部分脑力”的新阶段。
人工智能时代已经来临,虽然有一部分工作会被人工智能取代,但仍然有部分新的工作岗位被创造出来,例如:人工智能工程师、人工智能训练师、艺术家、产品经理、规划师等。6任务评价返回主目录通过学习本章内容,评价自己是否达成了以下学习目标,在学习评测表中标出已经完成的目标情况(分A、B、C、D四个等级)。评测标准自我评价小组评价教师评价企业评价理解面向对象的编程思想掌握类和对象的基本操作熟悉使用Python语言进行面向对象编程学会使用面向对象编程解决实际问题【说明】A为学习目标达成;B为学习目标基本达成;C为学习目标部分达成;D为学习目标未实现。
谢谢!人工智能及Python应用第10章网络爬虫基础—电商数据爬取与解析
1任务导入2职业能力目标3知能达标4素养提升5视野拓展6任务评价目录1任务导入返回主目录
某公司是一家快速崛起的图书电商初创企业,面对日益激烈的市场竞争,公司意识到数据驱动的决策将成为未来发展的关键。为了精准把握市场趋势、优化运营策略并提升
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年湖南省教育系统后备干部考试参考试题(含答案)
- 航道清障潜水辅助工规程
- 2027届上海市复旦初级中学七上数学期末教学质量检测模拟试题含解析
- 2025-2026学年海南省海口市初中历史七年级期末上册提升培优拓展题附答案
- Oracle数据库基础测试题(含详细答案解析)
- OEC管理模式考核试题(含详细答案解析)
- 国家基层高血压防治管理指南(2026版)培训项目试题有答案
- 2026年法律职业资格(主观题)模拟题和答案分析
- 核医学检查临床适应症专家共识(2026版)
- 医疗不良事件根本原因分析实操模板标准共识
- 2026年应急系统工贸企业储存与使用危险化学品安全题库
- 胸外科术后康复治疗指南(2026年)
- 2026血脂异常管理指南解读与实践:科学降脂护心策略
- 空调设备运输与搬运施工方案
- 2025山东东营市文化旅游体育发展集团招聘6人笔试历年难易错考点试卷带答案解析2套试卷
- 重庆谈判和《双十协定》
- 2025年渠道维护工(技师)技能理论考试题库(含答案)
- 2025年度新闻记者职业资格考试新闻基础知识练习题库及答案
- 关务基础知识课件
- 马工程教材刑法分论课件
- DB31/T 1170-2019再生骨料混凝土砌块(砖)技术要求
评论
0/150
提交评论