内容正文:
2.4 可以复用的代码
一、选择题
1.在Python程序中,执行print ("23"+"45") 语句的结果是( )
A.68 B.False C.2345 D."23+45"
2.有如下Python程序段,下列选项中不可能为输出结果的是( )
list1=[3,4,6,2,8,5]
for i in range(1,6):
x=int(input("请输入一个整数:"))
if x>list1[i]:
continue
print(x)
A.2 2 2 2 B.2 3 4 5 C.2 4 5 3 7 D.4 6 8
3.Python表达式len("Hello!")的值为( )
A.5 B.6 C.7 D.8
4.在 Python 语言中,a=True,则a的数据类型是( )
A.字符串 B.浮点型 C.整型 D.布尔型
5.十进制数n转换为二进制数s的伪代码如下所示:
s←""
输入正整数n
while n≠0
输出s
方框中伪代码由以下三部分组成:
①s←r+s ②n←n整除2的结果 ③r←n除2的余数
下列选项中,代码顺序正确的是( )
A.③①② B.①③② C.①②③ D.②①③
6.运行下列Python程序后,输入41,输出结果为( )
f=float(input("请输入一个华氏温度:"))
c=5*(f-32)/9
print(c)
A.5 B.5.0 C.10 D.10.0
7.在Python中,运行下列代码后,输出的个数是( )
>>>i=12
>>>while i>=3:
print("*")
i=i-3
A.5 B.4 C.3 D.12
8.下列Python表达式中,值为True的是( )
A.2**4-64**0.5 B.len("Python")>6
C."Chat"in"chatGPT" D.ord("A")==65
9.有如下Python程序段:
matrix=[[1,1,1,1],[2,2,2,2],[3,3,3,3],[4,4,4,4]]
k=int(input())
tot=0
for i in range(4):
for j in range(4):
if i+j=k:
tot+=matrix[i][j]
print(tot)
若输入2,则输出为( )
A.12 B.10 C.8 D.6
10.在 Python 语言中,运行以下程序段后,输出的结果是( )
L= [ 'a', 'b','c','d']
del (L [1])
print (L)
A.['b','c','d'] B.['a','b','c'] C.['a', 'b','d'] D.['a','c','d']
11.下列运算结果值最大的是( )
A.len(“123”) B.2**3 C.int(7.8) D.3%7
12.在Python中,将一个字符串转换为一个整数的函数是( )
A.int() B.float() C.str() D.range()
13.有如下Python程序段:
text="Nol:X:123:Y:680:End"
a=[0]*10; c=0
for i in range(len(text)):
s=text[i]
if s>='0' and s<='9':
a[c]=a[c]*10+int(s)
else:
if a[c]>0:
c=c+1
print(a[1])
执行该程序段后,输出的结果是( )
A.1 B.2 C.680 D.123
14.若字符串s的值为"3a2bcl",执行如下Python程序段后,输出变量str的值为( )
m,str,tmp=0,"",""
flag = False
for ch in s:
if '0' <= ch <= '9':
if flag=True:
str =str + tmp * m
m,tmp=0,""
flag = False
m=m * 10+ int(ch)
else:
tmp=tmp + ch
flag = True
str =str + tmp* m
print(str)
A.aaa B.aabc C.aaabcbc D.aaabcbcl
15.在Python中,导入matplotlib模块的正确语句是( )
A.class matplotlib B.raise matplotlib
C.import matplotlib D.break matplotlib
16.定义如下函数:
def f(x):
if x==1:
return1
else:
return x*f(x-1)
执行语句k=f(6)后,k的值为( )
A.6 B.24 C.120 D.720
17.下列程序代码执行后不可能的结果是( )
import random
a=[2,3,4,5,6,7] ; b=[0]*6
random.shuffle(a)
i=0
while i<6:
if a[i]%3 == 0:
b[i]=a[i]*2
elif i%2 == 0:
b[i]=a[i]*2+1
i+=1
print(b)
A.[12,0,9,6,11,0] B.[11,6,5,0,15,12] C.[15,6,5,0,9,12] D.[7,0,11,6,0,12]
二、填空题
18.运行以下Python程序,结果是 。
sum=0
for num in range(8):
sum=sum+num
print(sum)
19.在Python中,使用 可以结束当前循环的执行,即使循环条件未满足。
20.Python语句list(range(1,10,3))执行结果为 。
21.用户自定义函数是用户自己写的一段程序。一般包括 、 、 和 等四部分。其中 和 是必不可少的, 和 可根据需要进行定义。
22.Python中读写文本文件的方法,其中打开用 把外存储器里的文本文件(.txt)打开;存储用 将内存中的数据存储到外存储器的文件中;关闭文件时一定要用 关闭文件。
三、判断题
23.在Python中,变量不直接存储值,而是存储值的引用,也就是值在内存中的地址。( )
24.“num”和“NUM”会被Python解释器视为相同的变量。( )
25.用户自定义函数是用户自己写的一段程序.一般包括函数名、参数、 返回值、函数体等四部分.其中,函数名和参数是必不可少的部分.( )
26.Python语言的变量名要区分英文字母的大小写。( )
27.在Python3.x语言中,input()函数的返回值类型是字符串。( )
四、操作题
28.某数据序列data中的元素均为小于127的正整数。现在要对data进行加密,处理过程分“变换”和“重排”两步。“变换”处理方法是用指定的n组序列 、…依次对data进行变换。利用Ri对data进行变换的过程是:在data中查找所有与Ri相同的子序列,将找到的每个子序列中的元素值加上Ri的长度值Li,并在各子序列前插入一个标记元素(值为127+Li),这些子序列及标记元素不再参与后续的变换。
如data为[3,5,1,6,3,8,7,5,1,8,7],指定的两组序列为[5,1]、[3,8,7],“变换”处理后的data为[3,129,7,3,6,130,6,11,10,129,7,3,8,7]。对data“重排”处理通过给定的shuff函数实现。
请回答下列问题:
(1)若data为[3,5,1,6,3,8,7,5,1,8,7],指定的两组序列为[5,1]、[8,7],经过“变换”处理后,data中插入的标记元素个数为 。
(2)“重排”处理的shuff函数如下:
def shuff(data, c): # 根据列表c对列表data进行重排
# 若列表data的长度不是列表c长度的整数倍,则用0补足,代码略
m = len(c)
s = [0] * m
k = 0
while k < len(data):
for i in range(m):
s[i] = data[k + i]
for i in range(m):
data[k + i] = s[c[i]]
k += m
若data为[3,129,7,3,130,6,11,10],c为[1,3,0,2],调用shuff(data, c)后,data的最后一个元素值为 。
(3)实现加密功能的部分Python程序如下,请在划线处填入合适的代码。
def compare(data, i, r):
# 函数功能:返回data从索引i位置、r从索引0位置开始的连续相等元素的个数
# 例如r为[7, 3, 6],data从索引i位置开始的元素依次为7, 6, 7, 3, …,函数返回1
j = 0
while j < len(r) and i + j < len(data):
if① :
break
else:
j += 1
return j
def trans(data, r, segs):
newsegs = []
for s in segs:
if s[0] == 0:
h = i = s[1]
m = len(r)
while i + m <= s[2] + 1:
if compare(data, i, r) == m:
if i > h:
newsegs.append([0, h, i-l]) # 为newsegs追加一个元素
newsegs.append([m, i, i + m-1])
i += m
②
else:
i += 1
if h <= s[2]:
newsegs.append([0, h, s[2]])
else:
newsegs.append(s)
return newsegs
def update(data, segs):
for s in segs:
if s[0] != 0:
data.append(0)
p = len(data)-1
for i in range(len(segs)-1, -1,-1):
for j in range(segs[i][2], segs[i][1]-1,-1):
③
p-= 1
if segs[i][0] > 0:
data[p] = 127 + segs[i][0]
p-= 1
# 读取待加密数据存入data,读取指定的若干组用于变换的序列存入rs,代码略
'''
列表segs用于记录data的变换信息,segs[i]包含三个元素,segs[i][0]、segs[i][1]、segs[i][2]分别表示data中一个子序列的状态、起始位置和结束位置,如果segs[i][0]为0,则表示该子序列未经过变换。
'''
segs = [[0,0,len(data)-1]]
for r in rs:
segs = trans(data,r,segs) # 根据r更新segs
update(data, segs) # 利用segs完成对data的变换操作
c = [1,3,0,2]
shuff(data, c)
# 输出加密后的data序列,代码略
试卷第1页,共3页
试卷第1页,共3页
学科网(北京)股份有限公司
参考答案:
1.C
【详解】本题考查Python输出语句。字符串相加运算,即将两者拼接起来,因此"23"+"45"="2345",输出语句中字符串会原样显示,即输出结果是2345。故选C。
2.C
【详解】本题考查Python基础。
列表list1=[3,4,6,2,8,5],若输出的结果有5个元素,说明输入的5个整数均不大于对应列表元素的值,C选项中的3大于列表中对应元素list1[3](值为2),因此3不会输出,故正确答案为:选项C。
3.B
【详解】本题考查Python程序设计相关内容。len()是一个内置函数,用于返回一个对象的长度,即对象中元素的个数。字符串"Hello!"长度为6,故本题答案是B选项。
4.D
【详解】本题考查Python数据类型。在Python中,布尔型常量的值是True和False。故选D。
5.A
【详解】本题考查算法描述。十进制转换为二进制的方法是“除权取余、逆序排列”,因此第一步是r←n除2的余数。第二步是s←r+s。第三步是n←n整除2的结果。故选A。
6.B
【详解】本题考查Python程序执行。float ()函数是Python内置的一个函数,用于将其他数据类型转换为浮点数类型。输入41,则c=5*(f-32)/9=5*9.0/9=5.0。故选B。
7.B
【详解】本题考查程序分析。i的值分别为12、9、6、3时,进入循环输出4个。故选择B。
8.D
【详解】本题考查Python表达式。本题考查了Python表达式的计算及字符串操作。2**4表示2的4次方,即16;64**0.5表示64的平方根,即8;16-8等于8,不是True,A选项错误。len("Python")计算字符串"Python"的长度,为6;6>6为False,B选项错误。"Chat"和"chatGPT"大小写不同,"Chat"不在"chatGPT"中,结果为False,C选项错误。ord("A")返回字符"A"的ASCII码,为65;65==65为True,D选项正确。故答案为:D。
9.D
【详解】本题考查Python程序。程序的功能是计算二维列表matrix中满足条件i+j=k的元素之和,其中k是用户输入的整数。解析如下:给定二维列表matrix,每个子列表都包含相同的四个整数。用户输入一个整数k。初始化变量tot为0,用于累加满足条件的元素之和。使用嵌套循环遍历matrix的每个元素:外层循环i控制行索引。内层循环j控制列索引。判断条件i+j==k,如果成立,则将matrix[i][j]的值加到tot中。最后输出变量tot的值,即满足条件i+j=k的元素之和。若输入2,根据题目的计算,满足条件的元素有(0,2),(1,1),(2,0),它们分别对应的值是1,2,3,因此最终的输出是1+2+3=6。故答案为:D。
10.D
【详解】本题考查的是Python列表操作。列表索引号从0开始,del (L [1])表示删除索引号为0的元素。L= [ 'a', 'b','c','d'],del (L [1])将列表中'b'元素删除。最后L= [ 'a', 'c','d'],故选D。
11.B
【详解】本题考查的是Python表达式。len()返回字符串的长度,**表示幂乘,int()返回整数,%表示求余。len("123")=3,2**3=8,int(7.8)=7,3%7=3,故选B。
12.A
【详解】本题考查Python函数。在Python中,可以使用int()函数将一个字符串转换为一个整数。故答案为:A。
13.C
【详解】本题考查Python程序。程序的执行过程如下:首先,定义了字符串text="Nol:X:123:Y:680:End"和数组a=[0]*10,以及变量c=0。然后,程序遍历字符串text中的每个字符。对于每个字符s,检查它是否是数字(即在'0'到'9'之间):如果是数字,则将其转换为整数并添加到数组a的当前位置a[c]中。如果不是数字,检查当前位置a[c]是否大于0,如果是,则将索引c自增1。最后,输出数组a中索引为1的元素,即a[1]。根据给定的字符串text="Nol:X:123:Y:680:End",程序执行时提取了其中的数字部分,即123和680,分别存储在a[0]和a[1]中。因此,输出结果应为a[1]的值,即680。故答案为:C。
14.C
【详解】本题考查Python程序调试与执行。分析程序可知,该程序实现对字符串的解密操作,将连续的字符重复输出n次,n为该连续字符前面的数字,若字符串s的值为"3a2bcl",则将a输出3次,bc输出2次,即输出变量str的值为aaabcbc。故选C。
15.C
【详解】本题考查Python模块。import是用于导入模块的关键字,正确的语法是import matplotlib。故答案为:C。
16.D
【详解】本题考查Python函数。当x=6时,f(6)=6f(5);f(5)=5f(4);f(4)=4f(3);f(3)=3f(2);f(2)=2f(1),而f(1)=1,所以f(2)=2,f(3)=3*2=6,f(4)=4*6=24,f(5)=5*24=120,f(6)=6*120=720,即k=720,故答案为:D。
17.D
【详解】本题考查Python程序。由分支结构可知,当a[i]%3==0时,也就是a[i]=3或者6时,有b[i]=a[i]*2。而当i%2==0时,一定有b[i]=a[i]*2+1,此时也就是说当i为偶数时,b[i]为奇数。在D选项中,a[4]=0,显然不符合题意,故答案为:D。
18.28
【详解】本题考查Python程序设计相关内容。分析程序段,其功能是计算[0,7]范围内的整数之和,结果为28,故本题答案是:28。
19.break
【详解】本题考查Python。在Python中,当使用break关键字时,无论循环条件是否满足,都会立即终止当前所在的循环结构,使程序跳出该循环,继续执行循环后面的代码。故答案为:break。
20.[1,4,7]
【详解】本题考查Python。range函数的语法是range(start,stop,step),它生成一个从start开始、到stop(不包括stop)结束、步长为step的整数序列。对于list(range(1,10,3)),参数为1(起始值)、10(终止值,不包括)、3(步长),生成的序列为1,4,7。因此,执行该语句的结果是[1,4,7]。故答案为:[1,4,7]。
21. 函数名 参数 返回值 函数体 函数名 函数体 参数 返回值
【详解】本题考查的是自定义函数。自定义函数包括函数名、参数、返回值、函数体和函数名,其中函数名和函数体是必不可少的,参数和返回值可根据需要进行定义。
22. open函数 write方法 close方法
【详解】本题考查Python相关知识。Python中读写文本文件的方法,其中打开用open函数把外存储器里的文本文件(.txt)打开;存储用write方法将内存中的数据存储到外存储器的文件中;关闭文件时一定要用close方法关闭文件。
23.正确
【详解】本题考查Python基础。
Python中的变量确实不直接存储值本身,而是存储了对值的引用(或者说是内存地址,尽管这个地址对Python程序员通常是不可见的)。这种机制使得Python中的变量更加灵活和强大,同时也带来了一些特定的行为模式。故正确。
24.错误
【详解】本题考查变量。Python中的变量严格区分大小写。num和NUM不是相同变量,故错误。
25.错
【详解】本题考查自定义函数。用户自定义函数是用户自己写的一段程序.一般包括函数名、参数、返回值、函数体等四部分.其中,其中参数和返回值可根据需要进行定义。题干说法错误。
26.正确
【详解】本题考查Python。Python语言的变量名是区分英文字母大小写的,这意味着在Python中,变量名var和Var被视为两个不同的变量。故说法正确。
27.正确
【详解】本题考查Python函数。input()函数用于从标准输入读取一行,并将其作为字符串返回。无论用户输入什么内容,input()函数返回的值始终是字符串类型。故说法正确。
28. 4 11 r[j]!=data[i+j] h=i data[p]=data[j]+segs[i][0]
【详解】本题考查Python程序设计相关内容。本题涉及到索引数组和双指针知识。结合题目内容,分析程序段,推知:
(1)考查基本的数据模拟能力,变换数组r = [[5, 1], [8, 7]],在序列data中,分别以索引号1、5、7、9为起始的包含两个元素的子序列与r序列中的子序列相等,则有4个子串进行变换。题目要求在各子序列前插入一个标记元素,则共插入4个标记元素,故本题答案为:4。
(2)考查索引数组。由题目描述知,索引数组的长度可能小于原数组,当原数组索引超过索引数组的索引范围时,需要对原数组进行分组,应以索引数组的长度m作为每一组的元素个数,若不足,则用0补齐。data长度为c的整数倍,则调用shuff函数后,data的最后一个元素是分组后最后一组重排结果的最后一项, c[3] = 2,最后一组的元素值为[130, 6, 11, 10],所以索引2处的值为11。故本题答案为:11。
(3)考察用变换实现加密功能。compare函数返回data从索引i位置、r从索引0位置开始的连续相等元素的个数,trans函数处理序列变换,update函数用于完成子串的变换和标记元素的插入。③处,compare函数中,j是r的索引,i是data的索引,该函数用于检查data中是否存在从索引i开始的连续j项均与r相同,返回相同项的数量。若data[i + j] != r[j]成立,表明查询结束,应结束循环,故③处答案为:r[j]!=data[i+j]。④处,trans函数的3个参数:data表示原始数据,r是当前变换数组,segs记录了当前data的变换信息。对于其中一条变换信息s,s[0] == 0表明该信息所描述的子串没有经过标记,可以进行变换。若compare(data, i, r) == m成立,表明找到了需要进行变换的子串data[i: i + m],此时,若i > h成立,则需要新增data[h: i]的未标记子序列和data[i: i + m]的标记子序列(标记值恰为m),与此同时,该子序列中data[h: i + m]均为已处理状态,在i += m后更新h = i的作用是更新该子序列的头部标记,故④处答案为:h=i。⑤处,update函数根据变换信息处理data数据中的具体更新,函数中需要实现元素插入的功能,因此需要逆序遍历data,trans函数采用队列保证变换信息的有序性,逆序遍历变换信息的同时可以逆序遍历data,以免因数据的插入而影响原始数据。索引p用于逆向遍历插入后data,索引j从变换信息的“结束索引”逆向遍历到“开始索引”,由于变换信息中存储的是data的原始数据信息,因此data[p] = data[j] + segs[i][0]即为对data[j]的变换值的更新并移动到最终的位置上,故⑤处答案为:data[p]=data[j]+segs[i][0]。
答案第1页,共2页
答案第1页,共2页
学科网(北京)股份有限公司
$$