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)

++++④++++()

相关推荐
咖啡续命又一天18 分钟前
python 自动化采集 ChromeDriver 安装
开发语言·python·自动化
huohaiyu1 小时前
synchronized (Java)
java·开发语言·安全·synchronized
_OP_CHEN1 小时前
C++基础:(九)string类的使用与模拟实现
开发语言·c++·stl·string·string类·c++容器·stl模拟实现
蓝天智能1 小时前
QT MVC中View的特点及使用注意事项
开发语言·qt·mvc
松果集1 小时前
【1】数据类型2
python
且慢.5891 小时前
命令行的学习使用技巧
python
木觞清1 小时前
喜马拉雅音频链接逆向实战
开发语言·前端·javascript
海琴烟Sunshine2 小时前
leetcode 66.加一 python
python·算法·leetcode
wuxuanok2 小时前
苍穹外卖 —— 公共字段填充
java·开发语言·spring boot·spring·mybatis
偷光2 小时前
浏览器中的隐藏IDE: Console (控制台) 面板
开发语言·前端·ide·php