2023年12月中国电子学会青少年软件编程(Python)等级考试试卷(六级)答案 + 解析

发布于:2025-05-14 ⋅ 阅读:(10) ⋅ 点赞:(0)

青少年软件编程(Python)等级考试试卷(六级)

分数:100 题数:38

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

1. 运行以下程序,输出的结果是?( )

class A():
    def _init_(self,x):
        self.x=x+1
    def b(self):
       return self.x*self.x
t=A(3)
print(t.b())
A. 9
B. 12
C. 7
D. 16
正确答案:D
答案解析:self.x=x+1,t=A(3)=3+1=4

2. 运行以下程序,输出的结果是?( )

import sqlite3
conn = sqlite3.connect(‘t1.db’)
cursor = conn.cursor()
conn.execute(“DELETE from user”)
cursor.execute(‘insert into user (id, name) values (‘1’, ‘张三’)’)
cursor.execute(‘insert into user (id, name) values (‘2’, ‘李四’)’)
cursor.execute(‘insert into user (id, name) values (‘3’, ‘王二’)’)
cursor.execute(‘insert into user (id, name) values (‘4’, ‘刘五’)’)
conn.commit()
cursor.execute(‘select id,name from user’)
values = cursor.fetchone()
values = cursor.fetchone()
print(values)
cursor.close()
conn.close()
A. (‘4’, ‘刘五’)
B. (‘1’, ‘张三’)
C. (‘2’, ‘李四’)
D. (‘3’, ‘王二’)
正确答案:C
答案解析:fetchone()从结果中取一条记录,并将游标指向下一条记录。

3. 以下SQLite语句可以修改记录的是?( )

A. cursor.execute(‘insert into user (id, name) values (‘1’, ‘张三’)’)
B. cursor.execute(‘update user set name = “吴吴” WHERE ID = 4’)
C. cursor.execute(‘select id,name from user’)
D. conn.execute(“DELETE from user”)
正确答案:B
答案解析:update()为修改记录。

4. SQLite函数中,以下语句的作用是?( )

values = cursor.fetchmany(2)
print(values)
A. 输出前两条记录
B. 输出第2条记录
C. 输出后两条记录
D. 输出中间两条记录
正确答案:A
答案解析:fetchmany()从结果中取多条记录;指定数字表示输出指定的条数。

5. 关于SQLite,说法错误的是?( )

A. commit()功能是提交当前的所有事务。如果没有提交,程序自上次提交后的所有操作是不可见的
B. execute()功能是执行SQL语句
C. fetchall()功能是获取查询结果中所有的记录,返回类型为列表
D. close()功能是关闭数据库连接,将自动调用commit()以保存所有更改
正确答案:D
答案解析:close()功能是直接关闭数据库连接,如需要保存,需要在关闭前调用commit()。

6. 有一个叫做Animal的类,请问下面哪个选项是正确的创建子类Cat的语法?( )

A. class Cat(Animal):
B. class Cat extends Animal:
C. class Cat inherits Animal:
D. class Cat is Animal:
正确答案:A
答案解析:正确选项:A。在Python中,创建子类的语法是在类名后面的圆括号中写上父类的名字。选项B、C和D使用了其他编程语言的关键字或语法,不符合Python的规则。

7. 下面的代码定义了一个Circle类,用于表示圆形的信息。请问执行下面的代码后,会输出什么?( )

class Circle():
def _init_(self, radius):
self.pi=3.14
self.radius = radius #半径
def area(self): #面积
return self.pi * self.radius ** 2
def perimeter(self): #周长
return 2 * self.pi * self.radius
c = Circle(4)
print(c.area())
print(c.perimeter())
A. 25.12
50.24
B. 没有输出
C. 50.24
25.12
D. 会报错
正确答案:C
答案解析:正确答案:C。Circle类定义了两个方法:area()和perimeter(),分别返回圆形的面积和周长。在这两个方法中,使用了self.pi来表示圆周率。创建了一个Circle类的实例对象:c,并传入4作为半径参数。最后,调用了c的area()和perimeter()方法,会分别输出50.24和25.12。

8. 下面哪个代码可以创建一个名为cat的实例,属于Animal类,有color和sound两个属性,分别赋值为"black"和"meow"?( )

A. cat = Animal()
B. cat = Animal()
cat.color = “black”
cat.sound = “meow”
C. cat.color = “black”
cat.sound = “meow”
cat = Animal()
D. cat = new Animal()
cat.color = “black”
cat.sound = “meow”
正确答案:B
答案解析:正确答案:B。选项A没有给属性赋值。C选项是错误的顺序,应该先创建实例再赋值属性。D选项不是Python语言的语法。创建实例的语法是使用类名加上括号,里面可以传入参数来初始化实例的属性。也可以先创建一个空实例,然后再给实例的属性赋值。

9. 以只读的方式打开文本文件‘a.txt’的代码是?( )

A. f=open(‘a.txt’,‘r’)
B. f=open(‘a.txt’,‘w’)
C. f=open(‘a.txt’,‘a’)
D. f=open(‘a.txt’,‘r+’)
正确答案:A
答案解析:'r’为默认值,表示仅从文件读取数据,故本题选A

10. 有如下Python代码:

f=open(‘RGB.txt’,‘r’)
a=f.readlines()
代码中变量a的数据类型是?( )
A. 字符串
B. 数组
C. 元组
D. 列表
正确答案:D
答案解析:readlines()可以将文件中的每行内容作为一个字符串存入列表中,并返回该列表,故选D

11. 文本文件’a.txt’为空文件,执行以下Python后,'a.txt’文件中的内容是?( )

n=1
f=open(‘a.txt’,‘a’)
while n<=6:
    f.write(str(n))
    n+=1
f.close()
A. 123456
B. 6
C. 空
D. 1
正确答案:A
答案解析:'a’表示向文件中写入数据,添加到当前内容尾部,故选A

12. 文件a.txt中的内容如图所示:

image
执行如下Python代码,输出的结果是?( )
s=0
with open(‘a.txt’) as f:
    a=f.readlines()
for i in a:
    if len(i)>3:
        s+=1
print(s)
A. 1
B. 2
C. 3
D. 4
正确答案:B
答案解析:代码功能是若读取出的某一行的长度超过3,则执行s+=1,从图中可知,长度超过3的有两行,所以选B

13. 下面代码的输出结果是?( )

import numpy as np
x = np.array([1, 2, 3, 4, 5])
print(x[2:4])
A. [3 4]
B. [2 3]
C. [2 3 4]
D. [2 4]
正确答案:A
答案解析:根据给定的代码,x 是一个包含数字 1 到 5 的一维数组。通过索引操作 x[2:4],我们取出了索引值为 2 和 3 的元素。
因此,x[2:4] 的输出结果为 [3 4]。

14. 下面代码的输出结果是?( )

import numpy as np
arr = np.array([[1, 2],
                      [3, 4]])
print(arr.sum())
A. 3
B. 4
C. 6
D. 10
正确答案:D
答案解析:根据给定的代码,arr 是一个 2x2 的二维数组。通过 arr.sum(),我们计算了数组中所有元素的总和。
数组中的元素为:1, 2, 3, 4。它们的总和为 10。因此,arr.sum() 的输出结果为 10。

15. 下面代码的输出结果是?( )

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
plt.subplot(2, 1, 1)
plt.plot(x, y1)
plt.xlabel(‘x轴’)
plt.ylabel(‘y1轴’)
plt.subplot(2, 1, 2)
plt.scatter(x, y2, color=‘r’)
plt.xlabel(‘x轴’)
plt.ylabel(‘y2轴’)
plt.tight_layout()
plt.show()
A. 显示一个子图,包含一个包含折线图的区域和一个包含散点图的区域
B. 显示一个子图,包含一个包含折线图和散点图的混合图形
C. 显示两个子图,分别包含折线图和散点图
D. 不显示任何内容
正确答案:C
答案解析:根据给定的代码,我们使用Matplotlib创建了一个包含两个子图的图表。每个子图都有不同的数据图形,并且通过 plt.subplot() 函数指定了它们的位置。
plt.subplot(2, 1, 1) 创建了一个子图区域,在整个图表中占据了2行1列的第1个位置。在这个子图区域中,我们使用 plt.plot() 绘制了折线图,并对x轴和y轴进行了标注。
plt.subplot(2, 1, 2) 创建了另一个子图区域,也占据了2行1列的第2个位置。在这个子图区域中,我们使用 plt.scatter() 绘制了散点图,并对x轴和y轴进行了标注。
最后,通过 plt.tight_layout() 调整子图之间的间距,并通过 plt.show() 显示整个图表。
因此,根据代码中的subplot操作,选择 C。

16. 下面代码的输出,最合理的选项结果是?( )

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y)
plt.xlabel(‘x轴’)
plt.ylabel(‘y轴’)
plt.title(‘简单折线图’)
plt.show()
A. 显示一个简单的折线图
B. 显示一个已经标注了标题、x轴和y轴标签的简单折线图
C. 显示一个已经标注了 x 轴和 y 轴标签的简单折线图
D. 不显示任何内容
正确答案:B
答案解析:根据给定的代码,我们使用Matplotlib创建了一个简单的折线图,并对坐标轴和标题进行了标注。
plt.xlabel(‘x轴’) 设置了x轴的标签为 ‘x轴’。
plt.ylabel(‘y轴’) 设置了y轴的标签为 ‘y轴’。
plt.title(‘简单折线图’) 设置了图表的标题为 ‘简单折线图’。
最后,通过 plt.show() 显示了折线图和相关标注。
因此,根据代码中的标注操作,选择B. 显示一个已经标注了标题、x轴和y轴标签的简单折线图 是正确的答案。

17. 以下Python代码为在tk上绘制一个图形,请问绘制的图形是?( )

import tkinter as tk
root = tk.Tk()
canvas = tk.Canvas(root, width=300, height=300)
canvas.create_rectangle(100, 100, 200, 200, outline=“red”)
canvas.pack()
root.mainloop()
A. 100200的矩形
B. 300
300的矩形
C. 100100的矩形
D. 200
100的矩形
正确答案:C
答案解析:答案为C,在此代码中,我们使用Canvas绘制了一个红色的矩形。左上角的坐标为(100,100),右下角的坐标为(200,200),故是个100*100的矩形。

18. 有如下Python代码,如图状态下,点击提交按钮,文本框内显示的内容为?( )

image
import tkinter as tk
def show_selected_option():
    selection = variable.get()
    p={1:“篮球”,2:“排球”, 3:“足球”}
    label.config(text=f"最喜欢的运动是 {p[selection]}")
root = tk.Tk()
options = [(“篮球”, 1), (“排球”, 2), (“足球”, 3)]
variable = tk.IntVar()
for text, value in options:
    tk.Radiobutton(root, text=text, variable=variable, value=value).pack()
button = tk.Button(root, text=“提 交”, command=show_selected_option)
label = tk.Label(root, text=“最喜欢的运动是什么?”)
button.pack()
label.pack()
root.mainloop()
A. 最喜欢的运动是排球
B. 最喜欢的运动是篮球
C. 最喜欢的运动是足球
D. 最喜欢的运动是2
正确答案:A
答案解析:答案为A,本题创建了三个选项按钮,当前状态在第二个选项,提交后通过字典匹配,2对应的是排球,故显示为:最喜欢的运动是排球。

19. 在tkinter中添加一个按钮的代码是?( )

A. button = tk.Label(root, text=“Hello”)
B. button = tk.Entry(root)
C. button = tk.Button(root, text=“Click”)
D. button = tk.Checkbutton(root, text=“Check me”)
正确答案:C
答案解析:使用tk.Button()函数来创建一个按钮(Button)控件。

20. 在tkinter中设置控件widget的背景颜色改为红色的方法是?( )

A. widget.bg_color = “red”
B. widget.background = “red”
C. widget.set_bg_color(“red”)
D. widget.config(bg=“red”)
正确答案:D
答案解析:答案为D,使用.config(bg=“red”)方法设置控件的背景颜色。

21. 下列程序的运行结果是 [20 16 12 8 4],请填空?( )

import numpy as np
x1 = np.arange( , , )
print(x1)
A. 20,0,4
B. 20,0,-4
C. 0,20,4
D. 0,20,-4
正确答案:B
答案解析:生成数组的时候,没有逗号,起始值为20,结束值为0,包含起始值而不包含结束值。

22. 下列程序的运行结果为:2,请填空?( )

import numpy as np
a = np.arange(0,12).reshape(3,4)
print( )
A. a.shape()
B. a.shape
C. a.ndim()
D. a.ndim
正确答案:D
答案解析:把0-11的12个数,分为3行4列的二维数组

23. 在一个Python表示的二维数组a=[[1,2,3,4],[5,6,7,8],[9,10,11,12]]的第二列位置插入一列新的数据后,能够实现访问该数组中数据8的语句是?( )

A. a[1][3]
B. a[2][3]
C. a[1][4]
D. a[2][4]
正确答案:C
答案解析:题目要求插入的是一列数据,也就是在该二维数组中,每一行都多出一个数据,且该数据排列在第二位,也就是下标为1的位置上,原本在该位置的数据及其之后的数据都需要后移。原数组中数据8在a[1][3]的位置,所以后移后数据8的位置变为a[1][4]。

24. 以下程序实现:把’xiaoming’的个人信息填到family的csv文件中,再读取出来。空格处应填?( )

import json
import csv
fam = {‘name’:‘xiaoming’,‘age’:18,‘gender’:‘nan’}
with open(‘family.csv’,‘w’) as f:
json. (fam,f)
with open(‘family.csv’,‘r’) as f1:
read1 = json. (f1)
print(read1)
A. reader,writer
B. writer,reader
C. dump,load
D. load,dump
正确答案:C
答案解析:dump:把对象序列转化为json字符串写入文件; load:返回把从文件中读取的json字符串反序列化的对象。

25. 在Python中使用JSON库进行JSON数据的处理,以下哪个选项描述正确的是?( )

A. 使用json.dumps()函数可以将Python对象转换为JSON字符串
B. 使用json.write()函数可以将Python对象写入JSON文件
C. 使用json.decode()函数可以将JSON字符串解码为Python对象
D. 使用json.parse()函数可以将JSON字符串解析为Python对象
正确答案:A
答案解析:使用json.dumps()函数可以将Python对象转换为JSON字符串; 在写入JSON文件时,应使用json.dump()函数而非json.write()函数; 在解析JSON字符串时,应使用json.loads()函数而非json.parse()函数。

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

26. 在SQLite操作中,语句conn = sqlite3.connect(‘test1.db’)功能是创建一个新数据库test1.db。如果test1.db已经存在,程序将报错。( )

正确答案:错误
答案解析:如果test1.db已经存在,程序直接连接,不会报错。

27. 当创建一个子类时,它会自动获得父类的所有属性和方法。( )

正确答案:正确
答案解析:正确。子类会自动继承父类的所有属性和方法。

28. 关于类与对象的描述,定义方法_init_() 时,self 必不可少,还必须位于其他形参的后面。( )

正确答案:错误
答案解析:定义方法_init_() 时,self 必不可少,还必须位于其他形参的前面。

29. 有如下代码:

with open(‘RGB.jpg’,‘rb’) as f:
    a=f.read()
这段代码可以将图像文件RGB.jpg的二进制数据存储在变量a中。( )
正确答案:正确
答案解析:'rb’可以读取二进制数据。

30. 有如下代码

f=open(‘123.txt’,‘w’)
f.write(‘hello’)
f.close()
执行代码后,文件123.txt中的原有内容将会被覆盖。( )
正确答案:正确
答案解析:open()函数的’w’模式在写入内容时会删除原有内容。

31. import numpy as np

dt = np.dtype(‘i8’)
print(dt)
上面代码的输出结果是int64。( )
正确答案:正确
答案解析:
数据类型对象(numpy.dtype 类的实例)用来描述与数组对应的内存区域是如何使用的。dtype 对象语法构造如下:numpy.dtype(object, align, copy),其中object参数表示要转换为的数据类型对象。int8, int16, int32, int64 四种数据类型可以使用字符串 ‘i1’, ‘i2’,‘i4’,‘i8’ 代替。

32. 下列代码中plt.bar(x, y) 函数用于散点图。( )

import matplotlib.pyplot as plt
import numpy as np
x = np.array([‘A’, ‘B’, ‘C’, ‘D’])
y = np.array([3, 7, 2, 5])
plt.bar(x, y)
plt.show()
正确答案:错误
答案解析:据给定的代码,我们使用Matplotlib的pyplot子模块创建了一个简单的柱状图。在代码中,我们使用 plt.bar(x, y) 函数来绘制柱状图。该函数接受两个参数,即x和y坐标轴的数据。

33. 运行如下代码,点击按钮Greet后label框内显示“Hello, World!”字样。( )

import tkinter as tk
def greet():
    label.config(text=“Hello, World!”)
root = tk.Tk()
label = tk.Label(root, text=“”)
button = tk.Button(root, text=“Greet”, command=greet)
label.pack()
button.pack()
root.mainloop()
正确答案:正确
答案解析:此代码中,我们使用tkinter库创建了一个窗口,并在窗口中创建了一个标签和一个按钮。当按钮被点击时,调用greet()函数,该函数将标签的文本更改为"Hello, World!"。

34. Python中的JSON库提供了将自定义对象直接转换为JSON格式的功能。( )

正确答案:错误
答案解析:Python的JSON库默认只支持基本的数据类型(如字符串、整数、浮点数、列表和字典)的JSON转换。对于自定义对象,需要进行额外的处理才能将其转换为JSON格式。这通常涉及自定义对象的序列化和反序列化方法,或者使用第三方库来进行对象到JSON的转换。

35. 创建一个二维数据的NumPy数组:

data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
访问数组中第二行第三列的元素的表示方式是value=data[2, 3]。( )
正确答案:错误
答案解析:访问二位数组中的行和列都是从0开始的,所以访问数组中第二行第三列的元素的表示方式是value=data[1, 2]。

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

36. 编写一个类Circle,包含两个属性radius和color,以及四个方法get_area()、get_circumference()、get_diameter()和print_info(),分别用于计算圆面积、圆周长、圆直径,并打印出圆的半径和颜色。

代码如下,请补全代码。
class Circle:
def _init_(self, radius, color):

self.color = color

def get_area(self):                  #圆面积
    return         ②        

def get_circumference(self):     #圆周长
    return         ③        

def get_diameter(self):
    return 2 * self.radius

def print_info(self):                      
    print("Radius:", self.radius)
    print("Color:", self.color)

circle = Circle(5, “red”)
④ #输出圆的半径和颜色
print(“Area:”, circle.get_area())
print(“Circumference:”, circle.get_circumference())
print(“Diameter:”, circle.get_diameter())

正确答案:
参考程序:
class Circle:
def _init_(self, radius, color):
self.radius = radius
self.color = color

def get_area(self):                           #圆面积
    return 3.14 * self.radius ** 2

def get_circumference(self):              #圆周长
    return 2 * 3.14 * self.radius

def get_diameter(self):
    return 2 * self.radius

def print_info(self):                      
    print("Radius:", self.radius)
    print("Color:", self.color)

circle = Circle(5, “red”)
circle.print_info() #输出圆的半径和颜色
print(“Area:”, circle.get_area())
print(“Circumference:”, circle.get_circumference())
print(“Diameter:”, circle.get_diameter())
答案解析:
评分标准:
(1)self.radius = radius或等效答案;(2分)
(2)3.14 * self.radius ** 2或等效答案;(3分)
(3)2 * 3.14 * self.radius或等效答案;(2分)
(4)circle.print_info()或等效答案。(3分)

37. 学生表操作题

建立学生表,将学号设置为主键,实现对数据的添加和查找。(无需运行通过,写入代码即可)
import sqlite3
con = sqlite3. ① (‘./student.db’)
cur = ②
sql =‘’’
③ IF NOT EXISTS Stu (
        id INTEGER        ④       AUTOINCREMENT,
        name TEXT,
        age INTEGER,
        clas TEXT)
‘’’
cur.execute(sql)
con.commit()
sql = ‘’’
⑤ (name,age,clas) VALUES(?,?,?)
‘’’
cur.execute(sql,(‘张三’,16,‘二三班’))
con.commit()

正确答案:
参考程序:
import sqlite3
con = sqlite3. connect (‘./student.db’)
cur = con.cursor()
sql =‘’’
     CREATE TABLE  IF NOT EXISTS Stu (
        id INTEGER PRIMARY KEY  AUTOINCREMENT,
        name TEXT,
        age INTEGER,
        clas TEXT)
‘’’
cur.execute(sql)
con.commit()
sql = ‘’’
     INSERT INTO Stu (name,age,clas) VALUES(?,?,?)
‘’’
cur.execute(sql,(‘张三’,16,‘二三班’))
con.commit()
答案解析:
评分标准:
(1)使用connect 连接数据库,如果没有,就会创建数据库;(2分)
(2)con.cursor(),获取游标对象,操作数据库;(2分)
(3)CREATE TABLE,在数据库中创建;(2分)
(4)PRIMARY KEY,创建表中的关键字;(2分)
(5)INSERT INTO Stu,插入到学生表中。(2分)

38. 统计单词问题

统计英文文本中出现的不同单词个数:读取只包含英文和标点的文件’/data/abc.txt’,文件中单词和单词之间用1个空格或标点符号隔开,文末以标点符号结尾,在区分单词大小写的情况下,输出该文本中所出现的不同单词个数。
实现上述功能的Python程序如下,请在划线处填入合适的代码。
f=open('/data/ ① ',‘r’)
text=f.read()
lst=[]
s=“”
def judge( ② ):
    if st in lst:
        return False
    else:
        return True
for i in range(len(text)):
    c=        ③      
    if"a"<=c<=“z” or"A"<=c<=“Z”:
        s=s+c
    else:
        if judge(s):
            lst.append(s)
        s=“”
print(“出现的不同单词个数为:”,len(lst))

正确答案:
参考程序:
f=open(‘/data/abc.txt’,‘r’)
text=f.read()
lst=[]
s=“”
def judge(st):
    if st in lst:
        return False
    else:
        return True
for i in range(len(text)):
    c=text[i]
    if"a"<=c<=“z” or"A"<=c<=“Z”:
        s=s+c
    else:
        if judge(s):
            lst.append(s)
            #append()用于在列表末位添加元素
        s=“”
print(“出现的不同单词个数为:”,len(lst))
答案解析:
评分标准:
(1)abc.txt或其他同等答案;(3分)
(2)st或其他同等答案;(3分)
(3)text[i]或其他同等答案。(4分)