2024年NOC大赛软件创意编程(python初中组初赛)真题
题型和分值:单选题(20题,40分)、判断题(5题,10分)、多选题(5题,20分)、填空题(10题,30分)
一、单选题(每题2分,共20题,满分40分)
1、下面的程序,会无限循环下去的是( )
A:代码如下
for a in range(10000):
time.sleep(10)
B:代码如下
var = 1
while var == 1:
n = input("请输入一个数")
print(n)
var += 10
C:代码如下
while True:
break
D:代码如下
a = [3,-1,',']
for i in a[:]:
if 3 not in a:
break
参考答案:B
参考解析:A选项,time.sleep(t)是用来暂停程序的,t表示程序暂停的秒数,每次循环一次暂停10s,经过10000次的循环,总共的暂停时间是10000*10s,因此A选项不会无限循环下去
B选项,var的值永远为1,B选项会永远循环下去,var+=10语句不属于循环体部分,因此不会被执行,本道题选择B选项,C选项,beak代表退出循环,D选项,if条件为真,但for循环循环3次后会正常退出。
2、执行完下面代码后,输出的结果为( )
ls = [6, 1, 8, 6, 9, 6]
n = len(ls)
for i in range(n):
for j in range(i+1,n):
if ls[j]>ls[i]:
tmp = ls[i]
ls[i] = ls[j]
ls[j] = tmp
print(ls)
A、[6,6,8,6,9,1]
B、[1,6,6,6,8,9]
C、[9,8,6,6,6,1]
D、程序报错无输出
参考答案:C
参考解析:本道题考查选择排序的原理与代码编写方式,它的工作原理是:第一次从待排序的数据元素选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零,从if语句部分可以看出如果待排序的元素比已排序的序列的末尾元素的值大,就与其交换,显然,这是降序排列,因此本题选择C选项。
3、使用字典统计字符串中每个字符出现的次数,横线上应该填写的代码是( )
dic = {}
for c in 'an apple a day keeps the doctor away':
dic[c] = __________
print(dic)
A、dic[c]+1
B、dic.get(c)+1
C、dic.get(c,1)
D、dic.get(c,0)+1
参考答案:D
参考解析:A选项,如果dic字典中不存在c变量所代表的字符,那么会报KeyError错误,如果存在,返回c变量代表的key所对应的value的值,B选项,dic.get(c)如果找不到c变量所代表的字符会返回None,None不能和整数1相加,会报'NoneType' and 'int'错误,C选项表示如果找不到c变量所代表的字符,就返回值整数1,如果找到了,就返回c变量字符所对应的value值,但是题目是要统计每个字符出现的次数,因此需要从0开始统计,D选项代表如果找不到变量c所代表的字符,get函数就返回0,所以选择D选项。
4、阅读下面的代码,正确的输出是( )
x = ['N','O','C']
for i in x:
x.append(i.lower())
print(x)
A、['n','o','c']
B、['N','O','C','n','o','c']
C、['N','O','C']
D、程序进入死循环,没有输出
参考答案:D
参考解析:代码所代表的含义为:遍历列表x,将列表x中的元素转换为小写,然后追加到列表末尾,每进行一次循环,列表中的元素都多一个,无限循环下去,因此程序陷入了死循环,列表x永远不会遍历完毕。
5、阅读下面程序,假设键盘输入666,正确的输出是( )
number = input()
str(number)
int(number)
print(number+number)
A、666
B、1332
C、666666
D、13321332
参考答案:C
参考解析:input函数读入的数据默认为字符串类型,str和int函数用来进行数据类型强制转换,虽然第3行代码将number转换为整型了,但是number本身的值还是字符串的666,只是int函数的返回结果为整型的666,这个返回的结果并没有重新赋值给number,number变量本身的数据类型还是str字符串类型,因此第4行代码代表将两个字符串666进行拼接,得到的结果为666666,所以本题选择C选项。
6、某位初出茅庐的python初学者写出如下代码,程序执行后输出结果为( )
m = 2
if m//3 != 0:
print(m,'不能被3整除')
else:
print(m,'能被3整除')
A、2 能被3整除
B、m 不能被3整除
C、2 不能被3整除
D、m 能被3整除
参考答案:A
参考解析:python中“//”是一个算术运算符,表示整数除法,它可以返回商的整数部分(向下取整)。m为2,那么m//3的结果为0,因此程序执行else分支语句部分,所以程序输出:2 能被3整除,本题选择A选项。
7、已知字符串s='? an you ?an a ?an as a ?anner ?an?an a ?an'为被破坏的英文绕口令,想要复原绕口令,就需要将字符串中的'?'替换为字母'c',能实现这个功能的代码是( )
A、s = split('?')
B、s = split('?','c')
C、s = s.replace('c','?')
D、s = s.replace('?','c')
参考答案:D
参考解析:Python中的split()函数是字符串类型(str)的一个方法,用于将字符串按照指定的分隔符进行分割,并返回一个包含分割结果的列表,split代表分割,因此A、B选项排除。Python的replace()方法用于将字符串中的某些字符替换为其他字符,replace(a,b),代表将所有出现的a字符,替换为b字符,因此本体选择D选项。
8、python表达式8-3**2%5( )
A、-19
B、0
C、2
D、4
参考答案:D
参考解析:**的优先级高于%,因此先计算3**2,结果为9,然后计算9%5,结果为4,最后计算8-4,结果为4,因此本题选择D选项。
9、阅读以下程序,请问运行结束后会显示的是( )
x, y, z = 10, 20, 40
x, y = z/x, z-y
z = x*y
print(z)
A、80.0
B、40.0
C、20.0
D、10.0
参考答案:A
参考解析:第1行代码执行,x,y,z的值分别为10,20,40,第2行代码执行,x的值为z/x等于40/10=4.0,y的值为z-y等于40-20=20,第3行代码执行,z的值为x*y等于4.0*20=80.0,因此,本道题选择A选项。
10、在Python中,专门用于生成随机数的库是( )
A、random
B、math
C、os
D、sys
参考答案:A
参考解析:random是随机库,random是Python内置的标准库,在程序中导入该库,可利用库中的函数生成随机数据,math是数学库,Python中的math库是一个包含数学函数和常量的内置库,它为各种数学运算提供了支持,这个库不需要安装第三方包即可直接使用,是Python标准库的一部分,os是操作系统库,os模块提供了许多与操作系统交互的函数和方法,sys库是Python的一个内置模块,它提供了对Python解释器的访问和控制,因此本题选择A选项。
11、现有一个名为data的字典,要获得键为'name'所对应的值,正确的代码是( )
A、data(name)
B、data('name')
C、data['name']
D、data.key('name')
参考答案:C
参考解析:A选项,如果要获取键name所对应的值是使用[ ],而不是使用( ),所以A、B选项排除,且因为键name为一个字符串,因此在访问的时候需要加上引号,因此C选项正确,字典没有key方法,D选项错误,所以本题选择C选项。
12、对列表中的元素进行排序,应该使用哪个Python内置函数( )
A、sorted()
B、max()
C、abs()
D、sum()
参考答案:A
参考解析:B选项的max用来求最大值,C选项的abs用来求绝对值,D选项的sum用来求总和,而A选项的sorted可以用来对列表中的元素进行排序,sorted函数执行后返回一个元素有序的新列表,原来列表的顺序不会改变。
13、想要在python中打开文件,在文件末尾添加新的内容,横线上应该填写的是( )
A、'r'
B、'w'
C、'a'
D、'x'
参考答案:C
参考解析:A选项r代表以只读方式打开文件,文件只能读不能写,A错,B选项w代表写入文件,文件中原有的内容会被删除,B错,C选项a代表追加,新的内容会被写入到已有的内容之后,C对,D选项x代表写模式并且如果文件已经存在则会报错,因此本道题选择C选项。
14、在Python中,以下哪个表达式可以将字符串'123'中的每个字符转换为对应的ASCII码值,并以列表形式返回?( )
A、[ord(c) for c in '123']
B、[ascii(c) for c in '123']
C、[chr(c) for c in '123']
D、[str(c) for c in '123']
参考答案:A
参考解析:ord()函数是Python中的一个库函数,用于从给定字符值中获取数字值,它接受一个字符并返回一个整数,即用于将字符转换为整数,即用于获取ASCII给定字符的值 ,A对。
ascii()函数是Python内置的一个函数,它的作用是返回表示对象的ASCII码字符串,例如ascii('abc')就会返回'abc',ascii('1234')就会返回'1234',C选项, Python的chr函数是一个内置函数,用于将整数转换为对应的Unicode字符,C错,D选项,str函数是Python中的一个内置函数,用于将给定的对象转换为字符串类型,D错,本题选择A选项。
15、下列Python代码,在输入5时输出'Five'的是( )
A、代码如下
x = input()
if x==5:
print('Five')
B、代码如下
x = input()
if x=5:
print('Five')
C、代码如下
x = input()
if x=='5':
print('Five')
D、代码如下
x = input()
if x='5':
print('Five')
参考答案:C
参考解析:A选项,input函数默认读取的为字符串类型,因此需要和字符串的5做比较才对,因为'5'不会等于5,B选项,x=5代表将5赋值给x,语法错误,C选项,将输入的字符串和字符串5做比较,写法正确,D选项,x='5'代表将字符串的5赋值给x,语法错误。因此本题选择C
16、执行下面代码,最终输出的结果是( )
m, n = 6, 88
def fn(n):
global m
m += 100
n = 100
return m
print(m,fn(n),n)
A、6 88 88
B、106 106 88
C、6 106 88
D、6 106 100
参考答案:C
参考解析:m赋值为6,n赋值为88,第一行的m与n是全局变量,print函数输出第一个参数的值为m,为6,print函数的第一个参数为调用fn函数,即fn(88),在fn自定义函数中,用关键字声明使用全局变量m,那么m+=100,即m的值变为106,并且返回,而在fn函数的n为fn函数的局部变量,和全局变量的n不是同一个,当函数执行完毕,该局部变量n也不复存在,因此print函数的第二个参数的值为106,而print函数第三个参数的值为全局变量的n,为88,n的值并没有受到自定义函数fn的影响,因此,本题选择C选项。
17、已知字符串s='Data Science',提取单词'Data'的选项是( )
A、s[0:3]
B、s[:4]
C、s[5:]
D、s[1:4]
参考答案:B
参考解析:A选项切出来的字符串为Dat,B选项默认从0开始,切到字符串索引为3的位置,即Data,因此本题选择B选项,C选项切出来的字符串为Science,D选项切出来的字符串为ata。
18、以下不属于冯·诺依曼体系计算机组成部分的是( )
A、逻辑器
B、运算器
C、存储器
D、控制器
参考答案:A
参考解析:冯·诺依曼体系计算机主要由运算器、控制器、存储器、输入设备、输出设备五大部分组成,题目问不属于的部分,所以本题选择A选项逻辑器。
19、已知变量赋值如下,以下选项中,结果为False的是( )
x = 15
y = 12
A、x>0 and y<15
B、x<20 or y>15
C、not(x<20) and y==12
D、not(y!=12) or x <=15
参考答案:C
参考解析:A选项,and代表逻辑与运算,当且仅当and运算左右两边的表达式为真时,整体为真,x>0成立,y<15成立,因此A选项结果为True,B选项,or代表逻辑或运算,只要or运算符左右两边有一个表达式为真时,整体为真,x<20成立,y>15不成立,因为x<20成立,因此B选项结果为True,C选项,x<20成立,not代表逻辑非运算符,可以将结果取反,即真变为假,假变为真,因此not(x<20)不成立,y==12成立,因为使用的是and运算符,False and True结果为False,因此C选项结果为False,D选项,y!=12不成立,not(y!=12)成立,x<=15成立,or运算符只要左右两边的表达式有一者成立即可,D选项的结果为True,因此本道题选择C选项。
20、Python中的列表可以同时保存多个数据,下列数据可以作为列表中的元素保存的是( )
A、字符串
B、整数
C、列表
D、以上都可以
参考答案:D
参考解析:Python的列表可以保存相同类型的数据,也可以保存不同类型的数据,且列表中允许有子列表,因此本题选择D选项。
二、判断题(每题2分,共5题,满分10分)
1、下面的程序输出的结果和原字符串一样( )
s = '上海自来水来自海上'
print(s[:-1:])
A. 正确 B.错误
参考答案:B
参考解析:本题考查切片知识,s[起始位置:终止位置:步长],其中不包括终止位置所指向的元素,-1代表序列的最后一个元素,即'上'字,但是不包括终止位置的元素,因此是从第1个元素取到倒二个元素,即输出结果为"上海自来水来自海",本题答案为:错误
2、表达式 'abc' in 'aaabbbccc' 的结果是True( )
A. 正确 B.错误
参考答案:B
参考解析:in关键字是一个成员运算符,它的作用就是在指定的可迭代序列之中去判断是否存在某一个值,有则返回一个True,没有会返回False。字符串"abc"不是'aaabbbccc'的子串,表达式返回False,因此本题答案为:错误
3、ls.pop()指令默认删除列表中的第一个元素,并返回它的值( )
A. 正确 B.错误
参考答案:B
参考解析:ls.pop()指令默认删除列表中的最后一个元素,并返回它的值,本题答案为:错误
4、下面Python代码执行后将输出[10,15,20]( )
ls = []
for i in range(10,20,5):
ls.append(i)
print(ls)
A. 正确 B.错误
参考答案:B
参考解析:i的取值为10、15,不能取到终止元素,因此列表中的元素为[10,15],本题答案为:错误
5、Python字符串是不可变数据类型,一旦创建不能直接修改( )
A. 正确 B.错误
参考答案:A
参考解析:在Python中不可变的数据类型有3种,分别是整型、字符串和元组,本题答案为:正确
三、多选题(5题,共20分)
1、(多选)阅读下面代码,说法正确的是?
def transform(myls):
tmp_ls = []
for num in myls:
if num > 0 and num % 2 == 0:
tmp_ls.append(num ** 2)
elif num > 0 and num % 2 != 0:
tmp_ls.append(num + 3)
elif num < 0:
tmp_ls.append(num * -1)
return tmp_ls
ls = [-2,2,3,-4,0,5,6]
print(transform(ls))
A、输出的结果中全是正数
B、输出的结果中含有数字0
C、输出的结果全是偶数
D、输出的结果中重复出现了两次的数是8
参考答案:AC
参考解析: transform函数的作用为:根据条件对列表中的每一个元素做不同的处理,如果元素大于0且是偶数,那么计算该元素的平方,然后加入新的列表tmp_ls中,如果元素大于0并且是奇数,那么将元素的值+3,然后加入到新的列表tmp_ls中,如果元素小于0,那么将元素乘上-1,得到正数,然后加入到新的列表中,如果元素为0,将不做任何处理。程序的运行结果为:[2, 4, 6, 4, 8, 36],因此本道题选择AC
2、(多选)列表中存储了中国神话中的五大神龙的名字,请问执行下面程序后,输出的结果含有哪些龙?
ls = ['烛龙','蟠龙','青龙','应龙','苍龙']
for i in range(2):
ls.pop(i)
print(ls)
A、烛龙
B、蟠龙
C、青龙
D、应龙
参考答案:BD
参考解析:该程序的作用为:删除列表中的元素,通过调用列表方法pop,指定索引位置进行删除。i的取值范围为0~2【不包含2】,即0、1,当第一次调用for循环,执行ls.pop(0),此时删除索引为0所对应的列表元素烛龙,ls的值为:ls = ['蟠龙','青龙','应龙','苍龙'],然后继续调用第二次循环,执行ls.pop(1),删除索引为1所对应的列表元素青龙,此时ls的值为:
ls = ['蟠龙','应龙','苍龙']。因此本题选择BD选项。
3、(多选)下面的代码执行后能输出"NOC!"的是( )
A、print('2024-NOC!'[-4:])
B、print('2024-NOC!'[4:])
C、print('2024-NOC!'[-4::])
D、print('2024-NOC!'[4:-1])
参考答案:AC
参考解析:A选项对应的结果为:NOC!,B选项对应的结果为:-NOC!,C选项对应的结果为:NOC!,D选项对应的结果为:-NOC,因此本题选择AC选项。
4、以下哪些变量名是有效的( )
A、my_1
B、1_list
C、$book
D、_noc
参考答案:AD
参考解析:Python变量名的命名规则为:
变量名只能包含字母、数字和下划线。
变量名不能以数字开头。
变量名不应使用Python的关键字
5、(多选)导入海龟画笔库,起名为t,下列代码运行后,界面上显示正方形的是( )
A、代码如下:
for _ in range(4):
t.forward(100)
t.right(90)
B、代码如下:
for i in range(2):
for j in range(4):
t.forward(100)
t.left(90)
C、代码如下:
n = 5
for i in range(n):
t.forward(100)
t.left(360/n)
D、代码如下:
for i in range(1,8,2):
t.forward(-100)
t.left(-90)
参考答案:ABD
参考解析:A选项,默认情况下,画笔朝右,forward代表向右前进100步,然后右转90度,即向下,然后再次循环,向下前进100步,然后右转90度,再次循环,向左前进100步,然后右转90度,再次循环,向上前进100步,然后右转90度,循环结束,效果如图所示:
B选项,for循环嵌套,共循环8次,效果如下所示:
C选项,每次左转72度,循环5次,得到的结果为正五边形
D选项,i的变化范围为1、3、5、7,循环4次,forward(-100)代表往左边前进100步,left(-90)代表右转90度,效果如下图所示:
四、填空题(10题,共30分)
1、阅读下面代码,输出的结果是( )
ls = [x for x in range(9,0,-1)]
x = ls.index(4)
n = ls[-1] * x
print(n)
参考答案:5
参考解析:ls列表中的元素为9、8、7、6、5、4、3、2、1,x的值为列表中索引为4的元素为5,ls[-1]代表列表最后一个元素的值为1,及1*5=5,因此本题答案为5。
2、阅读下面代码,输出的结果是( )
cnt = 0
for i in range(30):
if i % 2:
continue
else:
if i % 3 == 0 and i % 5 == 0:
break
cnt += i
print(cnt)
参考答案:0
参考解析:遍历0~29的所有元素,如果是奇数就强制执行下一轮循环,如果是偶数还需要再次判断是否同时为3、5的倍数,如果是就退出循环,否则程序继续执行,if-else判断完毕之后,执行cnt+=i;对于本程序而言,当i等于0的时候,执行else,且else中的if语句条件成立,直接退出,所以cnt的值cnt+=0,为0,本题的答案为0。
3、运行以下代码,在键盘输入'NOC',则输出的结果是( )
s = input()
s1 = ''
for c in s:
s1 = chr(ord(c)+32) + s1
print(s1)
参考答案:con
参考解析:ord用来将字符串"NOC"中的每个字符转成该字符所对应的Unicode数值,即ASCII码值,然后将此值加上32,得到该大写字符对应的小写字符的ASCII码值,紧接着使用chr函数将小写字母对应的ASCII值转化为小写字母,然后与s1不断拼接,最终得到答案con
4、阅读下面代码,输出的结果是( )
n = len('2023,2024,2025'.split(','))
print(n)
参考答案:3
参考解析:字符串的split函数可以用来按照指定的内容切割字符串,切割出来的元素被封装在一个列表中,即该函数的返回值为列表类型,第1行代码所代表的意思为按照逗号','切割字符串'2023,2024,2025',该字符串会被切割为3部分,这三部分构成一个列表,即列表中的数据元素,然后再使用len统计列表中的数据元素个数,因此答案为3。
5、阅读下面代码,输出的结果是( )
def f(n):
if n <= 1:
return n
return f(n-2)*2 - f(n-1) + n
print(f(5))
参考答案:11
参考解析:本题考查函数递归,递归出口条件为n<=1,过程模拟如下:
f(5) = f(3)*2 - f(4)+5
f(3) = f(1)*2 - f(2)+3
f(2) = f(0)*2 - f(1)+2
f(0) = 0,f(1) = 1
f(2) = 0*2 - 1+2 = 1
f(3) = 1*2 - 1+3 = 4
f(4) = f(2)*2 - f(3)+4 = 1*2 - 4+4 = 2
f(5) = 4*2 - 2+5 = 11,因此,本题的答案为11,要细心一点。
6、以下程序,输出的结果是( )
mydict = {'小明':95,'小红':100}
score = mydict.get('小白',0)
print(score)
参考答案:0
参考解析:字典操作函数get(a,b)代表,如果在字典中找不到a所代表的key关键字,就返回b,如果找到,就返回该关键字a所对应的value值,在mydict字典中没有关键字'小白',因此get函数返回值为0。
7、下面程序,重复执行6次循环,横线上需要填写的1个数是__
for i in range(2024,______):
print(i)
参考答案:2030
参考解析:起始值为2024,想循环执行6次,那就需要执行到2024+6-1=2029,但是因为for循环不包括结束位置的值,因此还需要+1,横线上的答案应为2030。
8、Python面向对象程序中,定义一个类的关键字是:__
参考答案:class
参考解析:python使用class关键字来定义类,死记硬背的东西,记住就行。
9、Python中的列表能够存储许多数据。如下list1列表存储了许多成语,现在想要找出所有第一个字为'天'的成语,并存储到list2列表。
list1 = ['霸王别姬','天长地久','皆大欢喜',
'两小无猜','掌上明珠','偷天换日',
'天上人间']
list2 = []
for s in list1:
if ______ == '天':
list2.append(s)
print(list2)
参考答案:s[0]
参考解析:遍历列表list1的每个元素成语s,每个元素成语都是一个字符串,取出第一个字符串的代码为:s[0],将其与'天'进行比较,如果成立,就将该成语加入到新列表list2中,最终,list2列表中装了2个元素,分别是天长地久和天上人间。
10、以下程序模拟了用户登录功能,当用户输入的用户名和密码分别为noc2024和123456时,输出'登入成功',否则输出'登入失败'。
username = input('请输入用户名:')
password = input('请输入密码:')
if username == 'noc2024' and password == _____:
print('登入成功')
else:
print('登入失败')
参考答案:'123456'
参考解析:input默认情况下输入的数据类型为字符串类型,因此必须与字符串'123456'做比较才能匹配成功,'123456'和整数类型的123456是没办法匹配成功的,因此答案为'123456'
更多推荐
所有评论(0)