中国电子学会2023年05月份青少年软件编程Python等级考试试卷六级真题(含答案)

2023-05 Python六级真题

分数:100

题数:38

测试时长:60min

一、单选题(共25题,共50分)

1.  明明每天坚持背英语单词,他建立了英语单词错题本文件“mistakes.txt”,将每天记错的单词增加到该文件中,下列打开文件的语句最合适的是?(C)(2分)

A.  f = open("mistakes.txt")

B.  f = open("mistakes.txt","r")

C.  f = open("mistakes.txt","a")

D.  f = open("mistakes.txt","w")

答案解析:open函数的第一个参数是文件名称,包括路径;第二个参数是打开的模式mode

'r': 只读(缺省。如果文件不存在,则抛出错误),'w': 只写(如果文件不存在,则自动创建文件),'a': 附加到文件末尾。

2.  小张近阶段要学习的英文单词存储在“data.txt”文件,格式如图所示。

 

处理“data.txt”文件中英文单词的Python程序段如下:

file = open("data.txt")
for word in file:
    if word[0:1] == "c":
        continue
    else:
        print(word)
file.close()

下列关于该程序段的功能,说法正确的是?(D)(2分)

A.  输出包含"c"(区分大小写)的单词

B.  输出以"c"开头(区分大小写)的单词

C.  输出以"c"开头(不区分大小写)的单词

D.  输出不是以"c"开头(区分大小写)的单词

答案解析:读取文件后word存储文件每一行内容,word[0:1]代表该行首字母,如果是小写字母"c"开头,跳过,否则,打印该单词,因此程序功能是输出不是以"c"开头(区分大小写)的单词。

3.  文件“score.csv”中存放了3位同学的成绩数据,小李编写程序读取数据内容,文件内容和程序成功读取界面如图所示。

import csv
csv_reader = csv.reader(open(______))
for row in csv_reader:
     print(______)

上述程序中划线处应填入?(D)(2分)

A.  score row

B.  score.csv "row"

C.  "score" "row"

D.  "score.csv" row

答案解析:读取文件时open函数的参数为字符串,应该是完整的文件名加上字符串标识,row代表每一行内容,不应该加字符串标识。

   

4.  有如下程序代码:

import csv                          #  ①       
headers = ['学号','姓名','分数']
rows = [['202001','张三','98'],
        ['202002','李四','95'],
        ['202003','王五','92']]
with open('score.csv','w',encoding='utf8',newline='') as f : #  ② 
    writer = csv.writer(f)          #  ③
writer.writerow(headers)      
writer.writerows(rows)          #  ④      

关于上述语句的解释,不正确的是?(D )(2分)

A.  ①处功能为导入csv 库

B.  ②处以写方式打开文件

C.  ③处创建 csv.writer 实例

D.  ④处一次只能写入一行

答案解析:writer.writerows(rows)将写入多行数据

5.  关于matplotlib模块中函数的功能,下列描述正确的是?(D )(2分)

A.  bar()函数用于绘制折线图

B.  plot()函数用于绘制水平柱形图

C.  barh()函数用于绘制垂直柱形图

D.  scatter()函数用于绘制散点图

答案解析:bar()函数用于绘制垂直柱形图,plot()函数用于绘制折线形图,barh()函数用于绘制水平柱形图,因此,ABC选项均错;scatter()函数用于绘制散点图,因此,答案为D。

6.  绘制sin(x)的图形如图所示,画线处的语句是?(C)(2分)

 

import matplotlib.pyplot  as plt
import numpy  as  np
x = np.linspace(0, 10, 30) 
___________
plt.show()

A.  plt.bar(x)

B.  plt.scatter(x)

C.  plt.plot(x, np.sin(x))

D.  plt.scatter(x, np.sin(x))

答案解析:绘制折线图函数是plot,参数必须有2个,第一个参数是x,第二个参数是np.sin(x)。

7.  下列关于类和对象的说法,正确的是?(D )(2分)

A.  通过def关键字定义类

B.  通过class创建实例

C.  每个对象的数据相同

D.  每个对象拥有相同的方法

答案解析:Python定义类是通过class关键字,通过类名+()实现创建实例,每个对象的数据可能不同,每个对象拥有相同的方法。

8.  有如下程序段:

class Student:
    count = 0
    def __init__(self, name):
        self.name = name
        Student.count += 1
    def study(self):
        print(f'{self.name}在学习')
student1 = Student("小明")
student2 = Student("小红")
student2.study()

执行代码后,下列说法不正确的是?(B)(2分)

A.  程序创建了2个实例

B.  Student.count的值为0

C.  study为该类的方法

D.  输出的结果为“小红在学习”

答案解析:程序创建了2个实例,Student.count的值为2。

9.  有下列语句命令:

import sqlite3                   
conn = sqlite3.connect("test.db") # ①
cursor = conn.cursor()            # ②
cursor.close()                    # ③
conn.close()                      # ④

下列关于语句功能解释,正确的是?(A )(2分)

A.  ①创建和连接数据库

B.  ②提交事务

C.  ③关闭数据库连接

D.  ④关闭游标

答案解析:先导入数据库模块, connect( )函数用于创建和连接数据库,②为创建游标③为关闭游标④为关闭数据库连接。

10. commit()函数是提交数据库操作的命令函数,下列不需要执行该函数的数据库操作的是?(A )(2分)

A.  查询操作

B.  增加操作

C.  修改操作

D.  删除操作

答案解析:commit()函数用于提交当前的事务。如果您未调用该方法,那么自您上一次调用 commit()以来所做的任何动作对其他数据库连接来说是不可见的。

11. 执行数据库操作的部分代码如下:

import sqlite3
db = sqlite3.connect("test.db")
cur=db.cursor()
cur.execute("create table Student(Sname char(20),Sage SMALLINT);")
db.close()

下列描述正确的是?(D)(2分)

A.  当前操作的数据库的名称为Student

B.  create table语句的功能是数据库查询

C.  数据表中将会插入2条新记录

D.  当前表中有2个字段

答案解析:当前操作的数据库的名称为“test.db”,create table语句的功能用于创建数据表,数据表中包含Sname和Sage两个字段。

12. 小萌要用tkinter制作一个单击按钮,输出“Hello World!”的打招呼程序,语句如下:

import tkinter as tk       
window = tk.Tk()
window.title("Python GUI") # ①
window.geometry("600x100") 
window.mainloop()        

程序中①处语句的功能是?(B)(2分)(2分)

A.  创建窗口对象

B.  设置窗口标题

C.  设置窗口大小

D.  使用窗口对象

答案解析:window = tk.Tk()为创建窗口对象,window.geometry("600x100")为设置窗口大小,window.mainloop()为使用窗口对象。

13. 小李设计一个显示加、减、乘、除的单选框界面,代码如下:

import tkinter
from tkinter import *
root = Tk()
v = IntVar()
calcs = [ ('+', 1),    ('-', 2),    ("*", 3),    ("/", 4),]
for calc, num in calcs:
    # 设置单选框,用来显示运算符
Radiobutton(text = calc,variable =v,value=num).grid(row=num-1, column=1)
root.mainloop()

运行后的界面是?(B )(2分)

A. 

B. 

C. 

D. 

答案解析:text = calc说明界面中显示符号,row=num-1, column=1说明行数不同,列数相同。

14. 有如下Python程序段:

n=4
a=[[i*n+j+1 for j in range(n)]for i in range(n)]
for i in range(n//2):
    for j in range(1,n,2):
        a[i][j],a[n-i-1][n-j-1]=a[n-i-1][n-j-1],a[i][j]

则程序执行后,a[1][1]和a[2][0]的值分别是?(D)

A.  6和9

B.  8和9

C.  11和9

D.  11和8

答案解析:

a=[[i*n+j+1 for j in range(n)]for i in range(n)]

创建4*4的二维数组

a=[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]。

变量i的循环范围为0到1,变量j的循环范围为1到3步长2。可得到结果为:

a=[[1,15,3,13],[5,11,7,9],[8,10,6,12],[4,14,2,16]]

综上所述,a[1][1]=11,a[2][0]=8,选D。

15. 下列关于数据可视化的说法,最准确的是?(C )(2分)

A.  数据可视化是指静态数据的可视化

B.  决定数据可视化的表现形式的是数据结构

C.  可视化探究具有关联性数据的分布关系可用散点图

D.  可视化展现时间趋势类的数据可用雷达图

答案解析:利用可视化技术,可以将处于不断变化中的数据生成实时变化的可视化图表;不同的数据类型决定了可视化的表现形式;展现时间趋势类的数据可采用柱形图和折线图。

16. 文件exam.txt与以下代码在同一目录下,其内容是一段文本: bigBen, 下列代码的输出结果是?( C)(2分)

f = open("exam.txt")
print(f)
f.close()

A.  exam.txt

B.  exam

C.  <_ io.TextlOWrapper ..>

D.  bigBen

答案解析:open()函数打开一个文件, 并返回可以操作这个文件的变量f,并且open()函数有两个参数:文件名和打开模式。本题只是打开了文件,并没有对文件进行操作,因此不会输出文件的内容。print()语句输出的是变量f代表的文件的相关信息: <_ io.TextlOWrapper name='exam.txt' mode='r encoding='cp936'>,若想要输出文件的内容,需要把文件的内容读入,如f1 = f.read()。本题选择C选项。

17. 有如下python程序:

import numpy as np
from matplotlib import pyplot as plt
x=np.arange(-5,5,0.1)
y=np.sin(x)
plt.show()

运行后没有报错但看不到运行结果,原因不可能是?(C)(2分)

A.  缺少plt.plot()语句

B.  缺少plt.scatter()语句

C.  未正确安装第三方库

D.  电脑卡顿

答案解析:未正确安装第三方库会报类似No module named 'numpy'的错误,既然没有报错,第三方库已安装。

18. 下列不属于对象构成成份的是?( D)(2分)

A.  标识

B.  属性

C.  方法(或操作)

D.  规则

答案解析:对象是由描述该对象属性的数据以及可以对这些数据施加的所有操作封装在一起构成的统一体。一个对象通常可由对象名(标识)、属性和操作三部分组成。本题答案为D选项。

19. 假设“数据.txt”中的内容为:木耳+银耳+牛肉+鸡蛋+香菇,运行下列程序,内容修改为:木耳*银耳*牛肉*鸡蛋*香菇。 代码中空白部分应该填写什么?(A) (2分)

f = open("数据.txt","r")
s= f.read() .split("+")
f =open("数据. txt", "w") 
f.write(______) 
f.close( )

A.  "*".join(s)

B.  s.split(*)

C.  s

D.  s.join(*)

答案解析:通过读取数据,用join函数加读取的数据连接在一起,并写回记事本。

20. 用Python语句创建sQLite数据库,代码如下:

import sqlite3
conn= sqlite3.connec("test2.db")
c=conn.cursor()
c.execute("CREATE TABLE STUDENTS(ID INT,AGE INT,NAME TEXT)")
c.execute("INSERT INTO STUDENTS(ID, AGE,NAME) VALUES(2,16,'LISA')")
c.execute("UPDATE STUDENTS set AGE=18 where it,ID=2")
conn.commit()
c.close()
conn.close()

程序运行后,AGE列的值是?(D)(2分)

A.  2

B.  16

C.  LISA

D.  18

答案解析:程序连接了数据库之后创建了表“STUDENTS”,并设置了三个字段,插入了数据ID=2,AGE=16,NAME="LISA";后面修改AGE为18。

21. 利用tkinter模块设计一个求“圆面积”的界面,程序中自定义了若干个功能函数和按钮,要求点击“退出”按钮能关闭界面窗口,点击“重置”按钮能重置输入框中的数据,部分程序代码如下:

def cancel():
    var_r.set('')
def tc_quit():
    win.quit()
    win.destroy()

以下哪个选项可以在“退出”按钮中正确调用功能函数?(C)(2分)

A.  btn_Cancel=tk.Button(win,text='重置',command=tc_quit)

B.  btn_quit=tk.Button(win,text='退出',command=cancel)

C.  btn_quit=tk.Button(win,text='退出',command=tc_quit)

D.  tc_quit=tk.Button(win,text='退出')

答案解析:在若干个按钮中选择按钮显示为“退出”的,调用函数tc_quit的语句。

22. 下列选项中能创建文本框的是?(A )(2分)

A.  tkinter.Text()

B.  tkinter.Tk()

C.  tkinter.Button()

D.  tkinter.Label()

答案解析:Text():文本框 TK():界面,Button():按钮,Label():标签

23. 有如下程序段:

class xcal:
    def __init__(self,numx,numy):
        self.numx=numx
        self.numy=numy
    def xadd(self,another):
        numx=self.numx*another.numx
        numy=self.numy*another.numy
        return xcal(numx,numy)
    def print(self):
        print(str(self.numx)+"/"+str(self.numy))
x=xcal(2,3)
y=x.xadd(xcal(4,5))
y.print()

程序运行后,输出的结果是?(D)(2分)

A.  6/20

B.  15/8

C.  10/12

D.  8/15

答案解析:根据题意得到输出的结果为str(self.numx)+"/"+str(self.numy),self.numx=2*4,self.numy=3*5.

24. Python程序如下:

from random import random
a=[0]*7
flag=[False]*10
i=1
while i<=6:
    a[i]=int(random()*5)*2+1
    if flag[a[i]]==False or a[i]>a[i-1]:
        flag[a[i]]=True
        i=i+1

该程序段运行后,列表a的值可能为?(D)(2分)

A.  [0, 7, 5, 9, 7, 1, 7]

B.  [0, 1, 3, 5, 7, 9, 1]

C.  [0, 9, 2, 3, 5, 7, 5]

D.  [0, 9, 5, 9, 7, 9, 1]

答案解析:本题考查一维数组的操作,a[i]产生的值只能为奇数,只有当前产生的数值没有出现过或者比前一个数值大就可以存入。故选D

25. 在中国,具有中国国籍且年满18周岁的人拥有选举权利,学校想要统计出截止到2022年12月31日年满18周岁的学生名单。

学生的相关信息存储在"stu_info.txt"文件中,存储格式如下:

高一 1|谢乐|340421200606155914

高一 1|岑新奇|330282200407301529

用python编写代码如下:

f=open("stu_info.txt","r",encoding="utf8")
namelist=[ ] #存放年满18周岁的学生名单
for line in f.readlines():
        stu=line.split("|")
        birth=        ①        
        if birth<="20041231":
            namelist.append(        ②        )
print(namelist)

①②两处的代码应填为?(A)(2分)

A.  ① stu[2][6:14] ② stu[1]

B.  ① stu[2][6:13] ② stu[1]

C.  ① stu[3][6:14] ② stu[2]

D.  ① stu[2][-12:-1] ② stu[1]

答案解析:通过split()函数切割之后,身份证在第三个字段。在列表中的索引为2,再从身份证字段中取出生日期,主要切片右端点无法取到。故①处为stu[2][6:14] ,将满足的姓名保留,故②处为stu[1]。

二、判断题(共10题,共20分)

26. 用readlines()函数读取文本文件内容,返回的是一个列表,其中每一行的数据为一个元素。(对 )

答案解析:readlines()函数返回一个列表。

27. JSON的loads和load方法的区别是,loads操作的是字符串,load操作的是文件流。( 对)

答案解析:JSON的loads和load方法的区别是,loads操作的是字符串,load操作的是文件流。

28. numpy.linspace(1,10,10)用于产生从1到9的一维数组。(错 )

答案解析:numpy.linspace(1,10,10)产生的结果是[ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.],包含10。

29. 类(class)由类名、属性和方法三个部分构成。( 对)

答案解析:类由类名、属性和方法三个部分构成。

30. 使用tkinter设计窗体时,Text控件的属性包含bg、font、bd和command。(错 )

答案解析:Text控件bg是设置背景颜色,font设置字体类型与大小,bd是边框宽度;command是按钮属性。

31. 如果在子类中实现了一个公有方法,该方法也能调用继承的父类中的私有方法和私有属性。(错 )

答案解析:在Python类的继承中,如果调用的是继承父类的公有方法,可以在公有方法中访问父类中的私有属性和私有方法;但是如果子类中实现了一个公有方法,那么这个方法是不能够调用继承父类中的私有方法和私有属性的,所以错误。

32. 如果没有采用close()关闭文件,Python程序退出时文件将不会自动关闭。(错 )

答案解析:如果没有采用close()关闭文件,程序退出时一般会自动关闭,但有可能会导致数据丢失。

33. CSV文件一般以英文逗号分隔元素。(对 )

答案解析:CSV文件一般以英文逗号分隔元素。

34. 以下程序可以提取 5 到 10 之间的所有元素。(对 )

import numpy as np 
a = np. arange(15) 
print(a[(a<=10) & (a>=5)])

答案解析:(a<=10) & (a>=5) 表示二个条件都要满足即5<=a<=10

35. 使用Python语言对SQLite数据库进行操作,实现打开和关闭名为test.db数据库文件。有下列语句命令:

①conn = sqlite3.connect("test.db")

②cur = conn.cursor( )

③import sqlite3

④conn.close( )

⑤cur.close( )

要实现上述功能,上述语句执行的先后顺序正确是③①②⑤④。(对)

答案解析:先导入sqlite3模块,然后建立连接,建立游标,最后关闭。

三、编程题(共3题,共30分)

36. 打开一个由小写英文组成的文本文件'old.txt',将该文件中的每一个字母加密后写入到一个新文件'new.txt',加密的方法是:a变成b,b变成c……,z变成a,其它字符不变化(不考虑文件路径)

file=open("old.txt","r")
line=file.         ①        

list=[]
while line:
    for i in range(        ②        ):
        if line[i].islower():
           jm=        ③        
           list.append(chr(jm))
        else:
            list.append(line[i])
    line=file.readline()
s=''.join(list)
file=open("new.txt","w+")
        ④        
file.close()

参考程序:

file=open("old.txt","r")

line=file.readline()
list=[]
while line:
    for i in range(len(line)):
        if line[i].islower():
           jm=(ord(line[i])-97+1)%26+97
           list.append(chr(jm))
        else:
            list.append(line[i])
    line=file.readline()
s=''.join(list)
file=open("new.txt","w+")
file.write(s)
file.close()

评分标准:

(1)readline();(2分)

(2)len(line);(3分)

(3)(ord(line[i])-97+1)%26+97;(3分)

(4)file.write(s)。(2分)

37. 使用Python的sqlite3库完成以下操作:

1.创建一个名为cpu的数据库文件,并创建一张Rate的表(表有三个字段:ID、Rate、updatetime)

2.记录下十秒钟cpu相关数据,并删除第id为1的数据。

import sqlite3
import datetime
import psutil   #获取cpu当前占比
conn = sqlite3.connect("        ①        ")
creatsql = "create table Rate(ID integer primary key, Rate float,updatetime time)"
        ②        
cur.execute(creatsql)
conn.commit()
insertsql = "insert into Rate(ID,Rate,updatetime) values(%d,%f,'%s')"
checksql = "select * from Rate"
for x in range(0,10):
    nowtime = datetime.datetime.now()
    nowtime = nowtime.strftime('%Y-%m-%d %H:%M:%S')
    cpu_per = float(psutil.cpu_percent(1))
    cur.        ③        (insertsql  % (x,cpu_per,nowtime))
    conn.commit()
cur.execute(checksql)
data = cur.fetchall()
delsql="delete from Rate where ID=%d"
cur.execute(delsql %1)
conn.commit()
        ④        
conn.close()

参考程序:

import sqlite3
import datetime
import psutil
conn = sqlite3.connect("cpu.db")
creatsql = "create table Rate(ID integer primary key, Rate float,updatetime time)"
cur = conn.cursor()
cur.execute(creatsql)
conn.commit()
insertsql = "insert into Rate(ID,Rate,updatetime) values(%d,%f,'%s')"
checksql = "select * from Rate"
for x in range(0,10):
    nowtime = datetime.datetime.now()
    nowtime = nowtime.strftime('%Y-%m-%d %H:%M:%S')
    cpu_per = float(psutil.cpu_percent(1))
    cur.execute(insertsql % (x,cpu_per,nowtime))
    conn.commit()
cur.execute(checksql)
data = cur.fetchall()
delsql="delete from Rate where ID=%d"
cur.execute(delsql %1)
conn.commit()
cur.close()
conn.close()

评分标准:

(1)cpu.db;(2分)

(2)cur = conn.cursor();(3分)

(3)execute;(2分)

(4)cur.close()。(3分)

38. 创建一个学生类,存储学生的姓名、语文成绩、英语成绩和数学成绩,根据成绩计算相应的等级,成绩≥90为'A',成绩∈[80,90]为'B',成绩∈[60,80]为'C',成绩≤60为'D'。创建一个班级类,该类有班级名称和学生2个属性,显示班级所有学生的姓名及相应的等级。程序运行效果如下图所示。

 

程序代码如下:

class stu:
    def __init__(self,name,chinese,english,math):
        self.name=name
        self.c= chinese
        self.e= english
                ①        
        lis=[self.c,self.e,self.m]
        self.lis=lis
    def level(self):
        for i in range(3):
            if         ②        :
                self.lis[i]='A'
            elif  self.lis[i]>80:
                self.lis[i]='B'
            elif  self.lis[i]>60:
                self.lis[i]='C'
            else:
                self.lis[i]='D'
        return self.lis
    def show(self):
        print(f'姓名:{self.name},等级:{        ③        }')
class lesson:
    def __init__(self, name, students=[]):
        self.students = students
        self.class_name = name
    def show_student(self):
        for stu in self.students:
                    ④        
students = [ stu('jack',90,80,90),
             stu('candy',95,88,69),
             stu('cindy',66,76,39),
             stu('frank',61,87,44),
             stu('tony',20,65,49)]
class1 = lesson("高一(1)班",students)
        ⑤      

请在划线处填入正确的代码。

参考程序:

class stu:
    def __init__(self,name,chinese,english,math):  # 定义类,类名为Student
        self.name=name              # 姓名属性
        self.c= chinese             # 语文成绩属性
        self.e= english             # 英语成绩属性
        self.m = math               # 数学成绩属性
        lis=[self.c,self.e,self.m]  # 成绩存入列表
        self.lis=lis
    def level(self):
        for i in range(3):   
            if self.lis[i] >=90:    # 等级判断
                self.lis[i]='A'
            elif  self.lis[i]>80:
                self.lis[i]='B'
            elif  self.lis[i]>60:
                self.lis[i]='C'
            else:
                self.lis[i]='D'
        return self.lis
    def show(self):         # 定义show方法,用于显示信息
        print(f'姓名:{self.name},等级:{self.level()}')
     
class lesson:              # 定义 lesson类
    def __init__(self, name, students=[]):     # 定义2个属性
        self.students = students               # 定义学生属性
        self.class_name = name                 # 定义姓名属性
    def show_student(self):   # 定义show_student方法,用于显示学生列表
        for stu in self.students:              # 遍历学生列表
            stu.show()                         # 显示学生信息
students = [ stu('jack',90,80,90),
                   stu('candy',95,88,69),
                   stu('cindy',66,76,39),
                   stu('frank',61,87,44),
                   stu('tony',20,65,49)]
class1 = lesson("高一(1)班",students)
class1.show_student()

评分标准:

(1)self.m = math;(2分)

(2)self.lis[i] >=90;(2分)

(3)self.level();(2分)

(4)stu.show();(2分)

(5)class1.show_student()。(2分)

猜你喜欢

转载自blog.csdn.net/m0_46227121/article/details/131225874