Python程序设计基础及应用(微课版)课后题答案_第1页
Python程序设计基础及应用(微课版)课后题答案_第2页
Python程序设计基础及应用(微课版)课后题答案_第3页
Python程序设计基础及应用(微课版)课后题答案_第4页
Python程序设计基础及应用(微课版)课后题答案_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

《Python程序设计基础及应用》课后题答案第一章选择题A 2.C 3.B 4.A简答题列出3个Python第三方库numpy:数值计算、数组运算;pandas:数据分析、处理表格数;matplotlib:数据可视化、绘图Python的特点语法简洁、通俗易懂,代码可读性高;跨平台可移植,Windows/Linux/Mac都能运行;既支持面向过程,也支持面向对象编程;拥有丰富的第三方标准库和开源库;解释型语言,无需编译,写完可直接运行;开源免费、生态完善。Python的应用领域人工智能、机器学习、深度学习;数据分析、大数据处理;Web网站开发(后端开发);自动化运维、办公自动化、爬虫开发;游戏开发、桌面软件开发;科学计算、数学建模。三、编程题1.用print函数输出一首古诗#输出古诗《静夜思》print("\t\t静夜思")print("\t\t唐李白")print("床前明月光,",end="")print("疑是地上霜。")print("举头望明月,",end="")print("低头思故乡。")2.计算一组数的平均值和最大值#导入statistics模块(求平均值专用)importstatistics#定义一组数字nums=[10,20,30,40,50]#用statistics模块求平均值avg=statistics.mean(nums)#用内置函数max()求最大值max_val=max(nums)#输出结果print("平均值:",avg)print("最大值:",max_val)第二章一、单选题1.D 2.D 3.D 4.A 5.C6.A 7.C 8.C 9.D 10.C二、简答题1.简述input()函数和print()函数的用法print()输出函数用于向控制台输出内容,可以输出字符串、数字、变量、表达式结果等;支持同时输出多个数据,默认以空格分隔,默认末尾自动换行,也可修改分隔符和换行符。示例:print("HelloPython",123)input()输入函数用于接收用户在控制台输入的数据,默认接收的所有内容都转为字符串类型;可以在括号内填写提示文字,引导用户输入。若需要数字,要配合int()、float()做类型转换。示例:name=input("请输入姓名:")2.举例说明Python中常用的数据类型整型int:整数,如10、-5浮点型float:小数,如3.14、2.0布尔型bool:只有两个值True真、False假字符串str:用单引号/双引号包裹的文字,如"学生"、'abc'列表list:有序可变序列,[1,2,3,"a"]元组tuple:有序不可变序列,(10,20,30)字典dict:键值对形式,{"name":"张三","age":18}3.简述常见运算符的含义算术运算符:+、-、*、/、//、%、**用于加减乘除、整除、取余数、幂运算。关系(比较)运算符:>、<、>=、<=、==、!=用来比较两个数据大小、相等与否,结果返回布尔值True/False。赋值运算符:=、+=、-=、*=、/=用于给变量赋值或复合赋值,如a+=1等价于a=a+1。逻辑运算符:and、or、not。and两边都真才为真;or一边为真就为真;not取反。成员运算符:in、notin判断元素是否在序列(字符串、列表等)中。编程题1.定义三个变量并赋值a=10b=20.5c="HelloWorld!"2.输入三科成绩,计算总分和平均分(保留1位小数)#输入三科成绩并转为浮点型math_score=float(input("请输入数学成绩:"))chinese_score=float(input("请输入语文成绩:"))english_score=float(input("请输入英语成绩:"))#计算总分和平均分total=math_score+chinese_score+english_scoreavg=total/3#保留小数点后一位输出print("三科总分:%.1f"%total)print("平均分:%.1f"%avg)第三章单选题B 2.C 3.C 4.C 5.A 6.A 7.D 8.C二、简答题1.简述顺序结构、选择结构和循环结构的特点顺序结构程序自上而下依次逐条执行,不跳转、不分支、不重复,是最基础的程序结构。选择结构根据条件表达式的真假,选择执行不同的代码分支;满足条件执行一段代码,不满足则跳过或执行另一段代码,常用if、if-else、if-elif-else。循环结构满足条件时重复执行某一段代码,直到条件不成立结束;可以简化重复代码,减少冗余,常用for、while循环。2.简述for循环和while循环的执行过程for循环依次遍历序列(字符串、列表、range范围等)中的每一个元素,每取出一个元素就执行一次循环体代码;遍历完所有元素后,循环自动结束。适合已知循环次数或遍历容器数据。while循环先判断循环条件,条件为True则执行一次循环体代码;执行完再回头重新判断条件,重复往复;条件为False时,直接退出循环。适合循环次数不确定的场景。3.简述break和continue语句的执行过程break语句执行到时,立即终止当前所在的整个循环,跳出循环结构,直接执行循环后面的代码。continue语句执行时,跳过本次循环剩余的语句,直接回到循环条件判断的开头,进入下一次循环,不会终止整个循环。三、编程题1.判断输入整数是奇数还是偶数num=int(input("请输入一个整数:"))ifnum%2==0:print(f"{num}是偶数")else:print(f"{num}是奇数")2.输入3个数,找出最大值a=float(input("请输入第一个数:"))b=float(input("请输入第二个数:"))c=float(input("请输入第三个数:"))max_num=aifb>max_num:max_num=bifc>max_num:max_num=cprint("最大值为:",max_num)3.输入正整数n,求1~n累加和n=int(input("请输入一个正整数n:"))s=0foriinrange(1,n+1):s+=iprint(f"1到{n}的整数和为:{s}")4.输出斐波那契数列前n项,每行输出5项n=int(input("请输入要输出斐波那契数列的项数:"))#初始化前两项a,b=1,1count=0foriinrange(n):print(a,end="\t")count+=1#每行5项换行ifcount%5==0:print()a,b=b,a+b5.判断正整数n是否为完数python运行n=int(input("请输入一个正整数:"))sum_factor=0#找真因子(不包含自身)foriinrange(1,n):ifn%i==0:sum_factor+=iifsum_factor==n:print(f"{n}是完数")else:print(f"{n}不是完数")第四章单选题A 2.D 3.C 4.D 5.C 6.B 二、简答题1.请说明数值型数据类型的特点Python数值型包含整型int、浮点型float、布尔型bool、复数complex。特点:可以直接进行算术运算、关系运算;整型整数无大小限制,支持正负整数;浮点型带小数,可存储小数数值;布尔型只有True、False两个值,本质是特殊整数;数值型数据不可变,运算后产生新值。2.请举例说明字符串的编码格式和解码格式编码:字符串→字节,用encode()解码:字节→字符串,用decode()。常用编码格式:utf-8、gbk。示例:#编码s="Python"b=s.encode("utf-8")#解码s2=b.decode("utf-8")说明:编码是把文字转成计算机可存储的二进制字节;解码是把字节还原为可读字符串。3.简述字符串格式化的三种方法%占位符格式化用%s、%d、%f作为占位符,例:"姓名:%s,年龄:%d"%("张三",18)format()方法格式化用{}作占位符,搭配format传参,例:"我喜欢{}".format("Python")f-string格式化(Python3.6+)字符串前加f,{}内直接写变量,例:name="小明";print(f"名字:{name}")三、编程题1.趣味模板程序#接收用户输入name=input("请输入姓名:")place=input("请输入地点:")hobby=input("请输入爱好:")#模板组合输出print(f"可爱的{name},最喜欢在{place}地方进行{hobby}。")2.不使用count(),统计指定字符出现次数#定义字符串和要统计的字符s="Countthenumberofspaces."char="" #指定统计字符#计数器初始化为0num=0#遍历字符串逐个判断forcins:ifc==char:num+=1print(f"字符串中空格的数量为:{num}")第五章一、单选题1.C 2.D 3.C 4.A 5.B 6.B 7.C二、简答题1.简述列表和元组支持的方法列表list(可变序列)常用方法:增加:append()、extend()、insert()删除:del、pop()、remove()、clear()查找统计:index()、count()排序反转:sort()、reverse()元组tuple(不可变序列)元组元素不能增删改,只支持:index():查找元素下标count():统计元素出现次数2.简述字典和集合支持的方法字典dict获取:get()、keys()、values()、items()添加修改:直接赋值、update()删除:pop()、popitem()、clear()集合set添加:add()、update()删除:remove()、discard()、pop()、clear()集合运算:交集&、并集|、差集-、对称差集^。3.简述列表、元组、字典和集合的特点列表list有序、可变、允许元素重复、支持索引和切片,用[]定义。元组tuple有序、不可变、允许元素重复、支持索引和切片,用()定义。字典dict无序(Python3.7+插入有序)、以键值对存储、键唯一不可重复、键不可变,用{键:值}定义。集合set无序、元素唯一自动去重、无索引、元素必须是不可变类型,用{}定义,不能切片和下标访问。三、编程题1.列表整数转八进制并输出#创建5个元素的整数列表lst=[10,15,20,25,30]#遍历每个元素转为八进制fornuminlst: print(oct(num))2.列表推导式求平方、排序、反转numbers=[3,5,1,4,2]#列表推导式生成每个元素平方square_lst=[x**2forxinnumbers]print("元素平方列表:",square_lst)#原列表排序并打印numbers.sort()print("排序后:",numbers)#列表反转并打印numbers.reverse()print("反转后:",numbers)3.字典取值转元组、修改、get获取person={'name':'Alice','age':25,'city':'NewYork'}#所有值转为元组val_tuple=tuple(person.values())print("字典值组成的元组:",val_tuple)#修改city值person['city']='LosAngeles'#get方法获取ageage=person.get('age')print("获取年龄:",age)print("修改后的字典:",person)4.列表去重、成员判断、集合并集data=[1,2,2,3,4,4,5,5,5]#列表转集合去重s=set(data)print("去重后的集合:",s)#判断3是否在集合中print("元素3是否在集合中:",3ins)#创建新集合并求并集s2={6,7}union_set=s|s2print("两个集合并集:",union_set)5.生成20个随机数,前10升序、后10降序importrandom#生成20个1~100随机整数lst=[random.randint(1,100)for_inrange(20)]print("原始随机列表:",lst)#切分前10、后10个元素first=lst[:10]last=lst[10:]#前10升序,后10降序first.sort()last.sort(reverse=True)#合并new_lst=first+lastprint("处理后列表:",new_lst)第六章一、单选题1.D 2.C 3.B 4.A 5.A 6.B 7.A二、简答题1.简述Python中函数的特点函数是具有独立功能、可重复调用的代码块,提高代码复用性。简化程序结构,降低编程复杂度,便于阅读、维护和修改。使用def关键字定义,可设置形参,调用时传入实参。可以通过return返回结果,也可以无返回值。参数有:位置参数、默认参数、关键字参数、可变长度参数。还有匿名lambda函数。有局部变量、全局变量的作用域区分。2.简述形参和实参的联系和区别形参:定义函数时,括号里声明的变量,只起占位作用,不占用实际内存。实参:调用函数时,传入的具体值、变量或表达式,有实际数据和内存空间。函数调用时,实参的值会依次传递给对应形参。形参接收实参数据,参与函数内部运算,实现数据传递。3.如何正确编写递归函数必须设置递归终止条件,防止无限递归、栈溢出。把原问题拆解为规模更小的同类子问题。函数内部自身调用自身,每次递归向终止条件靠近。保证问题规模逐次缩小,最终能触发终止条件退出递归。合理设计返回值,让每层递归结果能向上层汇总。三、编程题1.编写函数判断整数是否为素数#定义素数判断函数defis_prime(n):ifn<2:returnFalseforiinrange(2,int(n**0.5)+1):ifn%i==0:returnFalsereturnTrue2.统计字符串各类字符个数,以元组返回defcount_str(s):upper=0#大写字母lower=0#小写字母digit=0#数字other=0#其他字符forchins:ifch.isupper():upper+=1elifch.islower():lower+=1elifch.isdigit():digit+=1else:other+=1#元组返回:大写、小写、数字、其他return(upper,lower,digit,other)3.自定义函数模拟内置sum()defmy_sum(iterable):total=0foriteminiterable:total+=itemreturntotal4.自定义函数模拟内置sorted()升序排序defmy_sorted(lst):#拷贝原列表,不修改原数据arr=lst.copy()n=len(arr)#冒泡排序模拟foriinrange(n):forjinrange(n-1-i):ifarr[j]>arr[j+1]:arr[j],arr[j+1]=arr[j+1],arr[j]returnarr5.数列1113591731…求第20项规律:从第4项开始,当前项=前三项之和defget_item(n):ifnin{1,2,3}:return1a,b,c=1,1,1foriinrange(4,n+1):a,b,c=b,c,a+b+creturnc第七章一、单选题1.B 2.C 3.D 4.C 5.A 6.A二、简答题1.解释类和对象的概念类:是具有相同属性和行为的一组对象的抽象模板,定义了数据属性和成员方法,是创建对象的蓝图。对象:是类实例化后的具体实体,拥有类中定义的属性和行为,一个类可以创建多个不同对象。2.比较类属性和实例属性不同定义位置不同:类属性在类内部、方法外定义;实例属性在**构造方法__init__**中用self定义。归属不同:类属性属于类,所有对象共享;实例属性属于单个对象,每个对象独立拥有。访问方式不同:类属性可通过类名或对象访问;实例属性只能通过对象访问。修改影响不同:类属性通过类名修改,所有对象都受影响;实例属性只影响当前自身对象,互不干扰。3.比较类方法、实例方法和静态方法的不同实例方法:第一个参数为self,代表实例对象;只能由对象调用;可以访问实例属性和类属性。类方法:用@classmethod装饰,第一个参数为cls,代表类;可通过类名或对象调用;只能访问类属性,不能直接访问实例属性。静态方法:用@staticmethod装饰,无默认参数;可通过类名或对象调用,不依赖类和实例,不能直接访问类属性和实例属性,当作普通工具函数使用。三、编程题1.学生类(Student)classStudent:def__init__(self,name,student_id,scores):=nameself.student_id=student_idself.scores=scoresdefcalculate_average(self):returnsum(self.scores)/len(self.scores)2.动物类与子类(Animal/Dog/Cat)classAnimal:defeat(self):print("动物需要吃东西")defsleep(self):print("动物需要睡觉")classDog(Animal):defbark(self):print("汪汪汪")classCat(Animal):defmeow(self):print("喵喵喵")3.图书类与图书馆类(Book/Library)classBook:def__init__(self,title,author,isbn):self.title=titleself.author=authorself.isbn=isbnself.is_borrowed=False#借阅状态classLibrary:def__init__(self):self.books=[]defadd_book(self,book):self.books.append(book)print(f"已添加图书:{book.title}")defborrow_book(self,isbn):forbookinself.books:ifbook.isbn==isbn:ifnotbook.is_borrowed:book.is_borrowed=Trueprint(f"借阅成功:{book.title}")else:print("该书已被借出")returnprint("未找到该图书")defreturn_book(self,isbn):forbookinself.books:ifbook.isbn==isbn:ifbook.is_borrowed:book.is_borrowed=Falseprint(f"归还成功:{book.title}")else:print("该书未被借出")returnprint("未找到该图书")#测试if__name__=="__main__":b1=Book("Python编程","小明","978123456")b2=Book("Java基础","小红","978654321")lib=Library()lib.add_book(b1)lib.add_book(b2)lib.borrow_book("978123456")lib.return_book("978123456")4.汽车类与跑车子类(Car/SportsCar)classCar:def__init__(self,brand,color):self.brand=brandself.color=colorself.speed=0#初始速度defaccelerate(self,increment):self.speed+=incrementprint(f"{self.brand}加速到{self.speed}km/h")classSportsCar(Car):def__init__(self,brand,color):super().__init__(brand,color)self.speed=50#更高初始速度defaccelerate(self,increment):self.speed+=increment*2#更强加速print(f"跑车{self.brand}加速到{self.speed}km/h")#测试if__name__=="__main__":c=Car("丰田","白色")c.accelerate(30)sc=SportsCar("法拉利","红色")sc.accelerate(40)第八章 一、单选题 1.C 2.A 3.D 4.D 5.A 6.B二、简答题1.文本文件和二进制文件的特点文本文件:以字符编码形式存储(UTF-8、GBK等),内容是人可读懂的文字、数字、符号。按行组织数据,自带换行符。打开模式用r、w、a,读写都是字符串类型。占用空间稍大,通用性强,可用记事本直接打开查看。二进制文件:以原始二进制字节存储,无字符编码转换。没有行的概念,不能按行读取。打开模式带b:rb、wb、ab,读写都是字节类型bytes。适合图片、视频、音频、程序、压缩包等;体积小、读写速度快,记事本打开会乱码。2.如何读写文本文件打开文件:用open(文件名,模式,encoding="utf-8"),文本模式:r读、w写、a追加。读文本:read():读取全部内容;readline():读取一行;readlines():读取所有行,返回列表。写文本:write(字符串):写入字符串;writelines(列表):批量写入多行字符串。关闭文件:用close(),或用with上下文管理器自动关闭。3.如何读写二进制文件打开文件:使用带b的模式:rb读二进制、wb写二进制、ab追加二进制,不用指定编码。读二进制:read(size)读取指定字节数,返回bytes字节数据。写二进制:write(字节数据),只能写入bytes类型,字符串需要先用encode()编码转字节。适合读写图片、音视频、exe、压缩包等非文本文件。三、编程题1.将古诗写入文本文件并读取输出#写入古诗到文件poem="""床前明月光,疑是地上霜。举头望明月,低头思故乡。"""#写入文件withopen("poem.txt","w",encoding="utf-8")asf:f.write(poem)#读取并输出withopen("poem.txt","r",encoding="utf-8")asf:content=f.read()print(content)2.字典数据写入JSON文件并读取importjson#定义数据data={"学号":1,"姓名":"李磊","成绩":98}#写入JSON文件withopen("score.json","w",encoding="utf-8")asf:json.dump(data,f,ensure_ascii=False,indent=4)#读取JSON文件withopen("score.json","r",encoding="utf-8")asf:result=json.load(f)print("读取的JSON数据:",result)3.递归搜索文件是否存在importosdefsearch_file(file_name,search_path):"""递归搜索文件:paramfile_name:要搜索的文件名:paramsearch_path:开始搜索的路径:return:存在返回True,否则False"""#遍历当前目录下的所有文件和文件夹foriteminos.listdir(search_path):item_path=os.path.join(search_path,item)#如果是文件且名称匹配ifos.path.isfile(item_path)anditem==file_name:returnTrue#如果是文件夹,递归搜索elifos.path.isdir(item_path):ifsearch_file(file_name,item_path):returnTruereturnFalse第九章 一、单选题 1.B 2.D 3.C 4.D 5.A 6.B 7.B二、简答题1.如何访问DataFrame的元素列索引访问:直接用df[列名]获取整列数据。loc标签索引:loc[行标签,列标签],按行列标签取值,支持切片。iloc位置索引:iloc[行下标,列下标],按数字位置取值。布尔索引:通过条件表达式筛选符合条件的行数据。at/iat:at按标签取单个值,iat按位置取单个值。2.如何访问ndarray数组中的元素下标索引:一维数组用arr[i],多维数组用arr[i,j]。切片访问:arr[起始:结束:步长],截取部分数组元素。整数数组索引:传入索引列表,获取指定多个元素。布尔索引:用条件判断筛选出满足条件的元素。花式索引:按自定义索引顺序选取元素。3.如何处理DataFrame中的缺失值检测缺失值:isnull()判断是否缺失,notnull()判断是否非缺失。删除缺失值:dropna():删除含缺失值的行或列。填充缺失值:fillna():用常数、均值、中位数、众数等填充缺失值。插值填充:interpolate():通过线性或算法插值拟合填充缺失值。替换缺失值:replace():将指定特殊值替换为标准缺失值后再处理。三、编程题1.创建1000×1000随机矩阵,计算迹、逆、特征值和特征向量importnumpyasnp#创建1000x1000随机矩阵mat=np.random.randn(1000,1000)#计算迹trace=np.trace(mat)print("矩阵的迹:",trace)#计算逆矩阵(必须方阵且可逆)try:inv_mat=np.linalg.inv(mat)print("逆矩阵形状:",inv_mat.shape)except:print("矩阵不可逆")#特征值&特征向量eigenvalues,eigenvectors=np.linalg.eig(mat)print("特征值形状:",eigenvalues.shape)print("特征向量形状:",eigenvectors.shape)2.Pandas读取CSV→转numpy→矩阵乘法&元素乘法importpandasaspdimportnumpyasnp#读取CSVdf=pd.read_csv("data.csv")#请确保文件存在#转numpy数组arr=df.values#取前5x5做演示a=arr[:5,:5]b=arr[:5,:5]#矩阵乘法mat_mul=np.dot(a,b)#元素乘法(对应相乘)elem_mul=a*bprint("矩阵乘法结果:\n",mat_mul)print("元素乘法结果:\n",elem_mul)3.创建100×100×100三维数组→切片取中间50→转DataFrameimportnumpyasnpimportpandasaspd#创建100x100x1003D数组arr_3d=np.random.randint(0,10,size=(100,100,100))#取每个维度中间50个元素slice_50=slice(25,75)mid=arr_3d[slice_50,slice_50,slice_50]#展平后转DataFramedf=pd.DataFrame(mid.reshape(-1,mid.shape[-1]))print("切片后形状:",mid.shape)print("DataFrame形状:",df.shape)4.创建10×10单位矩阵→转DataFrameimportnumpyasnpimportpandasaspd#单位矩阵unit_mat=np.eye(10)#每行作为DataFrame一行df_unit=pd.DataFrame(unit_mat)print(df_unit)5.10×10随机矩阵→DataFrame→合并→按列生成新DF→再合并importnumpyasnpimportpandasaspd#10x10随机矩阵mat=np.random.randn(10,10)#按行创建DFdf_row=pd.DataFrame(mat)#矩阵+DataFrame合并(行方向)combined1=np.concatenate([mat,df_row.values],axis=0)#按列创建新DFdf_col=pd.DataFrame(mat.T)#矩阵+DF合并(列方向)combined2=np.concatenate([mat,df_col.values.T],axis=1)print("行合并形状:",combined1.shape)print("列合并形状:",combined2.shape)第十章 一、单选题 1.B 2.D 3.C 4.A 5.C 6.B二、简答题1.简述爬虫的一般流程发起请求:构造HTTP/HTTPS请求,向目标网址发送请求,可携带请求头、参数、Cookie等。获取响应:接收服务器返回的响应内容,包括网页HTML、JSON、二进制数据等。解析数据:使用XPath、正则表达式、BeautifulSoup等工具,提取页面中需要的有效数据。保存数据:将提取的数据保存到文本文件、CSV、JSON、数据库等存储介质中。调度循环:分页或爬取多个链接,循环完成全站或批量数据爬取。2.简述常见的反爬虫技术请求头校验:检测User-Agent、Referer、Cookie,拒绝无浏览器标识的请求。IP限制封禁:短时间频繁请求,封禁IP或限制访问频率。验证码拦截:出现图形验证码、滑块验证码、短信验证码拦截爬虫。动态页面渲染:使用JavaScript异步加载数据,普通静态爬虫无法获取内容。网页结构伪装:随机改变标签名、class、id属性,干扰XPath和正则定位。接口加密:请求参数、返回数据加密,无法直接解析。会话与登录限制:必须登录、携带Token才能访问内容。3.简述常见的反扒应对方法伪装请求头:添加合法User-Agent、Referer、模拟浏览器请求。设置请求延时:time.sleep()降低访问频率,避免IP封禁。使用代理IP:更换不同IP地址,突破IP封禁和频率限制。携带Cookie/Token:模拟登录,保留会话状态正常访问。动态渲染爬取:使用Selenium、Playwright模拟真实浏览器加载JS页面。解析接口数据:抓包分析后台API接口,直接请求JSON接口获取数据。验证码识别:接入打码平台、使用图像识别破解验证码。灵活适配解析规则:弱化固定路径,用模糊匹配、contains适配页面结构变化。 三、编程题 1.使用lxml库爬取古龙武侠小说全集信息importrequestsfromlxmlimportetreeheaders={"User-Agent}":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/114.0.5735.289Safari/537.36"}defgetHTML(url): try: response=requests.get(url) text=response.text returntext except: print("爬取出错")defgetBookInfo(text): book_url={} selector=etree.HTML(text) book=selector.xpath('//ul[@class="co3"]/li/a/text()') url=selector.xpath('//ul[@class="co3"]/li/a/@href') foritem,urlinzip(book,url): book_url[item]=f"{url}" returnbook_urldefmain(): if__name__=="__main__": url="/author/gulong.html" text=getHTML(url) print(getBookInfo(text))main() 2.使用正则表达式爬取猫眼电影TOP100中的电影信息 importreimportrequestsdefgetHTML(url): headers={ "User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/114.0.5735.289Safari/537.36","Cookie":"__mta=244211002.1718086949804.1718087938723.1718096974873.12;uuid_n_v=v1;uuid=FAAB860027BA11EF819FC935B2C3306BEDC13AD4F88B4B95850B64B3BA5E9BEF;_csrf=54fb888b0a50f80f8e3e804c92a303003726c821aa4c752c035092968911353c;Hm_lvt_703e94591e87be68cc8da0da7cbd0be2=1718086949;_lxsdk_cuid=19005f65a86c8-0b57be9782449-6b325057-100200-19005f65a86c8;_lxsdk=FAAB860027BA11EF819FC935B2C3306BEDC13AD4F88B4B95850B64B3BA5E9BEF;__mta=244211002.1718086949804.1718086975970.1718087003074.5;Hm_lpvt_703e94591e87be68cc8da0da7cbd0be2=1718096975;_lxsdk_s=190068f5410-b2e-6b6-8ae%7C%7C2" } try: html=requests.get(url,headers=headers).text except: print("网页打开错误!") returnhtmldefgetMatchText(html,pattern=None):p=pile(pattern) returnp.findall(html)defmain(): if__name__=="__main__": url="/board/4"#第一页网页地址 html=getHTML(url) html=re.sub(r"\n","",html)#删除换行符 html=re.sub(r"","",html) film_name_pattern='<pclass="name"><a.*title="(.*?)"'#删除空格 film_name=getMatchText(html,film_name_pattern) film_star_pattern=r'<pclass="star">(.*?)</p>'#电影名模式 film_star=getMatchText(html,film_star_pattern)#提取电影名 #上映时间模式 film_releasetime_pattern='<pclass="releasetime">(.*?)</p>' #提取上映时间 film_releasetime=getMatchText(html,film_releasetime_pattern)#评分模式 film_score_pattern='.*?integer">(.*?)</i>.*?fraction">(.*?)</i>' film_score=getMatchText(html,film_score_pattern)#提取评分 film_score=[score[0]+score[1]forscoreinfilm_score]#组合评分 films=tuple(zip(film_name,film_star,film_releasetime,film_score)) print(films) 3.使用lxml爬取汽车论坛上的车身外观图片(只爬取第1页)importrequestsimportos.pathfromlxmlimportetree#定义抓取网页资源url="/pic/series/5279.html#pvareaid=3454438"rawhtml=requests.get(url).textselector=etree.HTML(rawhtml)#定位imgcars=selector.xpath('//div[@class="uibox-concarpic-list03"]/ul/li/a/img/@src')cars_addr=["https:"+itemforitemincarsifitem.find("https")==-1]try: ifnot(os.path.exists(r"d:\cars")): os.mkdir(r"d:\cars") i=1 foritemincars_addr: file=requests.get(item) withopen(r"d:\cars\song-"+str(i)+".jpg","wb")assong: song.write(file.content) i+=1except: print("数据存储失败!")print("图片存储完毕!")第十一章一、单选题1.D 2.C 3.A 4.D 5.C 6.C二、简答题1.简述Matplotlib绘图的一般流程导入绘图库importmatplotlib.pyplotasplt。设置中文字体、解决负号显示问题。创建画布与子图(figure()、subplot())。准备x、y轴绘图数据。调用绘图函数绘制图形(折线、柱状、散点等)。设置坐标轴标签、标题、图例、刻度范围。网格显示、图形样式美化。展示或保存图片(show()、savefig())。2.简述Seaborn绘图风格设置内容和方法设置内容:可设置整体绘图主题风格、背景网格、线条样式、配色方案、字体样式等,让图表更美观统一。设置方法:使用sns.set_style()设置背景风格,如白色网格、暗色、无网格等。使用sns.set_palette()设置配色方案。使用sns.set_context()设置图表尺寸、线条粗细。用sns.set()一次性批量设置风格、配色、尺寸等整体样式。3.各类统计图特点折线图展示数据随时间或有序维度的变化趋势、波动规律,适合看连续数据走势。柱状图用于不同类别数据的大小对比,直观展示各类别数值差异。饼图展示各部分占整体的比例构成、份额分布,只适合分类较少的场景。箱线图展示数据中位数、四分位数、最大值、最小值及异常值,用于分析数据分布和离群点。散点图反映两个变量之间的相关关系、分布聚集规律,判断线性或非线性关联。热力图用颜色深浅表示数值大小,适合展示相关性矩阵、二维表格数值密度,直观看变量相关强弱。三、编程题(1)绘制“花瓣宽度”和“花瓣宽度”,以及“花萼长度”与“花萼宽度”特征之间的散点图%matplotlibinlineimportmatplotlib.pyplotaspltimportseabornassns#设置中文字体(防止中文乱码)plt.rcParams["font.sans-serif"]=["SimHei"]plt.rcParams["axes.unicode_minus"]=Falseiris=sns.load_dataset("iris")sns.set(style="ticks")fig,axes=plt.subplots(1,2,figsize=(20,5))sns.swarmplot(x='petal_length',y="petal_width",ax=axes[0],data=iris,hue="species")plt.title("花瓣长度vs花瓣宽度")sns.swarmplot(x='sepal_length',y="sepal_width",ax=axes[1],data=iris,hue="species")plt.title("花萼长度vs花萼宽度")plt.tight_layout()plt.show()(2)绘制“花瓣宽度”和“花瓣宽度”特征的回归图,查看两个特征之间是否存在线性相关sns.lmplot("petal_length","petal_width",hue="species",markers=["x","o","s"],data=iris)plt.title("花瓣长度与花瓣宽度回归图")plt.show()从回归图上可以看出这两个特征之间是线性相关的。第十二章1.数据分析的基本步骤+Python库+重要函数(1)数据获取库:pandas函数:pd.read_csv()pd.read_excel()pd.read_sql()(2)数据预处理(清洗)库:pandas、numpy函数:()、df.describe()df.isnull().sum()查看缺失值df.dropna()删除缺失值df.fillna()填充缺失值df.duplicated()

温馨提示

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

评论

0/150

提交评论