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)

++++④++++()

相关推荐
Allen Bright10 分钟前
【Java基础-26.1】Java中的方法重载与方法重写:区别与使用场景
java·开发语言
执着的小火车12 分钟前
02-18.python入门基础一基础算法
数据结构·python·算法·排序算法
梦茹^_^13 分钟前
排序算法(系列)
数据结构·python·算法·排序算法·希尔排序·基数排序·计数排序和桶排序
秀儿y14 分钟前
单机服务和微服务
java·开发语言·微服务·云原生·架构
ybq1951334543115 分钟前
javaEE-多线程案例-单例模式
java·开发语言
kiiila26 分钟前
【Qt】编辑框/按钮控件---实现HelloWorld
开发语言·qt
码上好玩27 分钟前
vscode写python,遇到问题:ModuleNotFoundError: No module named ‘pillow‘(已解决 避坑)
vscode·python·pillow
Dcy_ASK29 分钟前
认识Python语言
开发语言·python
工业互联网专业1 小时前
Python毕业设计选题:基于python的酒店推荐系统_django+hadoop
hadoop·python·django·vue·毕业设计·源码·课程设计