青少年软件编程(Python)等级考试试卷(三级)
202203真题与解析
分数:100 题数:37 测试时长:60分钟
一、单选题(共25题,共50分)
1、二进制数101100111对应的十六进制数的数值是? ( )
A、6
B、369
C、167
D、165
2、Python中表示合法的八进制整数是? ( )
A、0o129
B、0o12A
C、0O1708
D、001207
3、在Python中,int(‘10’,16)语句的作用是? ( )
A、将十进制数10转化为十六进制数16
B、将十六进制数10转化为十进制数16
C、将字符串"10"转化为二进制整数
D、将字符串"10"转化为十六进制整数
4、八进制7与十六进制7相加,其对应的十进制数是? ( )
A、21
B、7
C、14
D、77
5、关于语句f=open(‘c:/abc.csv’, ‘r’),下列描述不正确的是? ( )
A、f是变量名
B、以只读方式打开文件
C、如果文件abc.csv不存在,会创建abc.csv
D、'c:/abc.csv'代表c盘中一个名为'abc.csv'的文件
6、有如下从csv文件中读入数据的程序段,程序中存在错误的地方是?( )
f=open("abc.csv","r")
m=[]
for lines in f:
m.append(lines.strip("\n").split("\"))
f.close()
print(m)
A、"r"
B、lines.strip("\n")
C、split("\")
D、f.close()
7、对于a=len([2,3,4,5,[7,8],(9,10)]),a的值是? ( )
A、4
B、6
C、8
D、7
8、有关Python文件常用读写方式的描述,错误的是? ( )
A、read()每次读取整个文件
B、read()生成的文件内容是一个字符串
C、readline()每次只读取文件的一行
D、readlines()每次按行读取整个文件内容,将读取到的内容放到一个字符串中
9、下列说法错误的是? ( )
add=['北京','上海','广州','深圳']
f=open('city.csv','w')
f.write(','.join(add)+'\n')
f.close()
A、f=open('city.csv','w')说明当前是写入模式
B、f.write(','.join(add)+'\n')语句改成f.write(' '.join(add)+'\n') ,程序运行效果一样
C、删除f.close()语句,不能正确保存文件
D、当前程序的功能是将列表对象输出到csv文件
10、当发生异常时,下列描述正确的是? ( )
A、需要捕获异常,然后进行相应的处理
B、需要把可能发生错误的语句放在except模块里
C、需要把处理异常的语句放在try模块里
D、需要为每一个try模块设定且只能设定一个except模块
11、下列程序段在运行时输入"2",则输出结果是? ( )
try:
a=eval(input())
print(a)
except NameError:
print('Error!')
A、" 2"
B、2.0
C、Error!
D、2
12、下列程序运行结果是? ( )
a="2"
b="3"
c=int(a+b)
print(c)
A、5
B、"5"
C、5.0
D、23
13、执行代码a,b,c=sorted((1,3,2))之后,变量b的值为? ( )
A、1
B、3
C、2
D、(1,3,2)
14、x = min(‘5678’),下列选项中语法错误的一项是? ( )
A、print(max(float(x), 7, 6))
B、print(max(ord(x), 7, 6))
C、print(max(bin(x), 7, 6))
D、print(max(int(x), 7, 6))
15.以下表达式的值为Fasle的是?()
A、all(())
B、any(['0'])
C、any((0,))
D、all(['a','b'])
16、以下表达式的值为True的是? ( )
A、bool([])
B、bool(None)
C、bool("False")
D、bool(range(0))
17、print(divmod(22,7))的运行结果是? ( )
A、3.0
B、3
C、[3,1]
D、(3,1)
18、下列表达式的结果与其他三项不相同的是? ( )
A、abs(-3.4)
B、round(abs(-3.4))
C、abs(round(-3.4))
D、min(round(3.4),round(3.8))
19、关于ascii()函数,描述不正确的是? ( )
A、ascii()返回一个对象的字符串
B、ascii()返回一个对象的ASCII码的值
C、ascii()的返回值的类型必然是字符串
D、ascii(1)的结果是"1"
20、下列关于表达式的计算结果,不正确的是? ( )
A、bool(2*3-0)的值为"True"
B、bool(2*3-2)的值为"True"
C、bool(2*3-3)的值为"True"
D、bool(2*3-6)的值为"True"
21、下列输出结果为"1+2+3=6"的是? ( )
A、print(1+2+3=6)
B、print(1+2+3,'=6')
C、print(1,2,3,sep='+','=6')
D、print(1,2,3,sep='+',end='=6')
22、下列函数能创建一个新的列表的是? ( )
A、sorted()
B、list()
C、dict()
D、set()
23、关于算法的说法,下列说法正确的是? ( )
A、采用顺序查找算法,一定能找到数据
B、算法必须有输入和输出
C、对分查找算法不需要对数据进行排序
D、顺序查找算法不需要对数据进行排序
24、有如下列表a=[8,7,9,6,3,8],采用冒泡排序进行降序排序,请问第2趟排序之后的结果是? ( )
A、[9,8,7,6,8,3]
B、[8,9,7,8,6,3]
C、[9,8,7,8,6,3]
D、[9,8,8,6,7,3]
25、有如下列表a=[8,7,9,6,3,8],采用选择排序进行升序排序,请问第2趟排序之后的结果是? ( )
A、[7,8,6,3,8,9]
B、[3,6,9,7,8,8]
C、[7,6,3,8,8,9]
D、[3,6,7,8,8,9]
二、判断题(共10题,共20分)
26、在Python中,0x10010转化为十进制数是18。( )
27、在Python中,可以使用下面代码读取文件中的数据到列表。( )
f = open('city.csv','r')
name = f.read().strip('\n').split(';')
f.close()
28、在Python中open(‘city.csv’,‘r’)命令的作用是以只读方式打开文件名为city的csv格式文件。( )
29、hex(int(‘12’,16))的结果是’0x18’。( )
30、在Python中,向csv文件中写入数据时,用逗号合并列表name中的元素,可以使用f.write(‘,’.join(name)+‘\n’)语句(f为文件对象名)。( )
31、try-except-else-finally异常处理结构中,不论try程序段中的语句有没有错误,finally程序段中的语句都会得到执行。( )
32、在Python中,执行print(ascii(ord(‘A’)+12))语句,打印一个整型数值结果。( )
33、在Python中,sorted()函数可以实现对列表中数据的排序,但排序后不改变原列表中数据的位置。( )
34、在Python中,表达式divmod(26,10) 的输出结果为(2,6)或(3,-4)。( )
35、在Python中,chr(ord(‘b’)-32)语句的功能是将小写字母b转换为大写字母B。( )
三、编程题(共3题,共30分)
35.明明请你帮忙寻找100-999之间的所有“水仙花数”,并统计个数。“水仙花数”是指一个三位数各位数字的立方和等于该数本身。
例如:153=111+555+333。要求输出结果如下所示:
153
370
371
407
请编程实现上述功能,补全代码。
for i in range( ① ):
x=i
a=x % 10
x= ( ② )
b=x % 10
c=x // 10
if ( ③ ):
print(i)
36.查找“支撑数”。在已知一组整数中,有这样一种数非常怪,它们不在第一个,也不在最后一个,而且刚好都比左边和右边相邻的数大,你能找到它们吗? 输入一个数组,输出每个支撑数的数值以及它们在数组中位置编号。
示例:
输入:
1 3 2 4 1 5 3 9 7 10 8 23 85 43
输出:
3 2
4 4
5 6
9 8
10 10
85 13
请编写程序实现上述功能,补全代码。
s=input()
x=s.split(' ')
a=[]
for i in range(0,len(x)):
a.append(int( ① )
b=[]
c=[]
n=0
for i in range(1, ② ):
if (a[i]>a[i-1] and ③ ):
b.append(a[i])
c.append( ④ )
for i in range( ⑤ ):
print(b[i],' ',c[i])
37.请读取某班级语文学科的成绩文件score.txt的数据,数据内容如下图显示:
下列代码实现了读取数据并对每个成绩从小到大排序后并输出,请你补全代码。
with open('/data/ ① ', 'r') as f:
list = f.readlines()
for i in range(0, len(list)):
list[i] = list[i].strip('\n')
list[i]= ( ② )
( ③ )
print(list)
f.close
参考答案与解析:
一、单选题
1. C
- 二进制数转换为十六进制数,每四位二进制数对应一位十六进制数。101100111可以分为1011和00111,1011对应B,00111对应7,所以十六进制数为167。
2. D
-在 Python 中,八进制整数以`0o`或`0O`开头。选项 A 中八进制不能出现数字 8 和 9;选项 B 中有字母 A 不合法;选项 C 出现数字 8 不合法。答案是 D,`0O1207`是合法的八进制表示形式。
3. B
- 在Python中,int() 函数用于将其他形式的数字转换为整数。该函数可以接受两个参数,第一个参数是要转换的数字,第二个参数是该数字的基数(即数字的进制)`int('10',16)`将十六进制数10转化为十进制数16。
4. C
- 八进制7转换为十进制是7,十六进制7转换为十进制是7,两者相加为14。
5. C
- 如果文件`abc.csv`不存在,`open('c:/abc.csv', 'r')`会报错,不会创建文件。
6. C
- `split("\"))`中的引号应该是单引号,即`split('\")`错误。
7. B
- `len([2,3,4,5,[7,8],(9,10)])`计算列表的长度,列表中有6个元素,所以结果是6。
8. D
- `readlines()`每次按行读取整个文件内容,将读取到的内容放到一个列表中,不是字符串。
9. B
- `f.write(','.join(add)+'\n')`改成`f.write(' '.join(add)+'\n')`,程序运行效果不一样,逗号分隔和空格分隔不同。
10. A
- 当发生异常时,需要捕获异常,然后进行相应的处理。可能发生错误的语句放在`try`模块里,处理异常的语句放在`except`模块里,可以为一个`try`模块设定多个`except`模块。
11. D
- 输入"2",`eval(input())`将其转换为整数2,然后输出2。
12. D
- `a="2"`,`b="3"`,`c=int(a+b)`,`a+b`结果为"23",转换为整数是23。
13. C
- `sorted((1,3,2))`返回排序后的列表`[1,2,3]`,赋值给`a,b,c`后,`b`的值为2。
14. C
- `x = min('5678')`,`x`的值为'5'。`bin(x)`返回的是二进制字符串,不能和整数直接比较大小,所以`print(max(bin(x), 7, 6))`语法错误。
15. C
- A 选项`all(())`结果为`True`。 - B 选项`any(['0'])`结果为`True`。 - C 选项`any((0,))`,元组中元素`0`为假值且只有这一个元素,结果为`False`。 - D 选项`all(['a','b'])`结果为`True`。所以答案是 C。
16. C
- `bool([])`、`bool(None)`、`bool(range(0))`结果都是`False`,`bool("False")`结果为`True`。
17. D
- `divmod(22,7)`返回商和余数组成的元组`(3,1)`。
18.A
- A 选项`abs(-3.4)`结果是`3.4`;B 选项`round(abs(-3.4))`先求绝对值为`3.4`再四舍五入得`3`;C 选项`abs(round(-3.4))`先四舍五入为`-3`再求绝对值得`3`;D 选项`min(round(3.4),round(3.8))`结果也是`3`。所以结果与其他三项不同的是 A 选项。
19. B
- `ascii()`返回一个对象的字符串表示,不是对象的 ASCII 码的值。
20. D
- `bool(2*3-6)`的值为`False`,因为2*3 - 6 = 0,`bool(0)`为`False`。
21. D
- `print(1,2,3,sep='+',end='=6')`输出`1+2+3=6`。
22. B
- `sorted()`返回一个新的已排序列表,但不改变原列表;`dict()`创建字典;`set()`创建集合。只有`list()`可以创建一个新的列表。
23. D
- 顺序查找算法不一定能找到数据;算法可以没有输入,但必须有输出;对分查找算法需要对数据进行排序;顺序查找算法不需要对数据进行排序。
24. C
- 冒泡排序进行降序排序,第一趟排序后结果为`[8,9,7,6,8,3]`,第二趟排序后结果为`[9,8,7,8,6,3]`。
25. B
- 选择排序进行升序排序,第一趟的结果:[3,7,9,6,8,8],第二趟的结果:[3,6,9,7,8,8]
二、判断题
26. 错误
- `0x10010`转化为十进制数是65552。
27. 错误
- `split(';')`中的分隔符应根据实际文件中的分隔符来确定,不一定是分号。
28. 正确
- `open('city.csv','r')`是以只读方式打开文件名为`city`的`csv`格式文件。
29. 正确
- `hex(int('12',16))`将十六进制数12转换为十进制再转换回十六进制,结果是`0x18`。
30. 正确
- 向`csv`文件中写入数据时,可以用逗号合并列表元素并加上换行符写入。
31. 正确
- 在`try-except-else-finally`异常处理结构中,`finally`程序段中的语句无论是否有异常都会执行。
32. 错误
- `print(ascii(ord('A')+12))`打印的是字符串结果,不是整型数值。
33. 正确
- `sorted()`函数可以对列表排序且不改变原列表位置。
34. 错误
- `divmod(26,10)`的结果固定为`(2,6)`。
35. 正确
- `ord('b')`得到小写字母`b`的 ASCII 码值,减 32 后再用`chr()`转换为大写字母`B`。
三、编程题
35.参考答案:
for i in range(100, 1000):
x = i
a = x % 10
x = x // 10
b = x % 10
c = x // 10
if (a * a * a + b * b * b + c * c * c == i):
print(i)
评分标准:
① 100,1000 或等效答案;(3分)
② x//10 或等效答案;(3分)
③ a*a*a+b*b*b+c*c*c==i 或等效答案。(4分)
解析:
①处应该填入100, 1000,表示遍历 100 到 999 之间的所有三位数。
②处应该填入x // 10,去除个位数字后继续获取十位数字。
③处应该填入i == a**3 + b**3 + c**3,判断这个三位数是否满足水仙花数的条件。
36.参考答案:
s=input()
x=s.split(' ')
a=[]
for i in range(0,len(x)):
a.append(int(x[i]))
b=[]
c=[]
for i in range(1, len(a)-1):
if (a[i]>a[i-1] and a[i]>a[i+1]):
b.append(a[i])
c.append(i+1)
for i in range(len(b)):
print(b[i],' ',c[i])
试题解析:
① x[i] 或等效答案;(3分)
② len(a)-1或等效答案;(3分)
③ a[i]>a[i+1] 或等效答案;(4分)
④ i+1 或等效答案;(3分)
⑤ len(b) 或等效答案;(3分)
解析:
①处应该填入x[i],将输入的字符串列表中的每个元素转换为整数添加到列表a中。
②处应该填入len(a) - 1,因为不在第一个和最后一个的数,所以遍历范围是从第二个数到倒数第二个数。
③处应该填入a[i] > a[i + 1],判断当前数是否大于右边相邻的数。
④处应该填入i + 1,记录满足条件的数的位置编号,因为索引从 0 开始,实际位置要加 1。
⑤处应该填入len(b),遍历输出满足条件的数及其位置编号。
37.参考答案:
with open('/data/score.txt', 'r') as f:
list = f.readlines()
for i in range(0, len(list)):
list[i] = list[i].strip('\n')
list[i]=int(list[i])
list.sort()
print(list)
f.close
评分标准:
(1) score.txt (1分)
(2) int(list[i]) (1分)
(3) list.sort() (2分)
解析:①处应该填入score.txt,表示要读取的文件名。
②处应该填入int(list[i]),将读取的字符串形式的成绩转换为整数,以便进行排序。
③处应该填入list.sort(),对转换后的整数列表进行从小到大排序。