单元检测卷题目与答案解析
一、单项选择题
-
题目:在批量重命名活动照片项目中,读取CSV报名表时需跳过标题行,应使用的函数是 ( )
- A. csv.skip()
- B. next(reader)
- C. reader.skip()
- D. csv.reader(skipheader=True)
答案:B
解析:在Python中,使用csv模块读取CSV文件时,next(reader)函数可以跳过CSV文件的标题行。reader是csv.reader()创建的读取器对象,调用next(reader)会读取并返回下一行,第一次调用时就是标题行,从而实现跳过标题行的功能。 -
题目:下列方法中,可用于合并"image folder"和"11006220501. jpg"路径的是
- A. image_folder+"/"+""11006220501. jpg"
- B. os.path.join(image_folder, "11006220501. jpg")
- C. os.listdir(image_folder)+"11006220501. jpg"
- D. os.getcwd()+ image_folder+"11006220501. jpg"
答案:B
解析:os.path.join()是Python中用于路径拼接的标准方法,它会根据操作系统自动选择正确的路径分隔符(Windows用"",Linux/Mac用"/"),确保路径格式正确。其他选项要么不是路径拼接方法,要么拼接方式不正确。 -
题目:批量重命名项目中,存储学生"学号-(班级,姓名)"映射的最佳数据结构是 ( )
- A.列表
- B.字典
- C.元组
- D.集合
答案:B
解析:字典是Python中用于存储键值对的数据结构,非常适合存储"学号-(班级,姓名)"这样的映射关系。学号作为键,(班级,姓名)作为值,可以通过学号快速查找到对应的班级和姓名信息,查询效率高。 -
题目:使用 os.path.splitext("22平面 丁×浩. JPEG")返回的结果是
- A.("22 平面 丁×浩", ". JPEG")
- B.("22 平面 丁×浩. JPEG", "")
- C.("22 平面", "丁×浩. JPEG")
- D.("22 平面 丁×浩", " J PEG ")
答案:A
解析:os.path.splitext()函数用于分割文件路径中的文件名和扩展名,返回一个元组,第一个元素是文件名(不含扩展名),第二个元素是扩展名(包括点号)。对于"22平面 丁×浩. JPEG",它会返回("22 平面 丁×浩", ". JPEG")。 -
题目:读取含中文字符的CSV 文件时,需在 open()函数中设置的编码格式是 ( )
- A. gbk
- B. utf-8
- C. ascii
- D. gb2312
答案:B
解析:utf-8是一种通用的字符编码,能够表示世界上大多数语言的字符,包括中文字符。在读取含中文字符的CSV文件时,通常使用utf-8编码格式。虽然gbk和gb2312也能表示中文字符,但utf-8更为通用和推荐。ascii编码无法表示中文字符。 -
题目:在活动数据可视化项目中,用于统计各班级参赛人数的 pandas方法是 ( )
- A. df["班级"]. mean()
- B. df["班级"]. count()
- C. df["班级"]. value_counts()
- D. df["班级"]. unique()
答案:C
解析:df["班级"].value_counts()是pandas中用于统计序列中各值出现次数的方法,非常适合统计各班级的参赛人数。它会返回一个Series,索引为班级名,值为对应班级的人数。mean()计算平均值,count()计算非空值数量,unique()返回唯一值列表,这些都不适合统计各班级人数。 -
题目:绘制"参赛学生性别分布"饼图时,用于显示百分比的参数是 ( )
- A. labels
- B. autopct
- C. color
- D. explode
答案:B
解析:在matplotlib中绘制饼图时,autopct参数用于控制饼图中各扇区百分比显示的格式。它可以是一个格式字符串,如"%.1f%%",表示显示一位小数的百分比。labels参数用于设置各扇区的标签,color用于设置颜色,explode用于设置扇区偏移。 -
题目:下列 matplotlib方法中,用于设置中文字体避免乱码的是 ( )
- A. plt.font.sans-serif=["SimHei"]
- B. plt.rcParams["font.sans-serif"]=["SimHei"]
- C. plt.set_font("SimHei")
- D. plt.font_set("SimHei")
答案:B
解析:在matplotlib中,通过修改plt.rcParams["font.sans-serif"]可以设置中文字体,避免中文显示乱码。SimHei是常用的中文字体之一。其他选项不是matplotlib中设置字体的正确方法。 -
题目:使用 pandas删除"姓名"字段缺失的记录,正确的代码是 ( )
- A. df_clean= df.dropna(subset=["姓名"])
- B. df_clean= df.drop_duplicates(subset=["姓名"])
- C. df_clean= df[df["姓名"]. notnull()]
- D. df_clean= df[df["姓名"]!= " " ]
答案:A
解析:df.dropna(subset=["姓名"])是pandas中删除指定列(这里是"姓名"列)包含缺失值的记录的标准方法。drop_duplicates()用于删除重复记录,notnull()用于筛选非空值但不删除原记录,!= " "只能删除空字符串但不能处理其他类型的缺失值(如NaN)。 -
题目:绘制"各班级平均评分趋势"折线图,应使用的 matplotlib函数是
- A. plt.bar()
- B. plt.pie()
- C. plt.plot()
- D. plt.boxplot()
答案:C
解析:plt.plot()是matplotlib中用于绘制折线图的函数,适合展示"各班级平均评分趋势"这样的连续数据变化。plt.bar()用于绘制柱状图,plt.pie()用于绘制饼图,plt.boxplot()用于绘制箱线图。 -
题目:在节日活动对对碰项目中,初始化 Pygame环境的函数是 ( )
- A. pygame.start()
- B. pygame.init()
- C. pygame.begin()
- D. pygame.load()
答案:B
解析:pygame.init()是Pygame库中用于初始化所有Pygame模块的函数。在使用Pygame开发游戏前,必须先调用此函数进行初始化。其他选项不是Pygame中的有效函数。 -
题目:创建800×800 尺寸游戏窗口的正确代码是
- A. screen= pygame.display.set_mode(800, 800)
- B. screen= pygame.display.set_mode([800, 800])
- C. screen= pygame.display.set_mode((800, 800))
- D. screen= pygame.display.set_mode("800×800")
答案:C
解析:pygame.display.set_mode()用于创建游戏窗口,其参数应是一个表示窗口尺寸的元组,如(800, 800)。选项A和B中参数不是元组,选项D中参数是字符串,都不正确。 -
题目:下列事件类型中,代表"鼠标左键点击"的是 ( )
- A. pygame.MOUSEMOTION
- B. pygame.MOUSEBUTTONUP
- C. pygame.MOUSEBUTTONDOWN
- D. pygame.CLICK
答案:C
解析:在Pygame中,pygame.MOUSEBUTTONDOWN事件表示鼠标按键按下,包括左键、右键和中键。要判断是否为左键点击,还需要检查event.button属性是否为1(左键)。pygame.MOUSEMOTION表示鼠标移动,pygame.MOUSEBUTTONUP表示鼠标按键释放,pygame.CLICK不是Pygame中的事件类型。 -
题目:加载"images/imageA1. png"图片并缩放到 200×200 的代码是 ( )
- A. img= pygame.image.load("images/imageA1. png")
scaled_img= pygame.transform.scale(img, (200,200)) - B. img= pygame.load_image("images/imageA1. png")
scaled_img= pygame.scale.transform(img, 200,200) - C. img= pygame.image.load(os.path.join("images", "imageA1. png"))
scaled_img= pygame.transform.scale(img, 200,200) - D. img= pygame.image.load("images/imageA1. png")
scaled_img= pygame.transform.resize(img,(200,200))
答案:A
解析:在Pygame中,pygame.image.load()用于加载图片,pygame.transform.scale()用于缩放图片,其参数应为图片对象和表示新尺寸的元组。选项A正确使用了这两个函数。选项B中函数名错误,选项C中scale函数参数格式错误,选项D中resize函数不是Pygame中的标准函数。 - A. img= pygame.image.load("images/imageA1. png")
-
题目:对对碰游戏中,判断所有图案是否匹配完成(均为 None)的核心逻辑是 ( )
- A.遍历网格,若所有图片对象为 None则匹配完成
- B.统计网格中图片数量,为0 则匹配完成
- C.对比前后两次网格状态,无变化则匹配完成
- D.检测鼠标点击次数,达到阈值则匹配完成
答案:A
解析:在对对碰游戏中,当所有图案都被匹配消除后,网格中的图片对象应该都为None。因此,遍历网格检查所有图片对象是否为None是判断游戏是否完成的正确逻辑。其他选项要么逻辑不正确,要么不能准确判断游戏是否完成。 -
题目:下列方法中,用于获取当前鼠标坐标的是 ( )
- A. pygame.mouse.get_pos()
- B. pygame.mouse.get_position()
- C. pygame.get_mouse_pos()
- D. pygame.mouse.pos()
答案:A
解析:pygame.mouse.get_pos()是Pygame中用于获取当前鼠标坐标的标准方法,返回一个包含x和y坐标的元组。其他选项不是Pygame中的有效函数。 -
题目:批量重命名项目中,执行 os.rename(old_path, new_path)时,若 old_path 不存在,会触发的错误是 ( )
- A. TypeError
- B. FileNotFoundError
- C. PermissionError
- D. ValueError
答案:B
解析:当使用os.rename()函数重命名文件时,如果指定的旧路径(old_path)不存在,Python会抛出FileNotFoundError异常。TypeError通常是由于参数类型错误,PermissionError是由于权限不足,ValueError是由于参数值无效。 -
题目:在数据可视化中,适合展示"各班级成绩分布(中位数、极值)"的图表类型是
- A.柱状图
- B.饼图
- C.折线图
- D.箱线图
答案:D
解析:箱线图(Boxplot)是一种用于展示数据分布情况的图表,它可以显示数据的中位数、四分位数、极值等统计信息,非常适合展示"各班级成绩分布(中位数、极值)"。柱状图适合比较不同类别的数值,饼图适合展示比例关系,折线图适合展示数据随时间的变化趋势。 -
题目:对对碰游戏中,打乱图片池顺序的正确代码是 ( )
- A. random.shuffle(image_pool)
- B. image_pool.shuffle()
- C. random.sort(image_pool)
- D. image_pool.random()
答案:A
解析:在Python中,random.shuffle()函数用于随机打乱列表的顺序,适合用于打乱图片池顺序。image_pool.shuffle()不是列表的方法,random.sort()不是random模块的函数,image_pool.random()也不是列表的方法。 -
题目:使用 pandas筛选"平均评分≥8"的参赛记录,正确的代码是 ( )
- A. df_high= df[df["平均评分"] >= 8 ]
- B. df_high= df.dropna(subset=["平均评分≥8"])
- C. df_high= df["平均评分"]. mean() >=8
- D. df_high= df[df["平均评分"] > 8]
答案:A
解析:在pandas中,使用布尔索引df[df["平均评分"] >= 8]可以筛选出"平均评分"列大于等于8的所有记录。选项B中dropna()用于删除缺失值,不是用于筛选条件。选项C计算的是平均值是否大于等于8,返回的是一个布尔值而不是DataFrame。选项D筛选的是大于8的记录,不包括等于8的情况。 -
题目:下列关于 with语句操作文件的描述,正确的是 ( )
- A.需手动关闭文件
- B.自动管理文件资源,避免泄露
- C.仅支持读取操作
- D.比 open()函数读取速度更快
答案:B
解析:with语句是Python中用于资源管理的上下文管理器,当使用with语句操作文件时,无论代码块中是否发生异常,文件都会在代码块执行完毕后自动关闭,从而避免资源泄露。with语句支持文件的读取和写入操作,与open()函数的读取速度没有直接关系。 -
题目:对对碰游戏中,渲染"恭喜通关成功"文本的代码是 ( )
- A. font= pygame.font.SysFont("SimHei", 58)
win_text= font.render("恭喜通关成功", True, (255,0,0)) - B. font= pygame.font.Font("SimHei", 58)
win_text= font.draw("恭喜通关成功", True,(255,0,0)) - C. font= pygame.font.SysFont("Arial", 58)
win_text= font.render("恭喜通关成功", True, "red") - D. font= pygame.font.SysFont("SimHei", 58)
win_text= font.write("恭喜通关成功", True,(255,0,0))
答案:A
解析:在Pygame中,渲染文本需要先创建字体对象,然后使用font.render()方法渲染文本。pygame.font.SysFont("SimHei", 58)创建了一个中文字体对象,font.render("恭喜通关成功", True, (255,0,0))将文本渲染为红色。选项B中Font()需要字体文件路径,draw()不是字体对象的方法。选项C中使用了英文字体Arial,且颜色参数应为RGB元组而不是字符串。选项D中write()不是字体对象的方法。 - A. font= pygame.font.SysFont("SimHei", 58)
-
题目:批量重命名项目中,筛选扩展名为".jpg"和".jpeg"的图片,正确的条件是 ( )
- A. ext in(".jpg", ".jpeg")
- B. ext.lower() in(".jpg", ".jpeg")
- C. ext.upper() in("JPG", "JPEG")
- D. ext in("jpg", "jpeg")
答案:B
解析:在筛选文件扩展名时,考虑到文件扩展名可能有大写和小写(如.JPG、.jpeg等),使用ext.lower()将扩展名统一转换为小写后再进行比较是最可靠的方法。选项A和D没有考虑大小写问题,选项C虽然可行但不如选项B直观。 -
题目:在数据可视化中,保存图表到"班级参赛人数. png"的代码是 ( )
- A. plt.savefig("班级参赛人数. png")
- B. plt.save("班级参赛人数. png")
- C. plt.storefig("班级参赛人数. png")
- D. plt.save_image("班级参赛人数. png")
答案:A
解析:在matplotlib中,plt.savefig()是用于保存图表到文件的标准方法。其他选项不是matplotlib中的有效函数。 -
题目:对对碰游戏中,更新整个屏幕显示的函数是 ( )
- A. pygame.display.update()
- B. pygame.display.flip()
- C. screen.refresh()
- D. screen.update()
答案:B
解析:在Pygame中,pygame.display.flip()用于更新整个屏幕显示,将所有绘制的内容显示出来。pygame.display.update()也可以更新屏幕,但它只更新屏幕的指定区域,而不是整个屏幕。screen.refresh()和screen.update()不是Pygame中的有效方法。 -
题目:使用 pandas计算"评审 1 评分"的平均值,正确的代码是 ( )
- A. avg_score= df["评审1评分"]. sum()
- B. avg_score= df["评审1评分"]. mean()
- C. avg_score= df["评审1评分"]. median()
- D. avg_score= df["评审1评分"]. count()
答案:B
解析:在pandas中,mean()方法用于计算序列的平均值,适合计算"评审1评分"的平均值。sum()计算总和,median()计算中位数,count()计算非空值数量。 -
题目:下列关于元组的描述,正确的是 ( )
- A.元素可修改
- B.用圆括号包裹
- C.可通过 append()添加元素
- D.比列表访问速度慢
答案:B
解析:元组是Python中的一种不可变序列,用圆括号包裹。元组的元素不可修改,也不能通过append()添加元素。由于元组的不可变性,其访问速度通常比列表快。 -
题目:对对碰游戏中,关闭 Pygame并终止程序的正确代码是 ( )
- A. pygame.quit()
sys.exit() - B. pygame.close()
sys.exit() - C. pygame.quit()
exit() - D. pygame.close()
exit()
答案:A
解析:在Pygame中,pygame.quit()用于关闭所有Pygame模块,sys.exit()用于终止程序。这是退出Pygame程序的标准方法。pygame.close()不是Pygame中的有效函数,exit()虽然可以终止程序,但不如sys.exit()标准。 - A. pygame.quit()
-
题目:批量重命名项目中,若照片文件正在被预览(占用状态),执行 os.rename()会 ( )
- A.正常重命名
- B.触发 PermissionError
- C.触发 FileNotFoundError
- D.覆盖文件
答案:B
解析:当文件正在被其他程序使用(占用状态)时,尝试重命名该文件会触发PermissionError异常,因为操作系统不允许对正在使用的文件进行重命名操作。 -
题目:在数据可视化中,同一画布绘制2行1列子图的代码是 ( )
- A. fig, axes= plt.subplots(2, 1)
- B. fig, axes= plt.subplots(1, 2)
- C. plt.subplot(2, 1)
- D. plt.subplot(1, 2)
答案:A
解析:在matplotlib中,plt.subplots(2, 1)用于创建一个包含2行1列子图的画布,返回画布和子图对象。plt.subplot(2, 1)用于选择或创建子图,但不返回子图对象。选项B创建的是1行2列的子图,选项D也是创建1行2列的子图。
二、多项选择题
-
题目:批量重命名活动照片项目中,筛选图片文件(. jpg/. jpeg/. png)的关键操作有 ( )
- A.使用 os.path.splitext()拆分文件名与扩展名
- B.用 ext.lower()统一扩展名大小写(如. JPEG→. jpeg)
- C.通过 os.path.isdir()判断是否为图片文件
- D.遍历文件夹时用 os.listdir()获取所有文件名称
答案:A, B, D
解析:在批量重命名项目中筛选图片文件时,需要使用os.path.splitext()拆分文件名与扩展名,用ext.lower()统一扩展名大小写以便比较,用os.listdir()获取文件夹中的所有文件名称。os.path.isdir()用于判断路径是否为目录,不是判断文件是否为图片文件的方法。 -
题目:下列关于 pandas数据统计的描述,正确的有 ( )
- A. df["评审评分"]. mean()计算评审评分的平均值
- B. df["班级"]. value_counts()统计每个班级的参赛人数
- C. df["性别"]. unique()返回性别字段的唯一值(如["男", "女"] )
- D. df["最终得分"]. sum()统计所有学生最终得分的中位数
答案:A, B, C
解析:df["评审评分"].mean()计算评审评分的平均值,df["班级"].value_counts()统计每个班级的参赛人数,df["性别"].unique()返回性别字段的唯一值,这些都是pandas中正确的数据统计方法。df["最终得分"].sum()计算的是总和,不是中位数,中位数应该使用median()方法。 -
题目:对对碰游戏中,处理鼠标点击事件的核心逻辑包括 ( )
- A.通过 pygame.event.get()捕获 pygame.MOUSEBUTTONDOWN事件
- B.用 pygame.mouse.get_pos()获取点击坐标
- C.判断点击坐标是否在图案区域内(x≤pos[0]≤x+tileSize 且 y≤pos[1]≤y+tileSize)
- D.直接移除点击的图案,无需判断是否匹配
答案:A, B, C
解析:在对对碰游戏中处理鼠标点击事件时,需要通过pygame.event.get()捕获pygame.MOUSEBUTTONDOWN事件,用pygame.mouse.get_pos()获取点击坐标,判断点击坐标是否在图案区域内。直接移除点击的图案而不判断是否匹配是不正确的游戏逻辑。 -
题目:下列 matplotlib 图表绘制的操作,错误的有 ( )
- A.绘制柱状图用 plt.pie()函数
- B.绘制折线图时用 marker="o"设置数据点样式
- C.保存图表用 plt.save()函数(而非 plt.savefig())
- D.设置中文字体用 plt.rcParams["font.sans-serif"]=["SimHei"]
答案:A, C
解析:在matplotlib中,绘制柱状图应该使用plt.bar()函数而不是plt.pie()(饼图函数),保存图表应该使用plt.savefig()而不是plt.save()。绘制折线图时用marker="o"设置数据点样式是正确的,设置中文字体用plt.rcParams["font.sans-serif"]=["SimHei"]也是正确的。 -
题目:下列属于 os模块文件操作功能的有 ( )
- A. os.path.join()拼接文件路径
- B. os.rename()实现文件重命名
- C. os.path.isfile()判断路径是否为文件
- D. pandas.read_csv()读取 CSV 文件
答案:A, B, C
解析:os.path.join()用于拼接文件路径,os.rename()用于文件重命名,os.path.isfile()用于判断路径是否为文件,这些都是os模块的文件操作功能。pandas.read_csv()是pandas库中的函数,不是os模块的功能。 -
题目:活动数据可视化项目中,适合用饼图展示的场景有 ( )
- A.各班级参赛人数占总人数的比例
- B.参赛学生性别分布(男/女占比)
- C.各评审给出的平均评分对比
- D.优秀学生(评分≥8)与普通学生的占比
答案:A, B, D
解析:饼图适合展示部分与整体的比例关系,如各班级参赛人数占总人数的比例、参赛学生性别分布、优秀学生与普通学生的占比。各评审给出的平均评分对比适合用柱状图而不是饼图。 -
题目:对对碰游戏中,图片池构建的正确操作有 ( )
- A.加载图片时用 pygame.image.load(),并通过 pygame.transform.scale()缩放至统一尺寸
- B.为每对匹配的图片分配相同的 imageId(如"龙舟 A"和"龙舟 B"均为1)
- C.直接用 os.listdir()加载图片文件夹,无需判断是否为图片文件
- D.用 random.shuffle()打乱图片池顺序,确保每次游戏图案位置不同
答案:A, B, D
解析:在对对碰游戏中构建图片池时,需要用pygame.image.load()加载图片,用pygame.transform.scale()缩放至统一尺寸,为每对匹配的图片分配相同的imageId以便判断匹配,用random.shuffle()打乱图片池顺序。直接用os.listdir()加载图片文件夹而不判断是否为图片文件可能导致加载非图片文件,是不正确的操作。 -
题目:下列关于 Python 数据结构的描述,错误的有 ( )
- A.列表(list)适合存储"学号-(班级,姓名)"的映射关系,查询速度快
- B.元组(tuple)的元素不可修改,适合存储固定的关联数据(如班级和姓名)
- C.字典(dict)的键可以是列表类型(如{{[1,2]: "value"} )
- D.集合(set)会自动去重,适合存储无重复要求的班级名称
答案:A, C
解析:列表(list)不适合存储"学号-(班级,姓名)"的映射关系,因为列表的查询速度较慢,字典更适合这种键值对映射。字典(dict)的键不能是列表类型,因为列表是可变的,不能作为字典的键。元组(tuple)的元素确实不可修改,适合存储固定的关联数据,集合(set)确实会自动去重,适合存储无重复要求的班级名称,这些都是正确的描述。 -
题目:批量重命名项目中,可能导致重命名失败的原因有 ( )
- A.执行 os.rename()时仅传入文件名,未提供完整路径(如"1100. jpg"而非 "img/1100. jpg")
- B.目标文件夹无写入权限
- C.新文件名包含系统禁止字符(如"*""?""/")
- D. CSV 文件中未找到照片对应的学号(无匹配信息)
答案:A, B, C
解析:在批量重命名项目中,执行os.rename()时仅传入文件名未提供完整路径、目标文件夹无写入权限、新文件名包含系统禁止字符都可能导致重命名失败。CSV文件中未找到照片对应的学号会导致无法确定新文件名,但不会直接导致os.rename()函数执行失败。 -
题目:下列属于项目功能拓展的合理方向有 ( )
- A.批量重命名项目中,添加"照片尺寸校验"(如宽高≥300 像素)
- B.数据可视化项目中,在同一画布添加"柱状图+折线图"组合,对比班级人数与平均评分
- C.对对碰游戏中,移除计时功能,简化游戏流程
- D.所有项目中,添加异常处理(如文件不存在、数据格式错误)
答案:A, B, D
解析:在项目功能拓展中,添加照片尺寸校验、在同一画布添加柱状图+折线图组合、添加异常处理都是合理的功能拓展方向。移除计时功能虽然简化了游戏流程,但通常会降低游戏的挑战性和趣味性,不是合理的功能拓展方向。
三、是非选择题
-
题目:CSV文件属于二进制文件,需用专用软件打开。 ( )
答案:错误
解析:CSV文件是文本文件,不是二进制文件。CSV文件可以用任何文本编辑器(如记事本、Notepad++等)打开,不需要专用软件。 -
题目:os.listdir("image_folder")会递归列出"image_folder"及其子文件夹下的所有文件。 ( )
答案:错误
解析:os.listdir()只会列出指定目录下的直接文件和子文件夹,不会递归列出子文件夹中的文件。要递归列出所有文件,需要使用os.walk()函数。 -
题目:pandas的 df["班级"].value_counts()返回结果的索引为班级名,值为对应人数。 ( )
答案:正确
解析:pandas的value_counts()方法会统计序列中各值的出现次数,返回一个Series对象,其中索引为原序列中的唯一值(这里是班级名),值为对应的出现次数(这里是人数)。 -
题目:对对碰游戏中,判断鼠标点击是否在图案区域内的条件是 x<= pos[0]<=x+tileSize or y<= pos[1]<=y+tileSize。 ( )
答案:错误
解析:判断鼠标点击是否在图案区域内的条件应该是x<=pos[0]<=x+tileSize AND y<=pos[1]<=y+tileSize,而不是OR。使用OR会导致只要鼠标在图案的横向或纵向范围内就认为点击了图案,这是不正确的。 -
题目:plt.savefig()需在 plt.show()之后执行,否则保存空白图。 ( )
答案:错误
解析:在matplotlib中,plt.savefig()应该在plt.show()之前执行,因为plt.show()会清空当前图形。如果在plt.show()之后执行plt.savefig(),保存的可能是空白图。 -
题目:批量重命名项目中,字典 studentInfo的键是姓名,值是(学号,班级)元组。 ( )
答案:错误
解析:在批量重命名项目中,通常字典studentInfo的键应该是学号,值是(班级,姓名)元组,因为我们需要通过学号查找对应的班级和姓名信息,而不是通过姓名查找学号和班级。 -
题目:pandas 的 read_csv()函数默认能正确读取含中文字符的CSV文件,无需设置 encoding 参数。 ( )
答案:错误
解析:pandas的read_csv()函数默认使用utf-8编码读取CSV文件,但如果CSV文件是使用其他编码(如gbk)保存的,可能会导致中文字符显示乱码。因此,读取含中文字符的CSV文件时,通常需要明确指定encoding参数,如encoding='utf-8'或encoding='gbk'。 -
题目:对对碰游戏中,pygame.event.get()仅能捕获鼠标点击事件,无法捕获退出事件。 ( )
答案:错误
解析:pygame.event.get()可以捕获所有类型的事件,包括鼠标点击事件(MOUSEBUTTONDOWN)、键盘事件(KEYDOWN)、窗口关闭事件(QUIT)等。要捕获退出事件,可以检查event.type是否等于pygame.QUIT。 -
题目:os.path.isfile("image.jpg")用于判断"image.jpg"是否为文件(非文件夹)。 ( )
答案:正确
解析:os.path.isfile()函数用于判断指定路径是否为文件(而不是文件夹)。如果路径存在且是文件,则返回True,否则返回False。 -
题目:数据可视化中,饼图的 explode参数用于设置各扇区的颜色。 ( )
答案:错误
解析:在matplotlib中,饼图的explode参数用于设置各扇区偏离圆心的距离,而不是颜色。颜色是通过colors参数设置的。 -
题目:批量重命名项目中,若新文件名包含"""/"等特殊字符,会导致重命名失败。 ( )
答案:正确
解析:在文件系统中,某些字符(如""、"/"、"?"等)是特殊字符,不能用于文件名。如果新文件名包含这些特殊字符,会导致重命名失败。 -
题目:pandas 的 df.drop_duplicates(subset=["学号"])用于删除学号缺失的记录。 ( )
答案:错误
解析:pandas的df.drop_duplicates(subset=["学号"])用于删除学号重复的记录,而不是学号缺失的记录。要删除学号缺失的记录,应该使用df.dropna(subset=["学号"])。 -
题目:对对碰游戏中,pygame.font.SysFont()创建字体时,若指定字体不存在,会自动使用系统默认字体。 ( )
答案:正确
解析:在Pygame中,使用pygame.font.SysFont()创建字体时,如果指定的字体不存在,Pygame会自动使用系统默认字体,不会抛出异常。 -
题目:数据可视化中,plt.boxplot()适合展示数据的趋势变化,如"参赛人数随时间的增长"。 ( )
答案:错误
解析:plt.boxplot()用于绘制箱线图,适合展示数据的分布情况(如中位数、四分位数、极值等),而不是趋势变化。展示"参赛人数随时间的增长"这样的趋势变化,应该使用折线图(plt.plot())。 -
题目:with语句操作文件时,代码块执行完毕后会自动关闭文件,避免资源泄露。 ( )
答案:正确
解析:with语句是Python中的上下文管理器,用于资源管理。当使用with语句操作文件时,无论代码块中是否发生异常,文件都会在代码块执行完毕后自动关闭,从而避免资源泄露。
四、综合应用题
1. 批量重命名学生照片
(1) [单项选择题]读取CSV 文件时跳过标题行(如"学号、班级、姓名")的正确代码是( )
- A. reader.skip(1)
- B. next(reader)
- C. csv.reader(skipheader=True)
- D. reader= csv.reader(csvfile, skiprows=1)
答案:B
解析:在Python中,使用csv模块读取CSV文件时,next(reader)函数可以跳过CSV文件的标题行。reader是csv.reader()创建的读取器对象,调用next(reader)会读取并返回下一行,第一次调用时就是标题行,从而实现跳过标题行的功能。
(2) [单项选择题] 筛选文件夹中所有".JPEG/.jpg"格式图片的条件是(ext为用 os.path.splitext(fname)拆分后的扩展名) ( )
- A. ext in(".JPEG", ".jpg")
- B. ext.lower() in (".jpeg", ".jpg")
- C. ext.upper() in("JPEG", "JPG")
- D. ext".JPEG" or ext".jpg"
答案:B
解析:在筛选文件扩展名时,考虑到文件扩展名可能有大写和小写(如.JPG、.jpeg等),使用ext.lower()将扩展名统一转换为小写后再进行比较是最可靠的方法。选项A和D没有考虑大小写问题,选项C虽然可行但不如选项B直观。
(3) [单项选择题]拼接照片完整路径(如"photos/11006220501. JPEG")的正确代码是(img_folder为"photos"文件夹路径, fname为照片文件名)。
- A. img_folder+"/"+ fname
- B. os.path.join(img_folder, fname)
- C. img_folder+""+ fname
- D. os.getcwd()+ img_folder+ fname
答案:B
解析:os.path.join()是Python中用于路径拼接的标准方法,它会根据操作系统自动选择正确的路径分隔符(Windows用"",Linux/Mac用"/"),确保路径格式正确。其他选项要么不是路径拼接方法,要么拼接方式不正确。
(4) [多项选择题]以下重命名代码中存在错误的有 ( )
import csv
import os
student_info={}
with open("stu_info.csv","r", encoding="utf-8") as f: # line1reader= csv.reader(f) # line2for row in reader: # line3student_info[row[0]] = (row[1], row[2]) # line4 (row[0]为学号, row[1]为班级, row[2]为姓名)
for fname in os.listdir("photos"): # line5stu_id, ext= os.path.splitext(fname) # line6if stu_id in student_info: # line7cls, name= student_info[stu_id] # line8new_fname=f"{cls}{name}{ext}" # line9os.rename(fname, new_fname) # line10
- A. line3未跳过CSV标题行,会将"学号、班级、姓名"标题存入 student_info字典
- B. line10仅用文件名(未拼接"photos"路径),执行时会提示"FileNotFoundError"
- C. line6拆分后 ext含"."(如". JPEG"),导致新文件名格式错误(如"22平面丁×浩.JPEG")
- D. line9 中 cls(班级名)含特殊字符,导致重命名失败
答案:A, B
解析:
- 选项A正确:line3没有跳过CSV标题行,会导致第一行的标题"学号、班级、姓名"被存入student_info字典,这可能会导致后续处理错误。
- 选项B正确:line10中的os.rename(fname, new_fname)只使用了文件名,没有包含"photos"路径,会导致系统在当前目录而不是"photos"目录中查找文件,从而引发FileNotFoundError。
- 选项C错误:line6中os.path.splitext(fname)返回的扩展名确实包含点号(如".JPEG"),但这不会导致新文件名格式错误,因为新文件名也是使用这个扩展名。
- 选项D错误:虽然班级名可能包含特殊字符,但这不一定会导致重命名失败,除非这些字符是文件名中不允许的特殊字符(如"/"、"*"等)。
(5) [是非选择题]执行 os.rename(old_path, new_path)时,若照片文件正被预览(处于占用状态),会触发 PermissionError异常。 ( )
答案:正确
解析:当文件正在被其他程序使用(占用状态)时,尝试重命名该文件会触发PermissionError异常,因为操作系统不允许对正在使用的文件进行重命名操作。
2. 端午节包粽子比赛数据分析
(1) [单项选择题]统计各班级参赛人数的 pandas代码是 ( )
- A. class_count= df["班级"]. count()
- B. class_count= df["班级"]. value_counts()
- C. class_count= df. groupby("班级"). size()
- D. class_count= df["班级"]. unique(). shape[0]
答案:B
解析:df["班级"].value_counts()是pandas中用于统计序列中各值出现次数的方法,非常适合统计各班级的参赛人数。它会返回一个Series,索引为班级名,值为对应班级的人数。count()计算非空值数量,groupby("班级").size()也可以统计各班级人数但不如value_counts()直观,unique().shape[0]计算的是班级数量而不是各班级人数。
(2) [单项选择题]绘制参赛性别分布饼图时,显示百分比的参数是 ( )
- A. labels
- B. autopct
- C. colors
- D. explode
答案:B
解析:在matplotlib中绘制饼图时,autopct参数用于控制饼图中各扇区百分比显示的格式。它可以是一个格式字符串,如"%.1f%%",表示显示一位小数的百分比。labels参数用于设置各扇区的标签,colors用于设置颜色,explode用于设置扇区偏移。
(3) [单项选择题]设置中文字体避免乱码的正确代码是 ( )
- A. plt.font.sans-serif=["SimHei"]
- B. plt.rcParams["font.sans-serif"]=["SimHei"]
- C. plt.set_font("SimHei")
- D. pygame.font.SysFont("SimHei", 12)
答案:B
解析:在matplotlib中,通过修改plt.rcParams["font.sans-serif"]可以设置中文字体,避免中文显示乱码。SimHei是常用的中文字体之一。其他选项不是matplotlib中设置字体的正确方法,选项D是Pygame中设置字体的方法。
(4) [多项选择题]关于下列代码的说法,正确的有 ( )
import pandas as pd
import matplotlib.pyplot as plt
df= pd.read_csv("zongzi_comp.csv", encoding="utf-8") # line1
df_clean= df.dropna(subset=["评委1", "评委2", "评委3"]) # line2
df_clean["平均评分"]=(df_clean["评委1"]+df_clean["评委2"]+df_clean["评委3"])/3 # line3
plt.rcParams["font.sans-serif"]=["SimHei"] # line4
plt.bar(df_clean["班级"].value_counts().index, df_clean["班级"].value_counts().values) # line5
plt.title("各班级参赛人数") # line6
plt.savefig("class_count.png") # line7
plt.show() # line8
- A. line2删除评分缺失的记录,确保数据有效
- B. line3 正确计算平均评分,新增字段合理
- C. line5 用柱状图展示班级人数,符合需求
- D. line7 在 line8之后,会保存空白图
答案:A, B, C
解析:
- 选项A正确:line2使用dropna()删除了评委1、评委2、评委3中有缺失值的记录,确保了后续计算的数据有效性。
- 选项B正确:line3计算了三个评委评分的平均值,并将结果存储在新列"平均评分"中,这是合理的计算方式。
- 选项C正确:line5使用柱状图展示了各班级的参赛人数,符合"各班级参赛人数"的展示需求。
- 选项D错误:line7在line8之前执行,不会保存空白图。在matplotlib中,通常先保存图表再显示,因为plt.show()会清空当前图形。
(5) [是非选择题] plt.boxplot(df_clean["平均评分"])可展示所有参赛学生平均评分的中位数与极值。 ( )
答案:正确
解析:plt.boxplot()用于绘制箱线图,可以展示数据的中位数、四分位数、极值等统计信息。使用plt.boxplot(df_clean["平均评分"])可以展示所有参赛学生平均评分的中位数与极值,符合题目描述。
3. 节日对对碰游戏开发
(1) [单项选择题]初始化 Pygame 环境的正确代码是 ( )
- A. pygame.start()
- B. pygame.init()
- C. pygame.begin()
- D. pygame.load()
答案:B
解析:pygame.init()是Pygame库中用于初始化所有Pygame模块的函数。在使用Pygame开发游戏前,必须先调用此函数进行初始化。其他选项不是Pygame中的有效函数。
(2) [单项选择题]创建 800×800 游戏窗口的代码是 ( )
- A. screen= pygame.display.set_mode(800, 800)
- B. screen= pygame.display.set_mode([800, 800])
- C. screen= pygame.display.set_mode((800, 800))
- D. screen= pygame.display.set_mode("800×800")
答案:C
解析:pygame.display.set_mode()用于创建游戏窗口,其参数应是一个表示窗口尺寸的元组,如(800, 800)。选项A和B中参数不是元组,选项D中参数是字符串,都不正确。
(3) [单项选择题]缩放图片到200×200的代码是(img为加载的图片对象) ( )
- A. scaled_img= pygame.transform.scale(img, 200, 200)
- B. scaled_img= pygame.transform.scale(img,(200, 200))
- C. scaled_img= pygame.image.scale(img,(200, 200))
- D. scaled_img= img.resize((200, 200))
答案:B
解析:在Pygame中,pygame.transform.scale()用于缩放图片,其参数应为图片对象和表示新尺寸的元组。选项B正确使用了这个函数。选项A中参数格式错误,选项C中函数名错误,选项D中resize函数不是Pygame中图片对象的方法。
(4) [多项选择题]关于下列代码的说法,正确的有 ( )
import pygame
import os
import random
tile_size=200
image_folder="images"
images_a=[]
for i in range(8): # line1img_path= os.path.join(image_folder, f"imageA{i+1}.png") # line2img= pygame.image.load(img_path) # line3images_a.append(pygame.transform.scale(img,(tile_size, tile_size))) # line4
images_b=[]
# 加载 images_b 代码省略,与 images_a 结构一致
image_pairs= list(zip(images_a, images_b)) # line5
image_pool=[]
for idx,(img1, img2) in enumerate(image_pairs): # line6image_pool.append((img1, idx)) # line7image_pool.append((img2, idx)) # line8
random.shuffle(image_pool) # line9
- A. line2 通过f-string正确生成图片路径
- B. line4 缩放图片后存入列表,符合网格尺寸需求
- C. line5用 zip()将 A/B组图片配对,逻辑正确
- D. line9 打乱图片池,确保每次游戏图案位置随机
答案:A, B, C, D
解析:
- 选项A正确:line2使用f-string和os.path.join()正确生成了图片路径,如"images/imageA1.png"。
- 选项B正确:line4使用pygame.transform.scale()将图片缩放到统一尺寸(tile_size, tile_size)后存入列表,符合网格尺寸需求。
- 选项C正确:line5使用zip()将A组和B组图片配对,形成(imageA1, imageB1)、(imageA2, imageB2)等配对,逻辑正确。
- 选项D正确:line9使用random.shuffle()打乱图片池顺序,确保每次游戏图案位置随机分布。
(5) [是非选择题]判断鼠标点击是否在图案区域内的条件是 x<= pos[0]<=x+tile_size and y<= pos[1]<=y+tile_size(x,y为图案左上角坐标)。 ( )
答案:正确
解析:判断鼠标点击是否在图案区域内的条件应该是鼠标的x坐标在图案的x和x+tile_size之间,且y坐标在图案的y和y+tile_size之间。使用AND连接这两个条件是正确的,确保鼠标点击在图案的矩形区域内。
4. 端午节活动数据处理与可视化
(1) [单项选择题]删除学号重复记录的 pandas 代码是 ( )
- A. df_clean= df.drop_duplicates(subset=["学号"])
- B. df_clean= df[df["学号"].duplicated()== False]
- C. df_clean= df.dropna(subset=["学号"])
- D. df_clean= df["学号"].unique()
答案:A
解析:df.drop_duplicates(subset=["学号"])是pandas中删除指定列(这里是"学号"列)重复记录的标准方法。选项B中duplicated()返回的是重复行的布尔索引,取反后可以筛选非重复行,但不如drop_duplicates()直观。选项C删除的是学号缺失的记录,不是重复记录。选项D返回的是学号的唯一值列表,不是删除重复记录后的DataFrame。
(2) [单项选择题]计算各班级平均评分的代码是(df已清洗,"平均评分"字段已新增)( )
- A. class_avg= df["平均评分"].groupby(df["班级"]).mean()
- B. class_avg= df.groupby("班级")["平均评分"].mean()
- C. class_avg= df.groupby("班级").mean()["平均评分"]
- D. class_avg= df.groupby("班级").apply(lambda x: x["平均评分"].mean())
答案:B
解析:df.groupby("班级")["平均评分"].mean()是pandas中计算各班级平均评分的标准方法,先按班级分组,然后选择"平均评分"列,最后计算平均值。选项A的语法不正确,选项C和D也能计算出正确结果,但不如选项B简洁直观。
(3) [单项选择题]绘制折线图时添加数据点标记的代码是 ( )
- A. plt.plot(class_avg.index, class_avg.values, marker="o")
- B. plt.plot(class_avg.index, class_avg.values, mark="o")
- C. plt.line(class_avg.index, class_avg.values, marker="o")
- D. plt.plot(class_avg.index, class_avg.values, markersize="o")
答案:A
解析:在matplotlib中,plt.plot()函数的marker参数用于设置数据点的标记样式,marker="o"表示使用圆形标记。选项B中参数名错误,选项C中函数名错误,选项D中参数名错误且参数值不正确。
(4) [多项选择题]关于下列代码的说法,错误的有 ( )
import pandas as pd
import matplotlib.pyplot as plt
df= pd.read_csv("zongzi_comp.csv", encoding="gbk") # line1
df["平均评分"] = (df["评委1"] + df["评委2"] + df["评委3"]) / 3 # line2
df_clean= df.drop_duplicates(subset=["学号"]) # line3
class_avg= df_clean.groupby("班级")["平均评分"].mean() # line4
plt.rcParams["font.sans-serif"]=["SimHei"] # line5
plt.plot(class_avg.index, class_avg.values) # line6
plt.title("各班级平均评分趋势") # line7
plt.xlabel("班级") # line8
plt.ylabel("平均评分") # line9
plt.show() # line10
plt.savefig("class_avg.png") # line11
- A. line1 用 gbk 编码,可能导致中文乱码(应改为 utf-8)
- B. line2 未处理评分缺失值,可能计算错误
- C. line6 未设置折线样式,图表可读性差
- D. line11 在 line10 之后,保存的图表为空白
答案:A, D
解析:
- 选项A错误:line1使用gbk编码读取CSV文件,如果文件确实是使用gbk编码保存的,那么不会导致中文乱码。只有当文件编码与读取编码不一致时才会导致乱码。
- 选项B正确:line2计算平均评分时没有先处理缺失值,如果评委评分中有缺失值,计算结果可能会出错(通常会是NaN)。
- 选项C正确:line6绘制折线图时没有设置折线样式(如颜色、线型、标记等),可能会影响图表的可读性。
- 选项D正确:line11在line10之后执行,由于plt.show()会清空当前图形,所以保存的图表会是空白图。正确的做法是先保存图表再显示。
(5) [是非选择题] plt.grid(True)可在折线图中添加网格线,提升数据可读性。 ( )
答案:正确
解析:在matplotlib中,plt.grid(True)用于在图表中添加网格线,网格线可以帮助读者更准确地读取数据值,特别是在折线图中,网格线可以提升数据的可读性。
5. 节日对对碰游戏通关检测与计时功能
(1) [单项选择题]判断所有图案是否匹配完成的核心逻辑是(grid 为网格列表,元素为 (image, imageId, (x,y))) ( )
- A. len(grid)==0
- B. all(img is None for img, , in grid)
- C. sum(1 for img, , in grid if img is not None)==0
- D. grid.count(None)== len(grid)
答案:B
解析:在对对碰游戏中,当所有图案都被匹配消除后,网格中的图片对象应该都为None。选项B使用生成器表达式和all()函数检查网格中所有图片对象是否为None,是判断游戏是否完成的正确逻辑。选项A检查网格是否为空,不正确。选项C计算非None图片的数量是否为0,逻辑正确但不如选项B简洁。选项D尝试使用count()方法,但grid是列表而不是Series,没有count()方法。
(2) [单项选择题]记录游戏用时的正确代码是(start_time为游戏开始时间戳)
- A. elapsed_time= time.time()-start_time
- B. elapsed_time= pygame.time.get_ticks() /1000-start_time
- C. elapsed_time= time.ctime()-start_time
- D. elapsed_time= pygame.time.delay()-start_time
答案:A
解析:在Python中,time.time()返回当前时间的时间戳(秒),用当前时间戳减去开始时间戳可以得到经过的秒数,这是记录游戏用时的标准方法。选项B中pygame.time.get_ticks()返回的是从Pygame初始化到现在的毫秒数,除以1000转换为秒后也可以计算用时,但需要确保start_time也是用相同方法获取的。选项C中time.ctime()返回的是格式化的时间字符串,不能直接用于计算时间差。选项D中pygame.time.delay()用于延迟程序执行,不是获取时间的函数。
(3) [单项选择题]渲染"恭喜通关"文本的代码是(screen为游戏窗口 Surface 对象)
- A. font= pygame.font.SysFont("SimHei", 58)
text= font.render("恭喜通关", True,(255,0,0))
screen.blit(text, (400, 400)) - B. font= pygame.font.Font("SimHei", 58)
text= font.draw("恭喜通关", True,(255,0,0))
screen.blit(text,(400, 400)) - C. font= pygame.font.SysFont("SimHei", 58)
text= font.render("恭喜通关", True,(255,0,0))
screen.blit(text,(screen.get_width()//2-text.get_width()//2, screen.get_height()//2)) - D. font= pygame.font.SysFont("Arial", 58)
text= font.render("恭喜通关", True, "red")
screen.blit(text,(screen.get_width()//2, screen.get_height()//2))
答案:C
解析:在Pygame中,渲染文本需要先创建字体对象,然后使用font.render()方法渲染文本,最后使用screen.blit()将文本绘制到屏幕上。选项C正确使用了这些方法,并且计算了文本居中显示的位置,使"恭喜通关"文本显示在屏幕中央。选项A中文本位置固定为(400, 400),不是居中显示。选项B中Font()需要字体文件路径,draw()不是字体对象的方法。选项D中使用了英文字体Arial,且颜色参数应为RGB元组而不是字符串。
(4) [多项选择题]以下游戏主循环代码中正确的有 ( )
import pygame
import time
running= True
start_time= time.time()
elapsed_time=0
while running: # line1screen.fill((255,255,255)) # line2for event in pygame.event.get(): # line3if event.type== pygame.QUIT: # line4running= False # line5elif event.type== pygame.MOUSEBUTTONDOWN:# line6鼠标点击处理代码省略 # line7if all(img is None for img, , in grid): # line8if elapsed_time == 0: # line9elapsed_time= time.time()-start_time # line10display_win(screen, elapsed_time) # line11 (显示通关信息函数)pygame.display.flip() # line12
pygame.quit() # line13
- A. line2 每次循环填充背景,避免画面残留
- B. line8 检测所有图案是否匹配,逻辑正确
- C. line9 确保用时仅计算一次,避免重复更新
- D. line12 更新屏幕显示,确保画面实时刷新
答案:A, B, C, D
解析:
- 选项A正确:line2每次循环都用白色填充屏幕,可以清除上一帧的画面,避免画面残留。
- 选项B正确:line8使用all()函数检查网格中所有图片对象是否为None,是判断游戏是否完成的正确逻辑。
- 选项C正确:line9检查elapsed_time是否为0,确保用时只计算一次,避免重复更新。
- 选项D正确:line12使用pygame.display.flip()更新整个屏幕显示,确保画面实时刷新。
(5) [是非选择题] pygame.quit()执行后,需调用 sys.exit()才能完全终止程序,避免残留进程。 ( )
答案:正确
解析:在Pygame中,pygame.quit()用于关闭所有Pygame模块,但不会终止Python程序。要完全终止程序,避免残留进程,需要在pygame.quit()之后调用sys.exit()。sys.exit()会引发SystemExit异常,终止Python程序的执行。