当前位置: 首页 > news >正文

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

2023-09 Python六级真题

分数:100

题数:38

测试时长:60min

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

1.  以下选项中,不是tkinter变量类型的是?(D )(2分)

A.IntVar()

B.StringVar()

C.DoubleVar()

D.FloatVar()

答案解析:tkinter无FloatVar()变量类型。

2.  关于tkinter,以下说法错误的是?(B )(2分)

A.Label是签控件,可以显示文本和位图

B.Radiobutton是发送消息控件

C.Text是文本控件,用于显示多行文本

D.Button是按钮控件,在程序中显示按钮

3.  以下程序中,a= Spinbox(win1,from_=10,to=100)的作用是?( D)(2分)

from tkinter import *win1= Tk()a= Spinbox(win1,from_=10,to=100)a.pack()mainloop()

A.生成10-100之间的随机数

B.只能选择10或者100

C.设置窗口尺寸为10x100

D.限制输入范围是10-100之间,包含10和100

答案解析:a= Spinbox(win1,from_=10,to=100)指定输入范围,包含首尾。

4.  编写一个程序,如下图所示,用于计算输入两个数的和,并通过窗口输出计算结果。空白处应补充的代码是?(D )(2分)

import tkinter as tkimport tkinter.messageboxwin=tk.Tk()a=tk.IntVar()b=tk.IntVar()def jia():a1=a.get()b1=b.get()tk.messagebox.showinfo(message=str(a1)+'+'+str(b1) +'=' + str(a1+b1))c=tk.Entry(win,textvariable=a)d=tk.Entry(win,textvariable=b)ok=tk.Button(win,text='+',command=_________)c.place(x=10,y=10,width=80,height=20)d.place(x=10,y=40,width=80,height=20)ok.place(x=10,y=80,width=50,height=20)win.mainloop()

A.add

B.plus

C.jia()

D.jia

5.  假设你正在开发一个电子商务网站,你需要存储用户订单信息。需要创建一个名为 orders 的表,下面哪个 SQL 语句最合适?(A )(2分)

A.CREATE TABLE orders (id INTEGER PRIMARY KEY, user_id INTEGER, product_name TEXT, quantity INTEGER, price REAL)

B.CREATE TABLE orders (user_id INTEGER, product_name TEXT, quantity INTEGER, price REAL)

C.CREATE TABLE orders (id INTEGER PRIMARY KEY, user_id INTEGER, product_name TEXT)

D.CREATE TABLE orders (id INTEGER, user_id INTEGER, product_name TEXT, quantity INTEGER, price REAL)

答案解析:选项A包含了所有必要的列(ID、用户ID、产品名称、数量和价格),并将ID列设置为主键。因此,正确答案是A。

6.  以下哪个Python代码片段正确地执行了一个SQL查询并获取了所有结果?( B)(2分)

A.

cursor.execute("SELECT * FROM students")

results = cursor.scroll()

B.

cursor.execute("SELECT * FROM students")

results = cursor.fetchall()

C.

results = cursor.execute("SELECT * FROM students").fetchone()

D.

cursor.begin("SELECT * FROM students")

results = cursor.fetchmany()

答案解析:正确答案:B。要执行一个SQL查询并获取所有结果,首先使用游标的execute()方法执行查询,然后使用fetchall()方法获取所有结果。

7.  在使用SQLite数据库时,游标的主要作用是?(D )(2分)

A.管理数据库连接

B.用于数据库的备份和恢复

C.储存数据库的表结构

D.执行SQL查询并获取结果

答案解析:正确答案:D。游标(Cursor)是SQLite数据库中用于执行SQL查询并获取结果的对象。游标可以执行各种SQL命令,如SELECT、INSERT、UPDATE和DELETE,并通过如fetchone()、fetchmany()、fetchall()等方法获取查询结果。

8.  给定以下 Python 代码,连接到一个 SQLite 数据库并查询表 students。请问,查询结果中包含多少个学生?(C )(2分)

import sqlite3conn = sqlite3.connect(":memory:")cursor = conn.cursor()cursor.execute("""CREATE TABLE students (id INTEGER PRIMARY KEY,name TEXT NOT NULL,score INTEGER NOT NULL);""")cursor.execute("INSERT INTO students (name, score) VALUES ('小明', 90)")cursor.execute("INSERT INTO students (name, score) VALUES ('小芳', 85)")cursor.execute("INSERT INTO students (name, score) VALUES ('轩轩', 92)")cursor.execute("INSERT INTO students (name, score) VALUES ('乐乐', 88)")conn.commit()cursor.execute("SELECT * FROM students WHERE score >= 90")result = cursor.fetchall()conn.close()print(result)

A.0

B.1

C.2

D.3

答案解析:正确答案:C。该代码首先创建了一个 SQLite 数据库并创建了一个名为 students 的表。表中有4条学生记录,分别为小明、小芳、轩轩 和 乐乐。然后查询分数大于等于90的学生,结果为 小明 和 轩轩,共2个学生。

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

A.b[1][3]

B.b[2][3]

C.b[2][1]

D.b[1][4]

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

10. 假设有一个名为"Person"的类,如何创建一个名为"john"的类的实例?(C )(2分)

A.person = Person()

B.person = john.Person()

C.john = Person()

D.john = person.Person()

答案解析:使用类名后跟括号,可以调用类的构造函数创建实例。在这个例子中,使用"Person()"创建了一个名为"john"的实例。

11. 运行以下Python代码,结果是?(A)(2分)

class Person():def __init__(self, name, age):self.name = nameself.age = agedef say_hello(self):print(f"Hello, my name is {self.name}. I am {self.age} years old.")person1 = Person("Alice", 25)person2 = Person("Bob", 30)person1.say_hello() 

A.Hello, my name is Alice. I am 25 years old.

B.Hello, my name is Bob. I am 30 years old.

C.Hello, my name is Bob. I am 25 years old.

D.Hello, my name is Alice. I am 30 years old.

答案解析:代码中,定义了一个名为Person的类。这个类有一个初始化方法__init__,用于设置实例的属性name和age。还有一个类方法say_hello,用于打印实例的名字和年龄。然后,创建了两个Person类的实例person1和person2,并通过调用实例的方法say_hello来输出实例person1的信息。

12. 下面定义类的方法正确的是?(D )(2分)

A.def cat()

B.def Cat()

C.class cat()

D.class Cat()

13. 运行以下Python代码,结果是?(B)(2分)

class Parent():def __init__(self, name):self.name = namedef greetings(self):print("Parent: Hi, I'm", self.name)   class Child(Parent):def greetings(self):super().greetings() print("Child: Hello!")parent = Parent("Alice")child = Child("Bob")child.greetings()

A.

Parent: Hi, I'm Alice

Child: Hello!

B.

Parent: Hi, I'm Bob.

Child: Hello!

C.

Parent: Hi, I'm Bob

D.

Child: Hello!

答案解析:代码中,定义了一个Parent类和一个Child类,Child类继承自Parent类。Child类中的greetings方法使用super()函数调用了父类Parent的方法,并在其基础上添加了额外的逻辑print("Child: Hello!")。

14. 有如下Python程序段:

n=3m=2a=[[0 for i in range(n)] for j in range(m)]a.append([0,0,n-m])a.insert(-1,[n for i in range(n)])print(a)

执行程序后,下列选项中值为1的是?(B )(2分)

A.a[m][n]

B.a[n][m]

C.a[len(a)-1][0]

D.a[m][0]

答案解析:程序运行结束后,a的值为[[0,0,0], [0,0,0],[3,3,3],[0,0,1]]。选项B即a[3][2],值为1。

15. 利用Python列表创建一个二维数组,不正确的方法是?(C )(2分)

A.a=[[1,1,3],[2,6,7],[4,7,1]]

B.b=[[0 for i in range(3)] for j in range(2)]

C.c=[0]*4*4

D.d=[[0]*3,[9]*3,[4]*3]

16. 有如下Python程序段,执行程序后,输出的结果是?( A)(2分)

import csvwith open('123.csv', 'w',newline='') as f:w=csv.writer(f)w.writerows([('hello','world'), ('I','love','you')])with open('123.csv', 'r') as f:sp= csv.reader(f)for row in sp:print(row[0],end=',')

A.hello,I,

B.hello,world

C.I,you

D.程序有误

答案解析:w.writerows([('hello','world'), ('I','love','you')])语句是对‘123.csv’文件写入两行内容,print(row[0],end=',')语句是将每行的第一个元素输出,所以选A。

17. 有如下Python程序段:

a=[1,2,3,5,6,8,9,11,15,0] #0表示该位置未存储元素num=int(input( "输入需要插入的数据:"))for i in range(len(a)):if a[i]>num:for j in range(len(a)-1,i-1,-1):a[j]=a[j-1]a[i]=numbreakelse:a[-1]=numprint(a)

执行程序后,输入数字9,则位置下标发生改变的数据个数?(B )(2分)

A.3

B.2

C.1

D.0

答案解析:当数组arr中的元素arr[i]大于新数据num时,则将位置i及其之后的数据都向后移动,所以当输入的数字为9时,11大于num,则11和15的位置下标将发生改变。

18. 文件水果.txt中的内容如图所示:

执行如下Python代码,输出的结果是?(C)(2分)

s={}with open('水果.txt') as f:a=f.readlines()for i in a:if i in s:s[i]+=1else:s[i]=1print(s["苹果"])

A.1

B.2

C.3

D.4

答案解析:本题将读入的文件数据存放到字典s中,最后输出s["苹果"]的值,即苹果出现的次数,共3次。答案为C。

19. 执行如下代码:

fname = input("请输入要写入的文件:")fo = open(fname, "w+")ls=["清明时节雨纷纷,","路上行人欲断魂,","借问酒家何处有?","牧童遥指杏花村。"]fo.writelines(ls)fo.seek(0)for line in fo:print(line)fo.close ()

以下选项中描述错误的是?(C)(2分)

A.执行代码时,从键盘输入“清明.txt”,则清明.txt 被创建

B.代码主要功能为向文件写入一个列表类型,并打印输出结果

C.fo.seek(0)这行代码可以省略,不影响输出效果

D.fo.writelines(ls)将元素全为字符串的 ls列表写入文件

答案解析:答案为C 写入数据之后,光标停留在最后写入的位置,需要移到开头位置,以便于输出数据。

20. 对于二维数据文件fname,下面代码中的变量 x,以下选项中描述最合理的是?(D )(2分)

fo = open (fname, "r")for x in fo:print(x)fo. close ()

A.变量x表示文件中的一个字符

B.变量x 表示文件中的一组字符

C.变量x表示文件中的全体字符

D.变量x表示文件中的一行字符

答案解析:答案:D 读取文件按行读取,每次读取一行数据

21. 已知文件1.txt内容为:abcdefghijklmnopqrstuvwxyz,文件1.txt与程序文件保存在同一个目录,运行以下程序,输出结果是?( C)

with open("1.txt","r") as f:f.seek(10)print(f.read(1))

A.j

B.a

C.k

D.l

22. 创建一个3*3的数组,下面代码错误的是?( B)(2分)

A.

import numpy as npnp.arange(0,9).reshape(3,3)

B.

import numpy as npnp.random.random([3,3,3])

C.

import numpy as npnp.eye(3)

D.

import numpy as npnp.mat('1,2,3;4,5,6;7,8,9')

答案解析:np.random.random([3,3,3]) 生成的是个三维数组,每个数组都是3行3列。

23.

import numpy as np

np.arange(16).reshape(4,4),求点(3,2)的值是?(A )(2分)

A.14

B.9

C.10

D.6

答案解析:(3,2)求的是索引位3的行,索引位2列的数,索引是从0开始,所求的值应该是位于数组的第4行第3列,故为14。

24. 有关数据可视化常用图表,下面说法错误的是?(C )(2分)

A.折线图用于查看因变量随自变量改变的趋势

B.柱形图直观展示对象之间数值的大小关系

C.散点图无法反映特征之间的统计关系

D.直方图比较直观地看出数据特征的分布状态

答案解析:散点图是使用坐标点的分布形态反映特征间统计关系的一种图形。

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

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

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

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

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

答案解析:scatter()函数用于绘制散点图,bar()函数用于绘制垂直柱形图,plot()函数用于绘制折线形图,barh()函数用于绘制水平柱形图,故选A。

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

26. 运行以下程序,程序不会报错,将打开窗口,显示文字为"成功"。(错 )

from tkinter import *messagebox.showinfo('提示信息','成功')

答案解析:需要先导入tkinter.messagebox。

from tkinter import *

from tkinter import messagebox

messagebox.showinfo('提示信息','成功')

27. 在Python中,当不再需要使用SQLite数据库时,应关闭游标和数据库连接以释放资源。(对 )

答案解析:正确。应当在不再需要使用SQLite数据库时关闭游标和数据库连接。这可以通过调用游标的close()方法和数据库连接的close()方法来实现。这样做有助于避免资源泄漏和潜在的数据库问题。

28. 在Python中,子类可以调用父类的方法,并且可以通过重写父类的方法来修改其行为。(对 )

答案解析:在Python中,子类可以调用父类的方法,并且通过重写(覆盖)父类的方法来修改或扩展其行为。

29. 下列代码输出结果是10。( 错)

class MyClass():class_attribute = 10MyClass.class_attribute = 20 print(MyClass.class_attribute) 

答案解析:代码中,定义了一个名为MyClass的类,并给它添加了一个类属性class_attribute,初始值为10。只需使用类名和属性名称进行赋值操作,语句MyClass.class_attribute = 20 修改类属性的值为20,最后结果输出20。 需要注意的是,修改类属性的值将影响到所有该类的实例对象。类属性是所有实例对象所共享的。

30. 在python的json库中,json.dumps 用于将 Python 对象编码成 JSON 字符串。( 对)

答案解析:json.dumps 用于将 Python 对象编码成 JSON 字符串。

31. 有如下Python代码:

import jsonData1 = '{"a":1,"b":2,"c":3,"d":4,"e":5}';text = json.loads(Data1)print(text)

输出的text是dict类型数据。(对 )

答案解析:json.loads作用是将已编码的JSON字符串解码为Python对象,由代码可知text为字典类型。

32. 对文件进行读写操作之后必须关闭文件以防止文件丢失。(对 )

答案解析:对文件进行读写时,文件必需关闭否则会丢失读写数据。

33. 执行语句 f=open('demo.txt', 'r'),demo.txt 文件必须己经存在,否则会报错。(对 )

答案解析:执行语句 f=open('demo.txt', 'r') 在打开文件时,如果demo.txt文件不存在,将会抛出FileNotFoundError异常。

34. 使用 matplotlib.figure的作用是构建一张空白的画布,可以在空白的figure上直接绘图。(错 )

答案解析:在空白的画布上,需要使用add_subplot来创建子图。

35. 在用matplotlib绘图时,修改X轴、Y轴的标签和绘制的图形没有先后。(对 )

答案解析:在用matplotlib绘图时,修改X轴、Y轴的标签和绘制的图形没有先后。

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

36. 钢筋问题

统计三角形数量及钢筋总长度。某工程需要很多由钢筋组成的三角形,在文本文件“data.txt”中每一行的三个数字分别表示三根钢筋的长度(整数,单位:厘米,数字间用空格隔开),若这三根钢筋能组成三角形,要求统计并输出三角形数量以及这些钢筋材料的总长度(若不能组成三角形则不对这些数据进行统计),文本文件数据如图a所示,程序运行界面如图b所示。

 

完成该任务的思路是:首先从文本文件“data.txt”读取文本内容到变量line,提取边长数据后,统计数据并输出结果。

相关代码如下,请补全代码:

def readfile(filename):f = open(filename,encoding = "utf-8")    m=[]; n=[]; k=[]line = f.readline() while line:x=line.strip().split(" ")m.append(int(x[0]))     n.append(int(x[1]))     k.append(int(x[2]))   _____①_______       f.close()return m,n,kdef triangle(x,y,z):     # 判断数据x、y、z能否组成三角形flag=Falseif _____②_______:flag=Truereturn flaga,b,c=readfile("/data/ ______③_______ ")    #读入文件n=len(a);count=0;sum=0print("能组成三角形的数据有:")for i in range(n):if  ________④________:sum+=a[i]+b[i]+c[i]print(a[i],b[i],c[i])count+=1  print("能组成三角形的共有:",count,"组")print("共需要材料长度共是:",sum)

参考程序:

def readfile(filename):f = open(filename,encoding = "utf-8")    m=[]; n=[]; k=[]line = f.readline() while line:x=line.strip().split(" ")m.append(int(x[0]))     n.append(int(x[1]))     k.append(int(x[2]))   line = f.readline()f.close()return m,n,kdef triangle(x,y,z):     # 判断数据x、y、z能否组成三角形flag=Falseif x+y>z and x+z>y and y+z>x:flag=Truereturn flaga,b,c=readfile("/data/data.txt")    #读入文件n=len(a);count=0;sum=0print("能组成三角形的数据有:")for i in range(n):if triangle(a[i],b[i],c[i]):sum+=a[i]+b[i]+c[i]print(a[i],b[i],c[i])count+=1  print("能组成三角形的共有:",count,"组")print("共需要材料长度共是:",sum)

评分标准:

(1)line = f.readline();(3分)

(2)x+y>z and x+z>y and y+z>x;(2分)   

(3)data.txt;(2分)

(4)triangle(a[i],b[i],c[i])。(3分)

37. 工资管理

编写简单的工资管理程序,系统中包含工人(worker)和经理(manage),所有员工都有员工号、姓名、基本工资等属性。

工人:工人具有工作小时数和时薪的属性,工资计算方法为基本工资 + 工作小时数 * 时薪;

经理: 具有固定的月薪,计算方法为固定月薪。

根据以上的要求设计类,显示人员的信息和工资情况,运行结果如下:

工号:001,姓名:King,本月工资:10000

King的月薪是:10000

工号:002,姓名:Lily,本月工资:20000

Lily每天的工作时长:10小时

Lily的月薪是: 20000

class Person():def __init__(self,id,name,salary):self.id = idself.name = name______ ① _______def __str__(self):#查看对象,触发执行print语句msg = '工号:{},姓名:{},本月工资:{}'.format(self.id,self.name,self.salary)return msgclass Worker(Person):def __init__(self,id,name,salary,hours,per_hour):super().__init__(id,name,salary)self.hours = hoursself.per_hour = per_hourdef getSalary(self):money = self.hours * self.per_hour_____②______       return   ______③________       class Manage(Person):def __init__(self,id,name,salary,time):super().__init__(id,name,salary)self.time = timedef getSalary(self):return self.salary,self.timeworker = Worker('001','King',2000,160,50)sal = worker.getSalary()print(worker)print('King的月薪是:{}'.format(sal))manage = Manage('002','Lily',20000,10)_____④_____,  work_time   = manage.getSalary()print(manage)print('{}每天的工作时长:{}小时'.format('Lily',_______⑤________))print('Lily的月薪是:',sal)

标准答案:

class Person():def __init__(self,id,name,salary):self.id = idself.name = nameself.salary = salarydef __str__(self):msg = '工号:{},姓名:{},本月工资:{}'.format(self.id,self.name,self.salary)return msgclass Worker(Person):def __init__(self,id,name,salary,hours,per_hour):super().__init__(id,name,salary)self.hours = hoursself.per_hour = per_hourdef getSalary(self):money = self.hours * self.per_hourself.salary += moneyreturn self.salaryclass Manage(Person):def __init__(self,id,name,salary,time):super().__init__(id,name,salary)self.time = timedef getSalary(self):return self.salary,self.timeworker = Worker('001','King',2000,160,50)sal = worker.getSalary()print(worker)print('King的月薪是:{}'.format(sal))manage = Manage('002','Lily',20000,10)sal,work_time = manage.getSalary()print(manage)print('{}每天的工作时长:{}小时'.format('Lily',work_time))print('Lily的月薪是:',sal)

评分标准:

(1)self.salary = salary;(2分)

(2)self.salary += money;(2分)

(3)self.salary;(2分)

(4)sal;(2分)

(5)work_time。(2分)

38. 考试成绩处理

将某班级的期末考试成绩存放于data.db数据库文件的score数据表内,部分成绩截图如下。

现要求求出english成绩大于或等于80的所有学生的总分平均分,并输出结果。(无需运行通过,写入代码即可)

import sqlite3conn=sqlite3.connect("data.db")cur=conn.cursor( )sql="select * from score ______①______ "cur.execute(sql)______②______conn.commit()cur.close()conn.close()zf=0for i in range(len(list1)):zf+=sum(  ______③_______)pjf=zf/len(list1)print("english大于或等于80分同学的总分平均分是",pjf)

参考程序:

import sqlite3conn=sqlite3.connect("data.db")cur=conn.cursor()sql="select * from score where english >=80"cur.execute(sql)list1 =cur.fetchall()conn.commit()cur.close()conn.close()zf=0for i in range(len(list1)):zf+=sum(list1[i][1:])pjf=zf/len(list1)print("english大于或等于80分同学的总分平均分是",pjf)

评分标准:

(1)where english >=80或其他同等答案;(3分)

(2)list1 =cur.fetchall()或其他同等答案;(3分)

(3)list1[i][1:]或其他同等答案。(4分)

http://www.lryc.cn/news/225736.html

相关文章:

  • 基于STM32设计的智能水母投喂器(华为云IOT)
  • 合成数据加速机器视觉学习
  • 物业管理服务预约小程序的效果如何
  • ORA-00257: Archiver error. Connect AS SYSDBA only until resolved错误解决
  • backbone:从AlexNet到...(持续补充ing)
  • FiRa标准——MAC实现(二)
  • oracle中分组函数LISTAGG
  • 深度学习pytorch之hub模块
  • LeetCode 2258. 逃离火灾:BFS
  • C# PaddleInference.PP-HumanSeg 人像分割 替换背景色
  • Java 变量初始化的两种方式和优缺点比较
  • 15.三数之和
  • 竞赛选题 深度学习疲劳驾驶检测 opencv python
  • PROFINET和UDP、MODBUS-RTU通信速度对比实验
  • CSS3 多媒体查询、网格布局
  • SpringBoot基础(九)-- 配置文件优先级
  • C++ static关键字
  • Anaconda Powershell Prompt和Anaconda Prompt的区别
  • 关于tcp发送成功但对端无法接收情况的思考
  • 01-解码-H264转YUV
  • keepalived+Nginx+邮件
  • CMakeCache.txt有什么用
  • ZYNQ_project:key_breath
  • 设计模式 (原则)
  • LeetCode 每日一题 2023/11/6-2023/11/12
  • Linux 基于 LVM 逻辑卷的磁盘管理【简明教程】
  • CTFHUB-WEB-SQL注入
  • 案例分享:某汽车企业通过龙智拓展Jira功能,实现高效项目管理
  • 【算法与数据结构】40、LeetCode组合总和 II
  • Flink SQL -- 命令行的使用