版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Python程序设计任务式教程(微课版)(AIGC助学)习题答案单元7【基础练习】判断题(正确的画“√”,错误的画“×”)1.×2.×3.√4.√【进阶挑战】1.根据要求编写程序。(1)反复请求用户输入整数,如果用户输入了整数以外的内容,程序应当捕获ValueError异常并输出“请重新输入”。(2)请求用户输入一个字符串和整数n,然后显示字符串中位于索引n处的字符。用户可能输入整数以外的内容,也可能输入超出范围的索引。请根据要求进行异常处理,不同的错误输出的错误信息应当不同。#==========(1)反复请求用户输入整数,捕获ValueError======================print("=====任务1:获取有效整数=====")defget_valid_integer():"""反复请求用户输入,直到输入有效整数为止捕获ValueError异常,提示用户重新输入"""whileTrue:#无限循环,直到返回有效整数try:#获取用户输入,并尝试转换为整数user_input=input("请输入一个整数:")valid_num=int(user_input)#转换成功,返回整数,结束循环returnvalid_numexceptValueError:#转换失败,捕获ValueError,提示重新输入print("请重新输入")#调用函数,获取有效整数并打印结果final_num=get_valid_integer()print(f"你输入的有效整数是:{final_num}\n")#==========(2)输入字符串和索引n,安全访问字符,区分不同异常======================print("=====任务2:安全访问字符串索引=====")defget_char_from_string():"""请求用户输入字符串和索引n,访问对应字符处理两种异常:ValueError(索引非整数)、IndexError(索引超出范围)"""try:#步骤1:获取用户输入的字符串user_str=input("请输入一个字符串:")#步骤2:获取用户输入的索引,并尝试转换为整数(可能触发ValueError)index_input=input("请输入要访问的索引n(整数):")n=int(index_input)#步骤3:访问字符串索引n(可能触发IndexError)target_char=user_str[n]#步骤4:所有正常,打印结果print(f"字符串'{user_str}'索引{n}处的字符是:{target_char}")exceptValueError:#捕获:索引输入无法转换为整数的异常print(f"错误:输入的索引'{index_input}'不是有效整数,请输入整数类型的索引")exceptIndexError:#捕获:索引超出字符串范围的异常print(f"错误:索引{n}超出范围,该字符串长度为{len(user_str)},有效索引范围是0~{len(user_str)-1}")#调用函数,执行字符串索引访问操作get_char_from_string()2.在文件读写操作中添加异常处理代码,确保文件操作代码的健壮性。defrobust_file_operation():"""健壮的文件读写操作,包含完善的异常处理涵盖:文件写入、文件读取,处理多种常见文件操作异常"""#定义测试文件名和测试内容file_name="test_file.txt"test_content="这是用于测试文件读写异常处理的测试内容\nHello,PythonFileOperation!"#===========第一部分:文件写入操作+异常处理======================print("=====开始执行文件写入操作=====")try:#使用with语句管理文件资源(自动关闭文件,即使发生异常也能安全释放句柄)withopen(file_name,"w",encoding="utf-8")asf:f.write(test_content)print(f"文件写入成功!已向{file_name}写入测试内容")exceptFileNotFoundError:#异常场景:文件路径不存在(如写入"不存在的文件夹/test.txt")print(f"写入失败:文件路径不存在,无法创建/写入文件{file_name}")exceptPermissionError:#异常场景:无文件写入权限(如写入系统保护目录、只读文件)print(f"写入失败:没有权限写入文件{file_name}(可能是只读文件或系统保护目录)")exceptUnicodeEncodeError:#异常场景:内容包含无法用指定编码(utf-8)编码的字符print(f"写入失败:文件内容包含无法用utf-8编码的字符,无法写入")exceptOSErrorase:#异常场景:其他操作系统相关错误(如文件名非法、磁盘满)print(f"写入失败:操作系统错误-{str(e)}")exceptExceptionase:#兜底异常:捕获所有未预见的错误,防止程序崩溃print(f"写入失败:未知错误-{str(e)}")print("-"*60+"\n")#=========第二部分:文件读取操作+异常处理======================print("=====开始执行文件读取操作=====")try:#使用with语句管理文件资源,自动关闭文件withopen(file_name,"r",encoding="utf-8")asf:content=f.read()print(f"文件读取成功!{file_name}的内容如下:")print("-"*40)print(content)print("-"*40)exceptFileNotFoundError:#异常场景:文件不存在(最常见的读取异常)print(f"读取失败:文件{file_name}不存在,请先确认文件是否存在")exceptPermissionError:#异常场景:无文件读取权限print(f"读取失败:没有权限读取文件{file_name}")exceptUnicodeDecodeError:#异常场景:文件编码与指定编码(utf-8)不匹配(如读取gbk编码的文件)print(f"读取失败:文件{file_name}不是utf-8编码,无法用utf-8解码(可尝试gbk编码)")exceptOSErrorase:#异常场景:其他操作系统相关错误print(f"读取失败:操作系统错误-{str(e)}")exceptExceptionase:#兜底异常:捕获所有未预见的错误print(f"读取失败:未知错误-{str(e)}")#调用函数,执行健壮的文件读写操作if__name__=="__main__":robust_file_operation()3.使用第三方库时,处理库可能抛出的异常。#导入两个常用内置库及其异常类importjsonprint("=====示例:内置json库异常处理=====")defjson_operation_demo():"""演示内置json库的常见操作和异常处理包含:JSON字符串解析、Python对象序列化"""#测试数据valid_json_str='{"name":"张三","age":20,"score":85.5}'#合法JSON字符串invalid_json_str='{"name":"张三","age":20,"score":85.5}'#故意写错(缺少闭合引号,非法JSON)non_json_data=[1,2,3,{"key":"value"}]#合法Python对象#场景1:解析JSON字符串(loads())print("---场景1:解析JSON字符串---")try:#尝试解析合法JSONresult1=json.loads(valid_json_str)print(f"合法JSON解析成功:{result1}")#尝试解析非法JSON(触发异常)result2=json.loads(invalid_json_str[:-1])#截取掉最后一个引号,制造非法JSONprint(f"非法JSON解析成功:{result2}")exceptjson.JSONDecodeErrorase:#核心异常:JSON格式错误,无法解析(json库的核心自定义异常)error_msg=f"异常:JSON解析失败-{str(e)}(位置:{e.pos},行:{e.lineno},列:{e.colno})"print(error_msg)#场景2:Python对象序列化为JSON字符串(dumps())print("\n---场景2:Python对象序列化JSON---")try:#正常序列化json_str=json.dumps(non_json_data,ensure_ascii=False,indent=2)print(f"Python对象序列化成功:\n{json_str}")exceptTypeErrorase:#常见异常:Python对象包含无法序列化的类型(如自定义对象、函数)error_msg=f"异常:JSON序列化失败-{str(e)}(包含无法序列化的对象类型)"print(error_msg)exceptExceptionase:#兜底异常:捕获其他未知错误error_msg=f"异常:JSON操作未知错误-{str(e)}"print(error_msg)#调用两个示例函数if__name__=="__main__":json_operation_demo()4.在异常处理中添加日志记录,记录异常发生的详情。importloggingimportjson#=========第一步:配置日志记录(全局初始化,仅需执行一次)======================defconfigure_logging():"""配置日志记录规则:1.日志保存到本地文件(exception_details.log)2.日志格式包含:时间、日志级别、异常信息、报错文件、报错行号3.日志级别设置为ERROR(只记录错误及以上级别的日志,过滤无关信息)"""logging.basicConfig(#1.日志文件保存路径(当前目录下生成exception_details.log)filename="exception_details.log",#2.日志级别:DEBUG<INFO<WARNING<ERROR<CRITICAL,这里只记录ERROR及以上level=logging.ERROR,#3.日志格式(关键:包含足够的异常详情,方便排查)format="%(asctime)s-%(levelname)s-文件名:%(filename)s-行号:%(lineno)d-异常详情:%(message)s",#4.时间格式(清晰可读)datefmt="%Y-%m-%d%H:%M:%S",#5.可选:追加模式写入(避免每次运行覆盖旧日志,默认就是'a'追加模式)filemode="a")#======================第二步:在异常处理中添加日志记录======================defdemo_exception_with_logging():"""演示两个常见场景的异常处理+日志记录:1.JSON解析异常2.模拟文件读取异常"""#测试数据invalid_json_str='{"name":"张三","age":20,"score":85.5'#非法JSON(缺少闭合引号)non_exist_file="不存在的文件.txt"#不存在的文件#场景1:JSON解析异常+日志记录print("=====场景1:JSON解析操作=====")try:#尝试解析非法JSONjson_result=json.loads(invalid_json_str)print(f"JSON解析成功:{json_result}")exceptjson.JSONDecodeErrorase:#1.控制台输出友好提示(给用户/使用者看)console_msg=f"控制台提示:JSON格式错误,无法解析!"print(console_msg)#2.日志记录详细异常信息(给开发者/后续排查看,使用logging.error())log_msg=f"JSON解析失败-错误原因:{str(e)}-出错位置:行{e.lineno},列{e.colno},偏移量{e.pos}-待解析内容:{invalid_json_str}"logging.error(log_msg)#写入错误日志到文件print("\n"+"-"*60+"\n")#场景2:模拟文件读取异常+日志记录print("=====场景2:文件读取操作=====")try:#尝试读取不存在的文件withopen(non_exist_file,"r",encoding="utf-8")asf:content=f.read()print(f"文件读取成功:{content}")exceptFileNotFoundErrorase:#1.控制台输出友好提示console_msg=f"控制台提示:文件不存在,无法读取!"print(console_msg)#2.日志记录详细异常信息log_msg=f"文件读取失败-错误原因:{str(e)}-待读取文件名:{non_exist_file}"logging.error(log_msg)#写入错误日志到文件exceptExceptionase:#兜底异常+日志记录console_msg=f"控制台提示:文件操作发生未知错误!"print(console_msg)log_msg=f"文件操作未知错误-错误原因:{str(e)}-待读取文件名:{non_exist_file}"logging.error(log_msg)#写入错误日志到文件#======================第三步:执行程序======================if__name__=="__main__":#先配置日志(全局仅需执行一次)configure_logging()#再执行异常处理演示demo_exception_with_logging()#最后提示日志文件位置print("\n=====操作执行完毕=====")print(f"异常日志已保存到当前目录下的「exception_details.log」文件中,可打开查看详细信息")5.在访问索引位置(如列表索引、字典键访问)时添加异常处理代码。#======================场景1:列表索引访问的异常处理======================print("=====场景1:列表索引访问异常处理=====")deflist_index_access_demo():"""演示列表索引访问的常见异常:1.IndexError:索引超出列表范围(最核心)2.ValueError:索引输入非整数(用户输入场景)"""#定义一个测试列表my_list=["苹果","香蕉","橙子","葡萄","芒果"]print(f"当前测试列表:{my_list}")print(f"列表长度:{len(my_list)},有效索引范围:0~{len(my_list)-1}")whileTrue:try:#提示用户输入索引index_input=input("\n请输入要访问的列表索引(输入'q'退出):")#退出逻辑ifindex_input.lower()=='q':print("退出列表访问操作~")break#转换输入为整数(可能触发ValueError)target_index=int(index_input)#访问列表索引(可能触发IndexError)list_value=my_list[target_index]#访问成功,打印结果print(f"访问成功!列表索引{target_index}对应的元素是:{list_value}")exceptValueError:#捕获:输入无法转换为整数的异常error_msg=f"错误:输入的'{index_input}'不是有效整数,请输入数字索引!"print(error_msg)exceptIndexError:#捕获:索引超出列表范围的异常error_msg=f"错误:索引{target_index}超出列表范围!有效索引范围是0~{len(my_list)-1}"print(error_msg)exceptExceptionase:#兜底异常:捕获其他未知错误error_msg=f"错误:发生未知异常-{str(e)}"print(error_msg)break#======================场景2:字典键访问的异常处理======================print("\n"+"="*60+"\n")print("=====场景2:字典键访问异常处理=====")defdict_key_access_demo():"""演示字典键访问的常见异常:1.KeyError:访问不存在的键(最核心)同时演示两种避免KeyError的方式:-方式1:异常处理(推荐,灵活度高)-方式2:使用dict.get()方法(简洁,适合获取默认值场景)"""#定义一个测试字典(学生信息)my_dict={"name":"张三","age":20,"score":85.5,"gender":"男"}print(f"当前测试字典:{my_dict}")print(f"字典所有有效键:{list(my_dict.keys())}")whileTrue:try:#提示用户输入要访问的键key_input=input("\n请输入要访问的字典键(输入'q'退出):")#退出逻辑ifkey_input.lower()=='q':print("退出字典访问操作~")break#方式1:直接访问键(可能触发KeyError),添加异常处理dict_value=my_dict[key_input]#访问成功,打印结果print(f"访问成功!字典键'{key_input}'对应的值是:{dict_value}")exceptKeyError:#捕获:访问不存在的键的异常error_msg=f"错误:字典中不存在键'{key_input}'!有效键是{list(my_dict.keys())}"print(error_msg)#额外演示:方式2-使用dict.get()方法避免KeyError(返回默认值,不抛异常)default_value=my_dict.get(key_input,"默认值(键不存在)")print(f"补充:使用get()方法获取结果:{default_value}")exceptExceptionase:#兜底异常:捕获其他未知错误error_msg=f"错误:发生未知异常-{str(e)}"print(error_msg)break#======================执行演示函数======================if__name__=="__main__":#先执行列表索引访问演示list_index_access_demo()#再执行字典键访问演示dict_key_access_demo()
单元8【基础练习】一、选择题ABC二、填空题1.①答案:cur.execute(sql1)②答案:cur.execute(sql2,('1',))③答案:cur.fetchone()2.①答案:cur.executemany(sql,lst1)②答案:cur.execute(sql,item)③答案:data=cur.fetchall()【进阶挑战】按要求完成对数据库的操作。(1)编写代码连接到SQLite数据库,如果数据库文件不存在,则自动创建。(2)使用CREATETABLE语句创建一张表,并定义列的数据类型。(3)编写代码向表中插入一行或多行数据。(4)使用SELECT语句查询表中的所有数据,并输出结果。(5)修改SELECT语句,添加条件来筛选特定的数据。(6)使用UPDATE语句更新表中的现有数据。(7)使用DELETE语句从表中删除数据。(8)使用参数化查询语句来防止SQL注入,并提高查询的灵活性。#导入Python内置的sqlite3模块importsqlite3#==============(1)连接SQLite数据库(不存在则自动创建)======================print("=====(1)连接SQLite数据库=====")#连接数据库(指定数据库文件名为student.db,当前目录下创建,若存在则直接连接)#conn:数据库连接对象,用于操作数据库conn=sqlite3.connect("student.db")#创建游标对象(cursor),用于执行SQL语句cursor=conn.cursor()print("成功连接/创建SQLite数据库(student.db)")#============(2)使用CREATETABLE创建表并定义列数据类型======================print("\n=====(2)创建数据表=====")try:#定义CREATETABLE语句,创建学生表(student)#列定义:id(主键,自增)、name(姓名,文本)、age(年龄,整数)、score(成绩,浮点数)、gender(性别,文本)create_table_sql="""CREATETABLEIFNOTEXISTSstudent(idINTEGERPRIMARYKEYAUTOINCREMENT,nameTEXTNOTNULL,ageINTEGERNOTNULL,scoreREAL,genderTEXTDEFAULT'未知')"""#执行SQL语句cursor.execute(create_table_sql)#提交事务(建表、增删改操作需要提交事务才能生效)mit()print("成功创建student表(若表已存在则不重复创建)")exceptExceptionase:print(f"创建表失败:{e}")#发生错误时回滚事务conn.rollback()#============(3)向表中插入一行或多行数据======================print("\n=====(3)插入数据=====")try:#方式1:插入单行数据insert_single_sql="""INSERTINTOstudent(name,age,score,gender)VALUES('张三',20,85.5,'男')"""cursor.execute(insert_single_sql)#方式2:插入多行数据(executemany()+数据列表)insert_many_sql="""INSERTINTOstudent(name,age,score,gender)VALUES(?,?,?,?)"""#准备多行数据(列表嵌套元组,每个元组对应一行数据)multi_data=[('李四',21,92.0,'男'),('王五',19,78.0,'女'),('赵六',22,90.5,'男')]cursor.executemany(insert_many_sql,multi_data)#提交事务mit()print(f"成功插入数据,共插入{cursor.rowcount+1}行(单行+多行)")#rowcount返回executemany影响的行数exceptExceptionase:print(f"插入数据失败:{e}")conn.rollback()#========(4)使用SELECT查询表中所有数据并输出======================print("\n=====(4)查询所有数据=====")try:#定义SELECT语句,查询所有数据select_all_sql="SELECT*FROMstudent"#执行查询语句cursor.execute(select_all_sql)#获取所有查询结果(fetchall()返回列表,每个元素是对应一行数据的元组)all_data=cursor.fetchall()#输出查询结果print("student表所有数据:")#先输出列名(可选,提升可读性)col_names=[desc[0]fordescincursor.description]print("\t".join(col_names))print("-"*50)#输出每行数据forrowinall_data:print("\t".join(map(str,row)))exceptExceptionase:print(f"查询所有数据失败:{e}")#===========(5)修改SELECT语句,添加条件筛选特定数据======================print("\n=====(5)条件筛选查询=====")try:#示例1:筛选成绩>=85分的学生select_cond1_sql="SELECT*FROMstudentWHEREscore>=85"cursor.execute(select_cond1_sql)high_score_data=cursor.fetchall()print("条件1:成绩>=85分的学生:")print("\t".join(col_names))print("-"*50)forrowinhigh_score_data:print("\t".join(map(str,row)))#示例2:筛选性别为"女"且年龄<20的学生select_cond2_sql="SELECTname,age,scoreFROMstudentWHEREgender='女'ANDage<20"cursor.execute(select_cond2_sql)female_data=cursor.fetchall()print("\n条件2:性别为女且年龄<20的学生(仅显示姓名、年龄、成绩):")print("\t".join(['name','age','score']))print("-"*30)forrowinfemale_data:print("\t".join(map(str,row)))exceptExceptionase:print(f"条件查询失败:{e}")#======================(6)使用UPDATE语句更新现有数据======================print("\n=====(6)更新数据=====")try:#示例:将"张三"的成绩更新为90.0,年龄增加1岁update_sql="""UPDATEstudentSETscore=90.0,age=age+1WHEREname='张三'"""cursor.execute(update_sql)mit()#验证更新结果cursor.execute("SELECT*FROMstudentWHEREname='张三'")updated_data=cursor.fetchone()#fetchone()返回单行结果print(f"更新后张三的数据:{updated_data}")print(f"成功更新{cursor.rowcount}行数据")exceptExceptionase:print(f"更新数据失败:{e}")conn.rollback()#======================(7)使用DELETE语句删除数据======================print("\n=====(7)删除数据=====")try:#示例:删除成绩<80分的学生delete_sql="DELETEFROMstudentWHEREscore<80"cursor.execute(delete_sql)mit()#验证删除结果(查询所有数据)cursor.execute("SELECT*FROMstudent")remaining_data=cursor.fetchall()print(f"删除后表中剩余数据:")print("\t".join(col_names))print("-"*50)forrowinremaining_data:print("\t".join(map(str,row)))print(f"成功删除{cursor.rowcount}行数据")exceptExceptionase:print(f"删除数据失败:{e}")conn.rollback()#===========(8)使用参数化查询防止SQL注入,提高灵活性======================print("\n=====(8)参数化查询(防SQL注入)=====")try:#核心:参数化查询使用?作为占位符,不直接拼接字符串,避免SQL注入风险#示例1:参数化查询(查询指定姓名和性别的学生)target_name="李四"target_gender="男"param_select_sql="SELECT*FROMstudentWHEREname=?ANDgender=?"cursor.execute(param_select_sql,(target_name,target_gender))#第二个参数是元组,传递参数值param_data=cursor.fetchone()print(f"参数化查询结果(姓名={target_name},性别={target_gender}):{param_data}")#示例2:参数化插入(新增一个学生,参数动态传入)new_student=("钱七",23,95.0,"男")param_insert_sql="INSERTINTOstudent(name,age,score,gender)VALUES(?,?,?,?)"cursor.execute(param_insert_sql,new_student)mit()print(f"参数化插入成功,新增学生数据:{new_student}")#示例3:参数化更新(动态更新指定id学生的成绩)target_id=1new_score=98.0param_update_sql="UPDATEstudentSETscore=?WHEREid=?"cursor.execute(param_update_sql,(new_score,target_id))mit()cursor.execute("SELECT*FROMstudentWHEREid=?",(target_id,))param_updated_data=cursor.fetchone()print(f"参数化更新后(id={target_id}):{param_updated_data}")exceptExceptionase:print(f"参数化查询失败:{e}")conn.rollback()#======================最后:关闭游标和数据库连接======================print("\n=====关闭数据库连接=====")#关闭游标cursor.close()#关闭数据库连接conn.close()print("成功关闭数据库连接")
单元9【基础练习】1.针对NumPy库完成以下基础操作。(1)使用array()
创建一个一维的NumPy数组和一个多维的NumPy数组。(2)使用切片和索引来访问数组的特定元素或部分元素。(3)执行数组的算术运算,包括加法、减法、乘法和除法。(4)使用reshape()
更改数组的形状。#导入NumPy库,约定俗成简写为npimportnumpyasnp#======================(1)使用array()创建一维和多维数组======================print("=====(1)创建一维和多维NumPy数组=====")#1.创建一维数组(传入列表即可)one_d_arr=np.array([1,2,3,4,5,6])print("一维数组:")print(one_d_arr)print(f"一维数组形状:{one_d_arr.shape}")#查看数组形状print(f"一维数组数据类型:{one_d_arr.dtype}")#查看数组数据类型#2.创建多维数组(传入嵌套列表,这里以二维数组为例)two_d_arr=np.array([[1,2,3],[4,5,6],[7,8,9]])print("\n二维数组:")print(two_d_arr)print(f"二维数组形状:{two_d_arr.shape}")#形状为(行数,列数)print(f"二维数组数据类型:{two_d_arr.dtype}")#======================(2)使用切片和索引访问数组元素======================print("\n=====(2)索引和切片访问数组元素=====")#1.一维数组的索引和切片(与Python列表类似,索引从0开始)print("===一维数组操作===")print(f"一维数组索引3的元素:{one_d_arr[3]}")#访问单个元素print(f"一维数组切片[1:4](含头不含尾):{one_d_arr[1:4]}")#访问索引1~3的元素print(f"一维数组切片[::2](步长2):{one_d_arr[::2]}")#每隔1个元素取一个print(f"一维数组反向索引[-1]:{one_d_arr[-1]}")#访问最后一个元素#2.二维数组的索引和切片(格式:arr[行索引/切片,列索引/切片])print("\n===二维数组操作===")print(f"二维数组第1行第2列元素(索引[0,1]):{two_d_arr[0,1]}")print(f"二维数组第2行(索引[1]):{two_d_arr[1]}")print(f"二维数组前2行前2列(切片[0:2,0:2]):")print(two_d_arr[0:2,0:2])print(f"二维数组所有行的第1列(切片[:,0]):{two_d_arr[:,0]}")#============(3)数组的算术运算(加法、减法、乘法、除法)======================print("\n=====(3)数组算术运算=====")#准备两个形状相同的一维数组(形状不同会触发广播机制,新手先保证形状一致)arr_a=np.array([10,20,30,40])arr_b=np.array([1,2,3,4])print(f"数组a:{arr_a}")print(f"数组b:{arr_b}")#1.元素级算术运算(对应位置元素两两运算)add_result=arr_a+arr_b#加法sub_result=arr_a-arr_b#减法mul_result=arr_a*arr_b#乘法(元素级,非矩阵乘法)div_result=arr_a/arr_b#除法floor_div_result=arr_a//arr_b#整除(向下取整)pow_result=arr_a**2#平方运算print(f"\n加法结果:{add_result}")print(f"减法结果:{sub_result}")print(f"元素级乘法结果:{mul_result}")print(f"除法结果:{div_result}")print(f"整除结果:{floor_div_result}")print(f"数组a平方结果:{pow_result}")#2.数组与标量的运算(广播机制,标量与所有元素运算)scalar_mul=arr_a*2#数组所有元素乘以2print(f"\n数组a乘以标量2的结果:{scalar_mul}")#======================(4)使用reshape()更改数组形状======================print("\n=====(4)reshape()更改数组形状=====")#1.一维数组转为二维数组(注意:元素总数必须匹配,否则报错)one_d_arr_2=np.array([1,2,3,4,5,6])reshape_2d=one_d_arr_2.reshape(2,3)#转为2行3列print(f"一维数组:{one_d_arr_2}")print(f"转为2行3列二维数组:")print(reshape_2d)#2.二维数组转为一维数组(两种方式)reshape_1d_1=reshape_2d.reshape(-1)#reshape(-1)自动计算元素个数,转为一维reshape_1d_2=reshape_2d.flatten()#flatten()也可转为一维,更直观print(f"\n二维数组转回一维(reshape(-1)):{reshape_1d_1}")print(f"二维数组转回一维(flatten()):{reshape_1d_2}")#3.调整为其他形状(如3行2列)reshape_3d_2=one_d_arr_2.reshape(3,2)print(f"\n一维数组转为3行2列二维数组:")print(reshape_3d_2)2.针对Pandas库完成以下基础操作。(1)创建DataFrame。(2)从CSV文件读取数据和向CSV文件写入数据。(3)查看数据和选择数据。(4)修改和删除数据。#导入Pandas库,约定俗成简写为pdimportpandasaspdimportnumpyasnp#======================(1)创建DataFrame======================print("=====(1)创建DataFrame=====")#方式1:从字典创建(最常用,键为列名,值为列数据)df_dict=pd.DataFrame({"姓名":["张三","李四","王五","赵六"],"年龄":[20,22,21,23],"性别":["男","男","女","男"],"成绩":[85.5,92.0,78.3,90.7]})print("===从字典创建的DataFrame===")print(df_dict)#方式2:从NumPy数组创建(指定列名)arr=np.array([[24,"男",88.0],[25,"女",95.5]])df_arr=pd.DataFrame(arr,columns=["年龄","性别","成绩"],index=["钱七","孙八"])print("\n===从NumPy数组创建的DataFrame===")print(df_arr)#======================(2)CSV文件读写======================print("\n=====(2)CSV文件读写=====")#1.向CSV文件写入数据(将上面创建的df_dict写入本地)df_dict.to_csv("student_info.csv",index=False,encoding="utf-8-sig")#index=False:不写入行索引;encoding="utf-8-sig":解决中文乱码问题print("已将DataFrame写入student_info.csv文件(当前目录下)")#2.从CSV文件读取数据df_read=pd.read_csv("student_info.csv",encoding="utf-8-sig")print("\n===从CSV读取的数据===")print(df_read)#======================(3)查看数据和选择数据======================print("\n=====(3)查看和选择数据=====")#先使用从CSV读取的df_read进行操作print("===查看数据基本信息===")print(f"前2行数据(head(2)):")print(df_read.head(2))#查看前n行,默认前5行print(f"\n后2行数据(tail(2)):")print(df_read.tail(2))#查看后n行,默认后5行print(f"\n数据基本信息(info()):")df_()#查看数据类型、非空值数量等print(f"\n数据统计描述(describe()):")print(df_read.describe())#数值列的统计信息(均值、标准差等)print(f"\n数据列名(columns):{df_read.columns.tolist()}")print(f"\n数据形状(shape):{df_read.shape}")print("\n===选择数据===")#1.选择单列(两种方式)col_name=df_read["姓名"]#方式1:方括号+列名(推荐,支持特殊字符列名)col_age=df_read.age#方式2:点语法(列名不能有空格、特殊字符)print(f"单列(姓名):")print(col_name)#2.选择多列(传入列名列表)col_multi=df_read[["姓名","成绩"]]print(f"\n多列(姓名、成绩):")print(col_multi)#3.按行选择(iloc:按整数索引;loc:按标签索引)row_iloc=df_read.iloc[1]#按整数索引选择第2行row_loc=df_read.loc[0]#按标签索引选择第1行(默认标签与整数索引一致)print(f"\n按iloc选择第2行:")print(row_iloc)#4.按条件筛选(筛选成绩大于85的学生)df_filter=df_read[df_read["成绩"]>85]print(f"\n条件筛选(成绩>85):")print(df_filter)#======================(4)修改和删除数据======================print("\n=====(4)修改和删除数据=====")#先复制一份数据,避免修改原数据df_modify=df_read.copy()print("===原始数据(复制版)===")print(df_modify)#1.修改数据#方式1:修改单个元素df_modify.loc[0,"成绩"]=88.0#修改第1行的成绩为88.0#方式2:修改整列数据(成绩加2分)df_modify["成绩"]=df_modify["成绩"]+2#方式3:新增列(新增“等级”列,根据成绩判断)df_modify["等级"]=np.where(df_modify["成绩"]>=90,"优秀","良好")print(f"\n修改后数据(成绩修改+新增等级列):")print(df_modify)#2.删除数据#方式1:删除列(drop,axis=1)df_drop_col=df_modify.drop("性别",axis=1)print(f"\n删除列(性别)后:")print(df_drop_col)#方式2:删除行(drop,axis=0,删除第2行)df_drop_row=df_modify.drop(1,axis=0)print(f"\n删除行(第2行)后:")print(df_drop_row)#方式3:删除缺失值(这里无缺失值,演示语法)df_drop_na=df_modify.dropna()#删除包含缺失值的行print(f"\n删除缺失值后(无变化):")print(df_drop_na)3.针对Matplotlib库完成以下基础操作。(1)使用
matplotlib.pyplot
绘制折线图、条形图、直方图。(2)定制图表的标题、图例、标签和颜色。(3)将图表保存为图片或其他格式的文件。#导入Matplotlib.pyplot,约定俗成简写为pltimportmatplotlib.pyplotaspltimportnumpyasnp#解决中文显示问题(Windows/macOS/Linux通用配置)plt.rcParams["font.sans-serif"]=["SimHei"]#用黑体显示中文plt.rcParams["axes.unicode_minus"]=False#正常显示负号#======================(1)绘制折线图、条形图、直方图======================print("=====(1)绘制基础图表=====")#------------绘制折线图------------print("正在绘制折线图...")#准备数据x_line=np.linspace(0,10,100)#0到10之间生成100个均匀分布的点y_line=np.sin(x_line)#正弦函数值#创建画布(简单图表可直接绘图,自动创建画布)plt.figure(figsize=(8,5))#figsize设置画布大小(宽,高)plt.plot(x_line,y_line)#绘制折线图plt.title("折线图演示(正弦函数)")#后续会统一定制,这里先简单显示plt.tight_layout()plt.show()#显示图表#------------绘制条形图------------print("正在绘制条形图...")#准备数据x_bar=["张三","李四","王五","赵六"]y_bar=[85,92,78,90]#创建画布plt.figure(figsize=(8,5))plt.bar(x_bar,y_bar)#绘制垂直条形图(barh绘制水平条形图)plt.title("条形图演示(学生成绩)")plt.tight_layout()plt.show()#------------绘制直方图------------print("正在绘制直方图...")#准备数据(正态分布随机数)y_hist=np.random.randn(1000)#生成1000个标准正态分布的随机数#创建画布plt.figure(figsize=(8,5))plt.hist(y_hist,bins=30)#绘制直方图,bins设置分组数plt.title("直方图演示(标准正态分布)")plt.tight_layout()plt.show()#======================(2)定制图表的标题、图例、标签和颜色======================print("\n=====(2)定制图表样式=====")#准备数据(同时绘制两条折线,演示图例)x_custom=np.linspace(0,10,100)y1_custom=np.sin(x_custom)y2_custom=np.cos(x_custom)#创建画布plt.figure(figsize=(10,6))#绘制折线图,定制颜色、线条样式、标签(用于图例)plt.plot(x_custom,y1_custom,color="red",linestyle="-",linewidth=2,label="sin(x)")plt.plot(x_custom,y2_custom,color="blue",linestyle="--",linewidth=2,label="cos(x)")#定制标题plt.title("定制化图表演示(正弦+余弦函数)",fontsize=16)#fontsize设置字体大小#定制坐标轴标签plt.xlabel("X轴(自变量)",fontsize=12)plt.ylabel("Y轴(函数值)",fontsize=12)#定制图例(需在plot时设置label参数)plt.legend(loc="best",fontsize=10)#loc设置图例位置,best自动选择最优位置#定制网格(可选,提升可读性)plt.grid(True,alpha=0.3,linestyle=":")#alpha设置透明度,linestyle设置网格线条样式#调整布局plt.tight_layout()#显示图表plt.show()#======================(3)将图表保存为图片文件======================print("\n=====(3)保存图表=====")#重新绘制一个图表,保存到本地x_save=np.linspace(0,10,100)y_save=np.sin(x_save)#创建画布plt.figure(figsize=(10,6))plt.plot(x_save,y_save,color="green",label="sin(x)")plt.title("待保存的图表(正弦函数)",fontsize=16)plt.xlabel("X轴",fontsize=12)plt.ylabel("Y轴",fontsize=12)plt.legend()plt.grid(True,alpha=0.3)plt.tight_layout()#保存图表(保存操作必须在show()之前,否则会保存空白画布)plt.savefig("sin_chart.png",dpi=300,bbox_inches="tight")#dpi:设置图片分辨率,300为高清;bbox_inches="tight":去除图片周围白边print("图表已保存为sin_chart.png(当前目录下)")#显示图表plt.show()【进阶挑战】1.针对NumPy库完成以下进阶操作。(1)使用
sum()、mean()、max()等函数对数组进行统计运算。(2)对数组进行描述性统计分析,如计算标准差和方差。(3)使用
random
模块生成随机数和随机数组。(4)使用sort()对数组元素进行排序。#导入NumPy库,约定俗成简写为npimportnumpyasnp#==========(1)数组统计运算(sum()、mean()、max()等)======================#先创建一个二维数组(方便演示行/列统计,一维数组操作类似)arr=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])print("=====(1)数组统计运算=====")print("原始二维数组:")print(arr)#全局统计(整个数组的结果)total_sum=arr.sum()#总和total_mean=arr.mean()#平均值total_max=arr.max()#最大值total_min=arr.min()#最小值total_argmax=arr.argmax()#最大值的索引(扁平化后)print(f"\n全局总和:{total_sum}")print(f"全局平均值:{total_mean:.2f}")print(f"全局最大值:{total_max}")print(f"全局最小值:{total_min}")print(f"全局最大值索引(扁平化):{total_argmax}")#按轴统计(axis=0:按列统计,axis=1:按行统计)col_sum=arr.sum(axis=0)#列总和row_mean=arr.mean(axis=1)#行平均值print(f"\n按列总和:{col_sum}")print(f"按行平均值:{row_mean}")#======================(2)描述性统计(标准差、方差)======================print("\n=====(2)描述性统计(标准差、方差)=====")#全局标准差、方差std_global=arr.std()#标准差(总体标准差,ddof=0)var_global=arr.var()#方差(总体方差,ddof=0)#样本标准差、方差(ddof=1,用于抽样统计)std_sample=arr.std(ddof=1)var_sample=arr.var(ddof=1)#按轴计算标准差(按列)std_col=arr.std(axis=0)print(f"全局总体标准差:{std_global:.2f}")print(f"全局总体方差:{var_global:.2f}")print(f"全局样本标准差(ddof=1):{std_sample:.2f}")print(f"按列总体标准差:{std_col}")#======================(3)random模块生成随机数和随机数组======================print("\n=====(3)生成随机数和随机数组=====")#设置随机种子(保证结果可复现,每次运行生成相同的随机数)np.random.seed(42)#1.生成单个随机数(0~1之间的浮点数)rand_single=np.random.random()print(f"单个随机浮点数(0~1):{rand_single:.4f}")#2.生成指定形状的随机浮点数数组(0~1之间)rand_arr=np.random.random((3,4))#3行4列print(f"\n3行4列随机浮点数数组:")print(rand_arr)#3.生成正态分布随机数组(均值=0,标准差=1,标准正态分布)norm_arr=np.random.randn(2,5)#2行5列print(f"\n2行5列标准正态分布数组:")print(norm_arr)#4.生成指定范围的整数随机数组(low=起始值,high=终止值(不包含),size=形状)int_arr=np.random.randint(low=1,high=10,size=(3,3))#1~9之间的3行3列整数print(f"\n3行3列整数随机数组(1~9):")print(int_arr)#5.生成均匀分布随机数组(low=起始值,high=终止值,size=形状)uniform_arr=np.random.uniform(low=0,high=10,size=(2,2))print(f"\n2行2列均匀分布数组(0~10):
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年新科教版高中高二数学上册第一单元导数几何意义应用卷含答案
- 送配电线路检修工复测知识考核试卷含答案
- 球团原料工安全应急模拟考核试卷含答案
- 影视烟火特效员创新方法评优考核试卷含答案
- 重冶固体原料输送工安全专项模拟考核试卷含答案
- 2026年新科教版初中九年级科学下册第一单元生物遗传规律应用卷含答案
- 铸轧工安全检查模拟考核试卷含答案
- 重冶配液工风险评估与管理考核试卷含答案
- 武夷学院《C语言程序设计》课件-第1章C语言概述
- 新药临床试验中的多中心协作伦理规范
- 2026初级会计师《经济法基础》考前十页纸
- 2026年及未来5年市场数据中国戒烟产品行业市场深度研究及投资战略规划报告
- 简阳市中小企业融资担保有限公司2026年招聘金融科技部工作人员等岗位笔试参考题库及答案解析
- 2026上海市闵行区区管国企招聘42人备考题库含答案详解(精练)
- 输变电工程可行性研究内容深度规定(2025版)
- 2026中国疾病预防控制中心人事处招聘工作人员笔试备考试题及答案
- 2025年内蒙古鄂尔多斯市康巴什区事业单位考试题及答案解析
- 培训餐厅服务员
- 2026年工业无人机焊接技术报告
- 《城市体检工作手册》(试行)下载
- 2025年甘肃钢铁职业技术学院辅导员考试真题
评论
0/150
提交评论