2024年9月中国电子学会青少年软件编程(Python)等级考试试卷(六级)答案 + 解析
一、单选题
1、下面代码运行后出现的图像是?( )
import matplotlib.pyplot as plt
import numpy as np
x = np.array(['A', 'B', 'C', 'D'])
y = np.array([30, 25, 15, 35])
plt.bar(x, y)
plt.show()
A.
B.
C.
D.
正确答案:A
答案解析:代码中的bar( )函数来生成柱形图。
2、下面代码的输出结果正确的是?( )
import numpy as np
dt = np.dtype('i1')
print(dt)
A. int64
B. int32
C. int16
D. int8
正确答案:D
答案解析:数据类型对象 dtype中int8, int16, int32, int64 四种数据类型可以使用字符串 'i1', 'i2','i4','i8' 代替。
3、下面代码的输出结果正确的是?( )
import numpy as np
a = np.array([1, 2, 3], dtype = float)
print (a)
A. [1.+0.j 2.+0.j 3.+0.j]
B. [1. 2. 3.]
C. [1, 2, 3]
D. [ True True True]
正确答案:B
答案解析:这段代码创建了一个numpy数组a,其中包含三个浮点数(1.0, 2.0, 3.0)。
由于默认情况下,numpy数组使用科学计数法进行打印,所以数字后面不会有小数点。但是,由于我们为数组指定了浮点数类型dtype=float,所以打印结果中的数字后面会有小数点。
4、下面代码的输出结果正确的是?( )
import numpy as np
student = np.dtype([('name','S20'), ('age', 'i2'),('height', 'f4')])
a = np.array([('Alice', 20, 55),('Jone', 21, 48)], dtype = student)
print(a)
A. [(b'Alice', 20., 55.) (b'Jone', 21., 48.)]
B. [(b'Alice', 20., 55) (b'Jone', 21., 48)]
C. [(b'Alice', 20, 55.) (b'Jone', 21, 48.)]
D. {(b'Alice', 20, 55.), (b'Jone', 21, 48.)}
正确答案:C
答案解析:这段代码是使用NumPy库来创建一个自定义的数据类型student,这个数据类型由三个字段组成:
* `name`:一个长度为20的字符串('S20'表示字符串长度为20)。
* `age`:一个2字节的整数('i2'表示2字节的整数)。
* `height`:一个4字节的浮点数('f4'表示4字节的浮点数)。
使用student这个数据类型来创建一个数组a,包含两个元组,每个元组都符合前面定义的`student`数据类型。即每个元组都有一个长度为20的字符串、一个2字节的整数和一个4
5、关于SQLite,说法错误的是?( )
A. SQLite创建表时,必须指定主关键字PRIMARY KEY
B. 连接数据库conn=sqlite3.connect('d:/test.db') ,执行SQL语句都必须用conn.execute开头
C. 语句conn.commit()表示保存数据到数据库
D. SQLite是Python的内置库,可以直接用import sqlite3导入
正确答案:A
答案解析:主关键字PRIMARY KEY可以不指定,默认用序号当作主关键字。
6、关于SQLite,说法错误的是?( )
A. 同一个数据库文件中,不能创建名称相同的表
B. SQLlite Expert是常用的查看数据库的软件
C. Python可以连接已存在的数据库
D. 向数据库的表中插入数据时,所有字段都必须输入完整(不允许留空)
正确答案:D
答案解析:向数据库的表中插入数据时,指定了NOT NULL时不能留空。
7、关于导入SQLite,正确的导入语句是?( )
A. import SQLite3
B. import sqlite3
C. import sqlite
D. import SQLite
正确答案:B
答案解析:import sqlite3正确导入SQLite。
8、关于SQLite连接数据库语句,正确的是?( )
A. conn=sqlite.connect('d:/test.db')
B. conn=sqlite.connect('d:\test.db')
C. conn=sqlite3.connect('d:/test.db')
D. conn=sqlite3.connect('d:\test.db')
正确答案:C
答案解析:表示路径的\必须更换为/。
9、有一个文件记录了 1000个学生的高考总分,每一行信息长度是 20 个字节,要想只读取最后 10 行的内容,不能直接用到的函数是?( )
A. seek()
B. readline()
C. open()
D. read()
正确答案:D
答案解析:seek,用于把文件指针移动到新位置;readline,从文件中读取一行;open,打开文件;read,从文件中读取指定的字符数,括号内无参数或者为负则读取所有内容。
10、以下选项中不是 Python 对文件的写操作方法的是?( )
A. writelines
B. writeline
C. writetext
D. write
正确答案:C
答案解析:writetext是一个用于文本处理和生成的Python框架,并非某个具体的操作方法。
11、以下语句的执行结果是?( )
with open('A.txt','w+') as f:
f.write('hello')
print(f.read())
A. 输出一个'hello'字符串
B. 写到文件A.txt里一个'hello'字符串
C. 写到文件A.txt里一个'hello'字符串并输出一个'hello'字符串
D. 打印'hello'
正确答案:B
答案解析:文件的读取模式为'w+',每次程序运行都会清除文件内容,重新进行写入,f.read(),在'r'模式下读取文件的内容。
12、如下选项中,对文件的描述错误的是?( )
A. 文件中能够包含任何数据内容
B. 文本文件和二进制文件都是文件
C. 文本文件不能用二进制文件方式读入
D. 文件是一个存储在辅助存储器上的数据序列
正确答案:C
答案解析:文本文件可以用二进制文件方式读入。
13、以下关于JSON格式的数据遵循的语法规则,错误的是?( )
A. 数据存储在键值对中
B. 数据的字段由分号分隔
C. 一个花括号保存一个JSON对象
D. 一个方括号保存一个数组
正确答案:B
答案解析:数据的字段由逗号分隔。
14、有一个名为scores.txt的文件,里面存储了一些学生的姓名和成绩,如下所示:
Alice 90
Bob 80
Charlie 85
David 75
Eve 95
你想用Python读取这个文件,并将每一行的数据格式化为一个元组,例如('Alice','90'),请补全下面的代码?( )
with open('scores.txt', 'r') as f:
for line in f:
# 将每一行的数据格式化为一个元组
score = tuple(_______)
print(score)
A. line.split()
B. line.split()
C. line.split(',')
D. line.strip(',')
正确答案:A
答案解析:split方法可以将一个字符串按照指定的分隔符切分成一个列表,例如'a,b,c'.split(',')的结果是['a', 'b', 'c']。如果没有指定分隔符,那么默认按照空格切分,例如'Alice 90'.split()的结果是['Alice', '90']。tuple函数可以将一个可迭代对象(如列表,字符串,集合等)转换为元组,例如tuple(['Alice', '90'])的结果是('Alice', '90')。因此,tuple(line.split())可以将每一行的数据格式化为一个元组,例如tuple('Alice 90'.split())的结果是('Alice', '90')。
15、从一个json文件中读取一些数据,并将其转换为Python的字典对象。可以使用json模块中的load方法来实现这个功能。请问,下面哪个选项是正确的代码,可以从data.json文件中读取数据,并赋值给变量data?( )
A. data = json.load(open('data.json'))
B. data = json.loads('data.json')
C. data = open('data.json').load(json)
D. data = open('data.json').loads(json)
正确答案:A
答案解析:json.load方法可以从一个文件对象中读取json格式的数据,并返回一个Python对象。json.loads方法可以从一个字符串中读取json格式的数据,并返回一个Python对象。open函数可以打开一个文件,并返回一个文件对象。因此,只有选项A可以正确地从文件中读取数据,并赋值给变量data。
16、有如下程序段:
a=[[0]*3 for i in range(4)]
for i in range(len(a)):
for j in range(3):
a[i][j]=i*len(a[j])+1
print(a[2][2])
执行程序后输出的值是?( )
A. 1
B. 0
C. 7
D. 2
正确答案:C
答案解析:运算可得a的为[[1, 1, 1], [4, 4, 4], [7, 7, 7], [10, 10, 10]],故a[2][2]=7。
17、以下关于Python中类的说法错误的是?( )
A. Python使用class关键字来声明一个类,且类名一般首字母大写
B. 类的成员函数中必须有self参数,且self参数永远是第一个参数
C. __init__()方法在类实例化时不会自动调用
D. 定义类之后,需要定义具体的对象才可以访问对象的成员方法或属性
正确答案:C
答案解析:__init__()方法在类实例化会被自动调用。
18、Python中的类有几个主要组成部分?( )
A. 变量和方法
B. 属性和方法
C. 方法和构造函数
D. 方法和构造函数
正确答案:B
答案解析:在Python中,类由属性和方法组成。属性是类的变量,而方法是类的函数。因此,选项B“属性和方法”是正确的。
19、以下代码中,哪个选项可以正确地创建一个类和其实例?( )
A. class MyClass():
pass
my_instance = MyClass('ok')
B. class MyClass():
def __init__(self):
print('hello')
my_instance = MyClass()
C. class MyClass():
x = 10
my_instance = MyClass(x)
D. def MyClass():
print("This is a method")
my_instance = MyClass()
正确答案:B
答案解析:选项B正确地定义了一个类MyClass,然后通过MyClass()创建了一个该类的实例my_instance。其他选项中存在一些错误或不完整的地方。
20、有如下Python程序:
class Cars():
def __init__(self,color,shape):
self.color = color
self.shape = shape
print('您定制的{}{}已经生产好了!'.format(self.color,self.shape))
new_car = Cars('红色','小汽车')
执行程序后,打印的结果是?( )
A. 小汽车
B. 红色
C. 您定制的已经生产好了!
D. 您定制的红色小汽车已经生产好了!
正确答案:D
答案解析:根据代码可知,创建了实例new_car,自动调用构造函数内容,打印相关内容,所以选D。
21、运行以下代码:
import tkinter as tk
def click():
print("Button clicked!")
root = tk.Tk()
button = tk.Button(root, text="Click me!", command=click)
button.pack()
root.mainloop()
当用户点击按钮时,程序将输出?( )
A. "Button clicked!"
B. "Click me!"
C. 没有任何输出
D. 程序将崩溃
正确答案:A
答案解析:代码中定义了一个按钮(Button),并为其command参数指定了一个函数click。当用户点击按钮时,click函数将被调用,从而打印出“Button clicked!”。
22、阅读以下代码:
import tkinter as tk
root = tk.Tk()
listbox = tk.Listbox(root)
listbox.insert(tk.END, "Apple")
listbox.insert(tk.END, "Banana")
listbox.pack()
root.mainloop()
程序运行后,列表框中将显示哪些项?( )
A. 仅"Apple"
B. 仅"Banana"
C. "Apple"和"Banana"
D. 什么也不显示
正确答案:C
答案解析:代码中创建了一个列表框(Listbox),并使用insert方法向其中添加了两个项:"Apple"和"Banana"。因此,程序运行后,列表框中将显示这两个项。
23、下列代码创建了一个按钮,当按钮被点击时,会发生什么?( )
import tkinter as tk
def on_button_click():
print("Button clicked!")
root = tk.Tk()
button = tk.Button(root, text="Click me!", command=on_button_click)
button.pack()
root.mainloop()
A. 弹出对话框显示"Button clicked!"
B. 在控制台输出"Button clicked!"
C. 窗口标题变为"Button clicked!"
D. 按钮文本变为"Clicked!"
正确答案:B
答案解析:在Tkinter中,当按钮的command参数设置为一个函数时,每次按钮被点击时,都会调用该函数。在给出的代码中,当按钮被点击时,on_button_click函数将被调用,该函数会在控制台输出"Button clicked!",因此选项B正确。
24、运行以下代码:
import tkinter as tk
def change_text()
label.config(text="Changed text")
root = tk.Tk()
label = tk.Label(root, text="Original text")
label.pack()
button = tk.Button(root, text="Change text", command=change_text)
button.pack()
root.mainloop()
当点击“Change text”按钮后,标签的文本会变成?( )
A. 保持不变
B. "Changed text"
C. "Button clicked!"
D. "Original text"
正确答案:B
答案解析:在这段代码中,定义了一个标签和一个按钮。点击按钮会调用change_text函数,该函数使用label.config(text="Changed text")来改变标签的文本。因此,当点击"Change text"按钮后,标签的文本会变成"Changed text"。
25、考虑一个名为arr的NumPy数组,其形状是(3, 2)。如果将这个数组转换为形状(2, 3),返回一个新数组,以下哪个函数调用是正确的?( )
A. arr.reshape(2, 3)
B. arr.resize(3, 2)
C. arr.resize(2, 3)
D. arr.flatten()
正确答案:A
答案解析:arr.reshape(2, 3)正确地将名为arr的数组的形状从(3, 2)更改为(2, 3)。reshape函数用于在不更改数据的情况下更改数组的形状。选项A原封不动地保留了数组的原始形状,选项B的resize方法虽然可以改变数组的形状,但它会直接更改原数组而不是返回一个新数组。选项D的flatten方法返回一个将多维数组降为一维的数组,与题目要求不符。
二、判断题
26、26.
下面代码输出结果是:
1
2
3
import numpy as np
a = np.array([1,2,3])
b = a.reshape(3,1)
print (b)
对
错
正确答案:对
答案解析:在NumPy中,'reshape()'函数改变数组的维数。
27、NumPy库中的np.sum( )函数可以用来计算数组中所有元素的平均值。( )
对
错
正确答案:错
答案解析:NumPy库中的np.mean()函数可以用来计算数组中所有元素的平均值。
np.sum()函数可以用来计算数组中所有元素的和。
28、SQLite中使用的SQL语句必须全部使用大写字母。( )
对
错
正确答案:错
答案解析:SQLite中使用的SQL语句大小写字母均可。
29、fi=open("t.txt","r+") 执行后只能对"t.txt"文件进行读操作。( )
对
错
正确答案:错
答案解析:r+ 可以对文件进行读写操作。
30、以只读模式打开文件时,文件指针指向文件开始处。( )
对
错
正确答案:对
答案解析:以只读模式打开文件时,文件指针位于文件的开始位置。
31、在类定义的外部没有任何办法可以访问对象的私有成员。( )
对
错
正确答案:错
答案解析:私有成员在类的内部可以直接访问,在类的外部不可以通过调用类的公有成员方法的方式进行访问。但可以借助类的内部方法,将私有属性返回到类的外部,在类的外部对私有属性进行访问;也可以借助内部方法对私有属性进行修改,对象._类名__私有属性 ,对象._类名__私有方法就可以访问。
32、可以使用np.reshape()函数来改变图像的形状,从而实现旋转、缩放等操作。( )
对
错
正确答案:错
答案解析:np.reshape()函数只能改变数组的维度,但不会改变数组中元素的顺序。如果要对图像进行旋转、缩放等操作,需要使用其他的函数。
33、在Python中,要将一个字典对象保存为json格式的文件,可以使用json.dump()函数。( )
对
错
正确答案:对
答案解析:在Python中,要将一个字典对象保存为json格式的文件,可以使用json.dump()函数。
34、在Python中,封装是将对象的属性和方法绑定在一起,并通过访问器(getter)和修改器(setter)来控制对对象的访问和修改。( )
对
错
正确答案:对
答案解析:在Python中,封装是将对象的属性和方法绑定在一起,并通过访问器(getter)和修改器(setter)来控制对对象的访问和修改。
35、阅读以下代码:
import tkinter as tk
root = tk.Tk()
root.geometry("200x100")
root.title("My Window")
root.mainloop()
执行上述代码后,程序将创建一个尺寸为200x100、标题为“My Window”的窗口。( )
对
错
正确答案:对
答案解析:代码中设置了窗口的尺寸(geometry)为“200x100”,并设置了窗口的标题(title)为“My Window”。因此,程序将创建一个尺寸为200x100、标题为“My Window”的窗口。
三、编程题
36、士兵瑞恩
按照需求填空:
1)士兵瑞恩有一把AK47
2)士兵有枪就可以开火
3)枪能够把子弹发射出去,每射击一次,子弹减少一个
4)枪能够装填子弹 --增加子弹的数量
class Gun():
def ① (self,model):
self.model = model
self.bullet_count = 0
def add_bullet(self,count):
self.bullet_count += count
def shoot( ② ):
if self.bullet_count <= 0:
print('%s没有子弹' %(self.model))
else:
self.bullet_count ③ 1
print('%s的子弹数量为%s' %( ④ ,self.bullet_count))
class Soldier():
def __init__(self,name):
self.name =name
self.gun = None
def fire(self):
if self.gun == None:
print('%s没有枪' %(self.name))
else:
self.gun.add_bullet(5)
⑤
ak47 = Gun('AK47')
ak47.add_bullet(10)
ak47.shoot()
ruien = Soldier('RE')
ruien.gun = ak47
ruien.fire()
37、成绩统计
(1)在D盘根目录下建立一个空数据库Cjdata.db,按照如图所示的表结构,创建学生基本情况表cj;
(2)为表cj添加数据,内容是”学号—— 20210919、班级——4、姓名——赵雨乐、性别——女、成绩——98“;
(3)查询并输出表cj中成绩低于100的数据。
请根据要求,补全代码。(本题无需运行通过,写入代码即可)
import sqlite3
conn = ①
cursor = conn.cursor()
cursor.execute('''CREATE TABLE cj
( ② ,
班级 INTEGER,
姓名 TEXT(10) NOT NULL,
性别 TEXT(1) NOT NULL,
成绩 REAL);''')
cursor.execute(" ③ ('20210919',4,'赵雨乐','女',98)")
conn.commit()
cursor.execute(" ④ ")
for i in ⑤ :
print(i)
conn.close()
参考程序:
import sqlite3
conn =sqlite3.connect("d:/Cjdata.db")
cursor = conn.cursor()
cursor.execute('''CREATE TABLE cj
(学号 TEXT(10) PRIMARY KEY NOT NULL,
班级 INTEGER,
姓名 TEXT(10) NOT NULL,
性别 TEXT(1) NOT NULL,
成绩 REAL);''')
cursor.execute("INSERT INTO CJ VALUES('20210919',4,'赵雨乐','女',98)")
conn.commit()
cursor.execute("SELECT * from cj where 成绩<100")
for i in cursor.fetchall():
print(i)
conn.close()
试题解析:
评分标准:
(1)sqlite3.connect("d:/Cjdata.db") 或等效答案;(2分)
(2)学号 TEXT(10) PRIMARY KEY NOT NULL 或等效答案; (2分)
(3)INSERT INTO CJ VALUES 或等效答案;(2分)
(4)SELECT * from cj where 成绩<100 或等效答案;(2分)
(5)cursor.fetchall() 或等效答案。(2分)
38、家庭记录
假设有一个任务是帮助你的家庭记录每日的支出。每天结束时,你会记录下今天的日期、购买的物品以及花费的金额。这个信息将被保存在一个名为ledger.txt的文本文件中。编写一段Python代码来完成以下的操作:
(1)在文件末尾追加新的消费记录;
(2)需要查看当前所有的消费记录。
为了简化问题,假设每条记录只包含日期、物品和金额,使用逗号分隔。
def append_record(date, item, amount):
with open("ledger.txt", " ① ") as file:
file.write(f"{date},{item},{amount}\n")
def read_records():
with open(" ② ", "r") as file:
records = file. ③ ()
for record in records:
print(record, end="")
# 示例操作
append_record("2023-04-05", "Groceries", 35.20)
append_record("2023-04-06", "Internet Bill", 50)
④ ()