【免费】中国电子学会2024年03月份青少年软件编程Python等级考试试卷三级真题(含答案)

发布于:2024-06-29 ⋅ 阅读:(15) ⋅ 点赞:(0)

2024-03 Python

分数:100

数:38

测试时长:60min

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

1. 在Python中,hex(2023)的功能是?( A)(2分)

A. 将十进制数2023转化为十六进制数

B. 将十进制数2023转化为八进制数

C. 将十六进制数2023转化为十进制数

D. 将八进制数2023转化为十进制数

答案解析:理解python中数制转换函数,hex()函数是将十进制数转换为十六进制数字符串。

2. 下列表达式的值与其他三个选项不相等的是哪一个?(B )(2分)

A. (A)16

B. (11)8

C. (10)10

D. (1010)2

答案解析:把选项全部转换成十进制,所以本题目选择B。A:(A)16 =(10)10,B:(11)8 =(9)10,C:(10)10 =(10)10,D:(1010)2 =(10)10

3. 下列说法错误或值为False的是?(B )(2分)

A. 将十进制数转化为八进制数的方法是除以8取余,逆序输出

B. (8)16>(8)10

C. (45)10=4×101+5×100

D. 八进制数15对应的十进制数为13

答案解析:进制转换,(8)16=(8)10

4. 下面选项中最大的数是?(D )(2分)

A. (37)8

B. (11111)2

C. (1F)16

D. (32)10

答案解析:A:(37)8=(31)10,B:(11111)2=(31)10,C:(1F)16=(31)10

5. 关于下列代码,说法正确的是?( D)(2分)

try:

    a = int(input('输入一个数:'))

    b = int(input('输入另一个数:'))

    m = a / b

    print('结果是', m)

except:

    print('其他错误!')

except ValueError:

    print('输入的不是数字!')

A. 输入的都是数字,且b为非0整数时,执行try后面的语句

B. 输入的有非数字时,执行except ValueError后面的语句

C. 输入的b为0时,执行except后面的语句

D. 第6行代码只能出现在try-except代码块的最后,所以代码书写有误,不能运行

答案解析:except块只能出现在try-except程序结构的最后,所以代码书写有语法错误。

6. 下列代码的运行结果是?(B )(2分)

for i in range(2):

    try:

        a = 5 % i

    except:

        print('&&&&&')

    else:

        print('@@@@@')

    finally:

        print('*****')

A.

@@@@@

*****

@@@@@

*****

B.

&&&&&

*****

@@@@@

*****

C.

&&&&&

*****

&&&&&

*****

D.

&&&&&

@@@@@

*****

答案解析:try程序块运行了两次;第1次i的值为0,第3行代码运行出错,所以会进入except程序块执行,打印出&&&&&。无论是否出错,finally程序块都会执行,所以打印出*****。第2次i的值为1,代码运行正确,进入else程序块执行,打印出@@@@@,最后进入finally程序块,打印出*****。综上所述,选项B正确。

7. 下面程序使用的with语句打开文件,处理结束后会?( D)(2分)

c=['老虎','狗','狮子','大象','狼']

with open('动物.csv','w') as f:

  f.write(','.join(c)+'\n')

A. 自动读取 动物.csv 文件

B. 自动写入 动物.csv 文件

C. 自动打开 动物.csv 文件

D. 自动关闭 动物.csv 文件

答案解析:with语句打开文件,处理结束后会自动关闭文件。

8. 与下列程序实现的功能一样的是?( B)(2分)

with open('动物.csv','r') as f:

  h=f.read().strip().split(',')

print(h)

A.

f=open('动物.csv','r')

h=f.read().split(',').strip()

f.close()

print(h)

B.

f=open('动物.csv','r')

h=f.read().strip().split(',')

f.close()

print(h)

C.

f=open('动物.csv','r')

h=f.read().strip().split(',')

print(f)

D.

f=open('动物.csv','r')

h=f.read().split(',').strip()

f.close()

print(f)

答案解析:考核从CSV格式文件中读出数据。

9. 关于语句f=with open('d:/stu.csv', 'r'),下列描述不正确的是?( A)(2分)

A. 如果文件stu.csv不存在,会创建stu.csv

B. 以只读方式打开文件

C. f是变量名

D. 程序处理完毕,会自动关闭stu.csv

答案解析:文件打开方式:r只读,如果文件stu.csv不存在,会报错。

10. 有关Python文件常用读写方式的描述,错误的是?(B )(2分)

A. read() 每次读取整个文件

B. read() 生成的文件内容是一个列表

C. readline() 每次只读取文件的一行

D. readlines() 每次按行读取整个文件内容,将读取到的内容放到一个列表中

答案解析:read() 生成的文件内容是一个字符串。

11. 关于语句f=open(r"c:\计算.txt",'w'),下列描述不正确的是?( D)(2分)

A. f是变量

B. 'w'以写方式打开文件

C. 如果文件“计算.txt”不存在,不会报错

D. 如果文件“计算.txt”内原来有内容,将不会被覆盖

答案解析:如果文件“计算.txt”内原来有内容,将会被覆盖。

12. 小明用插入排序算法,编写了如下代码,对列表arr中的数值进行排序,

请问,代码中红色①处,应填写什么代码?( D)

arr = [9, 3, 7, 5, 1, 6, 8, 4, 2]

for i in range(1, len(arr)):

        key = arr[i]

        j = i-1

        while j >=0 and key < arr[j] :

                arr[j+1] = ①

                j = j - 1

        arr[j+1] = key

print ("排序后的数组:",arr)

A. arr[i]

B. arr[j-1]

C. arr[i+1]

D. arr[j]

答案解析:本题为经典的插入排序算法,题中需要补充的代码,就是数值位置互换的代码,所以正确答案是选项D,也就是arr[j]。完整的原始代码如下:

arr = [9, 3, 7, 5, 1, 6, 8, 4, 2]

for i in range(1, len(arr)):

        key = arr[i]

        j = i-1

        while j >=0 and key < arr[j] :

                arr[j+1] = arr[j]

                j = j - 1

        arr[j+1] = key

print ("排序后的数组:",arr)

13. 列表a中全是整数,小明想将其中所有奇数都增加1,偶数不变,于是编写了如下代码。请问红色①处,代码应该是?(D )

a = [1,2,3,4,5,6,7,8,9,10]

for x in range(len(a)):

  if ① != 0:

    a[x] = a[x]+1

print(a)

A. a[x] /2

B. a[x] ^ 2

C. a[x] *2

D. a[x] % 2

答案解析:本题代码中,for循环从a列表中取出值,交给if语句进行判断,如果除以2的余数不等于0,就是奇数,则当前值+1,若等于0则值不变。取余数的运算符是%,所以正确答案是D 。

14. 小明用冒泡排序算法编写了一段程序,请问程序中红色标记的①处,应该填写什么代码?( B)(2分)

a = [8,4,2,11,3,9]

n = len(a)

for i in range(0, n):

    for j in range(0, n-i-1 ):

        if a[j]>a[ ① ]:

            a[j],a[j+1] = a[j+1],a[j]       

print(a)

A. j-1

B. j+1

C. n-1

D. n+1

答案解析:本题考查学生对冒泡算法循环位置的理解,标准答案为选项B 。本程序完整代码如下:

a = [8,4,2,11,3,9]

n = len(a)

for i in range(0, n):

    for j in range(0, n-i-1):

        if a[j]>a[j+1]:

            a[j],a[j+1] = a[j+1],a[j]       

print(a)

15. divmod(-10,3)返回值是?( D)(2分)

A. (-3,1)

B. (-4,2)

C. (-4,-2)

D. (-3,-1)

答案解析:divmod(a,b)函数可以返回a除以b的商和余数,余数的符号由第二个参数的符号决定,在这个例子中,-10除以3的商为-4,余数为2。因此,正确的答案是B. (-4,2)。

16. 下列代码的结果是?( D)(2分)

set_a = set('happy')

set_b = set('java')

set_c = set_a-set_b

c = list(set_c)

print(c)

A. {'h', 'p', 'y'}

B. ['a']

C. ['v', 'y', 'h', 'p', 'j', 'a']

D. ['y', 'h', 'p']

答案解析:首先,set_a包含字符'happy',set_b包含字符'java'。然后,通过set_a-set_b操作取得两个集合的差集,即set_c = set_a - set_b。这将从set_a中移除在set_b中出现的元素,因此set_c将包含字符'h', 'p', 'y'。最后,将set_c转换为列表c,并打印输出c。所以输出结果是['y', 'h', 'p']。

17. 给定列表 nums = [1, 2, 3, 4, 5, 6],以下哪个选项返回 True?(B )(2分)

A. not all(nums)

B. any(nums)

C. not (all(nums) and any(nums))

D. not (all(nums) or any(nums))

答案解析:not all(nums) 返回 True 的条件是列表中至少有一个元素为 False。 any(nums) 返回 True 的条件是列表中有元素为 True。给定列表 `nums = [1, 2, 3, 4, 5, 6]`,所有元素都是非零的正整数,因此any(nums) 返回 True,所以此题选择B选项。

18. 在Python中print(tuple(range(0,8,3)))语句,执行的结果是?(A )(2分)

A. (0,3,6)

B. (0,2,4,6)

C. (0,1,2,3,4,5,6,7)

D. (0,4)

答案解析:range()函数可以生成一个整数序列,其中的参数分别表示起始值、终止值和步长。在这个例子中,range(0, 8, 3)生成的序列是0, 3, 6,然后使用tuple()函数将其转换为元组,最终输出结果为(0, 3, 6),所以此题选A。

19. 下列关于map()函数的代码,其运行结果是?( D)(2分)

res=map(str,[3, 6, 8, 4, 5])

print(list(res))

A. '36845'

B. [3, 6, 8, 4, 5]

C. [6, 12, 16, 8,10]

D. ['3', '6', '8', '4', '5']

答案解析:map()函数将第一个参数(这里是str)作用于第二个参数(这里是列表[3, 6, 8, 4, 5])的每个元素上,返回一个可迭代对象。在这个例子中,str函数将每个数字转换为字符串,所以最终的结果是一个包含字符串的列表['3', '6', '8', '4', '5']。使用list()函数将可迭代对象转换为列表。

20. 下列程序运行结果是?( A)(2分)

a=int(min("2345"))

b=int(max("14693"))

c=b+a

print(c)

A. 11

B. 243

C. 729

D. 6561

答案解析:min("2345")返回的是字符串中ASCII码最小的字符,即"2",转换成int类型为2;max("14693")返回的是字符串中ASCII码最大的字符,即"9",转换成int类型为9;b+a,结果为11。

21. 以下哪个函数可以将字符转换为ASCII码?(B )(2分)

A. ascii()

B. ord()

C. chr()

D. encode()

答案解析:ord()函数可以将字符转换为ASCII码,而ascii()函数则是将对象转换为ASCII码表示的字符串。chr()函数则是将ASCII码转换为字符,而encode()函数则是将字符串编码为指定格式的字节串。

22. 以下哪个值在bool函数中会被解释为False?( A)(2分)

A. 0

B. 1

C. -1

D. 2

答案解析:在bool函数中,除了0以外的所有数值都会被解释为True,而0则会被解释为False。因此选项A中的0会被解释为False。

23. 以下哪个选项描述了abs()函数的返回值类型?(D )(2分)

A. int

B. float

C. bool

D. 不确定,取决于输入参数类型

答案解析:abs()函数的返回值类型取决于输入参数的类型。如果输入参数是整数或浮点数,则返回值也是整数或浮点数;如果输入参数是复数,则返回值是该复数的模长,即一个非负实数。因此,选项D是正确的。

24. 给定一个整数列表nums,如何使用sum函数计算列表中所有元素的和,并返回结果?( A)(2分)

A. sum(nums)

B. sum[nums]

C. sum(nums,[])

D. sum(nums,0)

答案解析:选项A中使用了sum函数来计算整数列表nums的和。sum函数接受一个可迭代对象作为参数,并返回所有元素的和。选项B中使用了中括号[]来调用sum函数,这是错误的语法使用。选项C中的第二个参数是一个空列表[],在sum函数中并没有这种用法。选项D中的第二个参数是一个初始值0,但sum函数在没有指定初始值时,默认为0,因此该参数可以省略。因此,答案为A. sum(nums)。

25. 以下哪个选项描述了程序的输出结果?(C )(2分)

fruits = ['apple', 'banana', 'orange']

for i, fruit in enumerate(fruits):

    print(i, fruit)

A.

(0, 'apple')

(1, 'banana')

(2, 'orange')

B.

apple 0

banana 1

orange 2

C.

0 apple

1 banana

2 orange

D.

('apple', 0)

('banana', 1)

('orange', 2)

答案解析:程序中使用了enumerate()函数来遍历一个包含水果名称的列表,并将每个元素的索引和值分别存储在i和fruit中。在循环体中,使用print()函数将i和fruit打印出来。因此,输出结果为"0 apple, 1 banana, 2 orange"。因此,选项C是正确的。

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

26. 十六进制3C转换成八进制为74。( 对)

答案解析:十六进制3C转换为十进制为60,再转换成八进制为74。

27. 异常处理结构中,如果try程序段中出现了运行错误的语句,那么每一个except程序段都会被运行。( 错)

答案解析:如果try程序段中出现了运行错误的语句,那么会根据错误的具体情况,进入对应的except程序段,不会把每个except程序段都执行。

28. 下面程序,将产生一个“动物.csv” 的文件。( 对)

c=['老虎','狗','狮子','大象']

f=open('动物.csv','w')

f.write(','.join(c)+'\n')

f.close()

答案解析:考核将列表对象输出为CSV格式文件。

29. 使用open()函数打开'food.csv'文件后,返回的是元组。(错 )

答案解析:在Python中使用open()函数打开文件,并返回一个文件对象,然后通过文件对象对文件进行读写操作。


30.

 f=open(r"c:\字符串.txt",'w')

f.write('Eden\nOrion\nPhoenix\n')

f.close()

上面的程序,能在原来文件的基础上添加三行字符串。(错 )

答案解析:考核将包含多个换行符的字符串写入文件,但是重新生成文件,不会在原来文件的基础上添加三行字符串。

31. abs()函数的功能是获取参数的绝对值,例如abs(-3.14)的运行结果是-3。( 错)

答案解析:abs(-3.14)的运行结果是3.14。

32. print(type({"name":"Alice","age":25})==dict)结果为True。( 对)

答案解析:在这个例子中,{"name": "Alice", "age": 25}是一个字典,其中"name"和"age"是键,"Alice"和25是对应的值。使用type()函数可以获取一个对象的类型,type({"name": "Alice", "age": 25})的结果是dict,与dict进行比较的结果是True。

33. format()函数可以指定变量的类型、精度、对齐方式等格式选项,从而生成不同的字符串,如:"{:.2f}".format(3.1415926)的结果为"3.14"。(对 )

答案解析:format()函数可以通过格式化字符串来指定变量的类型、精度、对齐方式等格式选项,从而生成不同的字符串。在这个例子中,"{:.2f}"表示将浮点数格式化为保留两位小数的字符串,所以3.1415926会被格式化为"3.14"。因此正确。

34. 使用open()函数打开一个已存在的文件时,如果指定的模式为"w",则会清空该文件中的内容。( 对)

答案解析:因为"w"模式表示写入模式,如果文件已经存在,那么打开文件时会将文件指针指向文件的开头,然后开始写入新的内容,这样就会覆盖掉原有的内容。所以此说法正确。

35. 二进制数在末尾加个“0”,等于这个数乘以2。(对 )

答案解析:二进制末尾加0,则是把二进制中每个数扩大2倍。例如(11)2=21+20; 末尾加入0后是110, 22+21 =2*(21+20)

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

36. 整数问题

给定一个十进制整数n,求出从1到n的所有整数中出现“1”的个数。

例如,n=2时,1,2出现1个“1”。

n=12时,1,2,3,4,5,6,7,8,9,10,11,12,出现5个“1”。

现编写一个程序,实现如下功能:输入整数n,执行程序后,输出该范围内出现“1”的个数。请完善程序。

n=int(input('请输入整数:'))

        ①       

i=1

while        ②        :

    x=i

    while x>0:

        if         ③        :

            count=count+1

        x//=10

             ④       

print(n,'范围内1的个数有:',count)

标准答案:

参考程序:

n=int(input('请输入整数:'))

count=0

i=1

while i<=n:

    x=i

    while x>0:

        if x%10==1:

            count=count+1

        x//=10

    i=i+1

print(n,'范围内1的个数有:',count)

评分标准:

(1)count=0 或等效答案;(2分)

(2)i<=n 或等效答案;(2分)

(3)x%10==1 或等效答案;(3分)

(4)i=i+1 或等效答案。(3分)

37. 偶数排序

下列程序将数列中的偶数按从小到大顺序输出,请你补全代码。

def even(x):

    return  x%2==0   #自定义函数even,判断x是否为偶数

c=[3,7,1,18,9,12,5,2,22,10]

n=        ①       

h=[]

for i in         ②        :

    for j in range(0,n-i-1):

        if         ③        :

            c[j],c[j+1]=        ④       

for i in range(0,n-1):

         h=filter(        ⑤        ,c)

ans=list(h)    

print(ans)

参考程序:

def even(x):

    return    x%2==0  

c=[3,7,1,18,9,12,5,2,22,10]

n=len(c)

h=[]

for i in range(0,n-1):

    for j in range(0,n-i-1):

        if  c[j]>c[j+1]:

            c[j],c[j+1]=c[j+1],c[j]  

for i in range(0,n-1):

         h= filter(even,c)  

ans=list(h)    

print(ans)

评分标准:

(1)len(c) 或等效答案;(3分)

(2)range(0,n-1) 或等效答案;(3分)

(3)c[j]>c[j+1] 或等效答案;(3分)

(4)c[j+1],c[j] 或等效答案;(3分)

(5)even 或等效答案。(4分)

38. 食堂问卷调查

学校食堂为了提高服务质量,让老师和同学们更好地投入工作和学习,对同学们开展了问卷调查,调查项目共5项(即5个问题),每个项目有A、B、C三个选项,同学们每题可选一项,学校后勤管理的李老师对调查结果进行了收集整理,并存放在"myd.csv"文件中(部分数据如图所示),现在需要分析同学们对这5个项目的答题情况,统计出每个项目选"A"的情况。李老师用Python编写了以下代码,输出结果如下图,请你完善划线处。

import csv

with open("/data/        ①        ")as f:

    cont=list(csv.reader(f))

    qk={"第1题":0,"第2题":0,"第3题":0,"第4题":0,"第5题":0}

    for row in cont[        ②        ]:

        for i in range( len(row)):

            if row[i]==        ③        :

                qk["第"+str(i+1)+"题"]+=1

for i in range(5):

    print("第"+str(i+1)+"题选A的人数为:"+str(qk["第"+str(i+1)+"题"]))

参考程序:

import csv

with open("/data/myd.csv")as f:

    cont=list(csv.reader(f))

    qk={"第1题":0,"第2题":0,"第3题":0,"第4题":0,"第5题":0}

    for row in cont[1:]:     #或者1:len(cont)

        for i in range( len(row)):

            if row[i]=='A':    #或者"A"

                qk["第"+str(i+1)+"题"]+=1

for i in range(5):

    print("第"+str(i+1)+"题选A的人数为:"+str(qk["第"+str(i+1)+"题"]))

评分标准:

(1)myd.csv 或等效答案;(1分)

(2)1:或者1:len(cont) 或等效答案;(1分)

(3)'A'或者"A" 或等效答案。(2分)

本题考查了对csv文件的操作和数据处理能力,同时也考查了枚举算法思想。with语句打开文件,处理结束后会自动关闭被打开的文件,参数对象为对应的文件名“myd.csv”;由于在CSV文件中,第一行为标题行,因此统计从第二行开始也就是索引1开始切片,②处应该填写行切片1:或者1:len(cont);从外循环来看,row表示每一行内容,内循环变量i则表示每一列的列索引号,即分别取0~4,那么row[i]则表示每道题的具体答案,因为要统计A选项的人数,因此③处应该是判断是否选“A”,对选A的题目,字典中相应的值递增1。


网站公告

今日签到

点亮在社区的每一天
去签到