内容正文:
第三章 字符串、队列和栈
单元测试
姓名: 班级: 分数:
(满分:100分 时间:90分钟)
题型
选择题
填空题
总计
题数
20
14
34题
分数
60
40
100分
得分
一、单项选择题(每题3分,共60分)
1.已知字符串a"人生苦短,我用Python”,则下列说法正确的是( )
A.a[5]的值为",",a[:5]的值为"人生苦短"
B.a[5]的值为"我”,a[:5]的值为"人生苦短"
C.a[-5]的值为"y",a[-5:]的值为" thon "
D.a[-5]的值为"用",a[-5:]的值为"ython "
【答案】C
[解析]a[5]表示字符串中的第6个字符,本题中a[5]为“我”。a[:5]表示取从第一个字符开始到下标为4的字符串,值为“人生苦短,”。AB选项错误。α[—5]表示从右往左数第5个字符,值为“y”。a[—5 :]表示从右往左数第5个字符开始到结束的字符串,值为“gthon”。
2.下列Python字符串不合法的是:( )
A.”I love ‘China’” B.’I “love” China’
C.’I love \’China\’’ D.’I love ‘China”
【答案】D
[解析]字符串一般采用单引号、双引号或三引号加以界定。当使用单引号时,双引号可以作为字符串中的一部分,反之亦然;也可以使用反斜杠转义符输出单引号或双引号。
3.有如下Python程序段:
a=”Beautiful is better than ugly.”.split()
b=””.join(a)
则下列说法正确的是:( )
A.a[4]的值为“ugly”,b[4]的值为“t”
B.a[4]的值为“ugly.”,b[4]的值为“t”
C.a[-4]的值为“is”,b[-4]的值为“u”
D.a[-4]的值为“Beautiful”,b[-4]的值为“g”
【答案】B
[解析]]a[4]的值为“ugly.”;b[4]的值为“t”;a[-4]的值为“is”;b[-4]的值为“g”。
4.有如下Python程序段:
text=”床前明月光,疑是地上霜。举头望明月,低头思故乡。”
text=text.replace(“。”,“,”)
ans=[s[0] for s in text.split(“,”) if s]
ans=“”.join(ans)
则程序执行后,ans的值为( )
A.“床前明月光” B.“床前明月” C.“床疑举低” D.”举头望明”
【答案】C
[解析]程序的功能是获取藏头诗。具体做法是先用“,”替换“。”,这样所有的分隔符均变成“,”,再用“,”将text分割成列表(注意最后一个列表元素为空串),并去列表元素的首字符,凭借成藏头诗。
5.有如下python程序段:
text=“It is too old to learn.”
ans=text[:6]+“never”+text[6:]
print(ans)
则程序执行后,输出的结果为( )
A.It is too old to learn B.It is never too old to learn
C.It is nevertoo old to learn D.It isnever too old to learn
【答案】C
[解析]text[:6]=“It is”,text[6:]=“too old to learn.”,因为“never”两边都没有空格,故输出It is nevertoo old to learn.。
6.已知队列元素的个数为6,则队首指针 head 和队尾指针 tail 的值不可能的是( )
A.head=0, tail=6 B. head=6,tail=0 C. head=3,tail=2 D. head=3,tail=8
【答案】B
[解析]本题考查的是队列的相关知识。初始时,队列为空,队首指针head和队尾指针tail的值均为0,队列不为空时,队首指针指向队首元素,队尾指针指向队尾元素的下一个位置。选项A中入队6次,出队0次,那么head和tail的值为0,6该项正确;同理分析选项B,选项B,不可能入队0次,出队6次,该项错误。
7.已知队列(4,21,55,66,48,24,35,12,78,5)第一个进入队列的元素是4,请问第3个出队列的元素是( )
A.35 B.12 C.55 D.5
【答案】C
[解析]队列进出的原则是先进先出,第3个出队列的实在第3个进队列,第一个为4,第3个为55,第3个出队列的就是55。
8.小王在使用队列解决问题的过程中,初始时,队列为空,队列的首指针和尾指针分为为head、tail,接着小王开始进行了一系列的操作,操作序列为:入队、入队、入队、出队、入队、入队、出队、出队、出队、入队、入队,则操作结束时head和tail的值分别为( )
A.4 7 B.4 8 C.5 7 D.5 8
【答案】A
[解析]初始时,队列为空,队首指针head和队尾指针tail的值均为0,队列不为空时,队首指针指向队首元素,队尾指针指向队尾元素的下一个位置,本题中共进行了7次入队操作和4次出队操作,因此最终 head 和 tail 的值分别为4、7,因此答案为 A。
9.有1个队列,队首到队尾的元素依次为8,3,2,9,5。约定:T操作是指队列中1个元素出队后再入队,Q操作是指队列中l个元素出队。则经过TTTQTTQ系列操作后,队列中队首到队尾的元素依次为( )
A.2,9,5 B.2,5,8 C.5,8,2 D.8,3,2
【答案】B
[解析]阅读题干信息可知,T的操作是出队并入队,Q的操作为出队,TTTQTTQ之后队列内元素依次是2,5,8,出队的元素依次是9,3。故选:B。
10.创建一个容量为3的队列,元素2,3,5,1,3,5,2依次等待入队。入队规则为:
①若当前待入队元素已经在队列中,则跳过该元素,否则转②
②若当前队列已满,将队首元素出队列,否则转③
③将当前待入队元素入队列
操作完成后,队列中的元素为( )
A.2,3,5,1 B.1,2,3,5 C.2,3,5 D.5,1,2
【答案】D
[解析]由于容量为3的队列,所以最初栈里的元素为2,3,5,当1进入栈时,若当前队列已满,将
队首元素出队列,变为3,5,1,当入栈为3和5时,由于栈中有该元素,跳过。当入栈为2时,当前队列已满,将队首元素出队列,变为5,1,2.故选:D。
11.有如下python程序段:
s=“Python3.8”
ans=“”
for ch in s:
if ch.isupper():
ans+=ch.lower()
elif ch.islower():
ans+=ch.upper()
else:
ans+=ch
print(ans)
则程序执行后,输出的结果为( )
A.Python B.Python3.8 C.pYTHON D.pYTHON3.8
【答案】D
[解析]程序的功能是将大小写字母互相转换,其他字符保持不变。
12.有如下程序段:
s=””
ch=”GaozhouKG2021”
n=len(ch)
for i in range(1,n,2):
c=ch[i]
if “A”<=c<=“Z”:
c=chr((ord(c)-ord(“A”)+2)%26+65)
elif “a”<=c<=“z”:
c=chr((ord(c)-ord(“a”)+2)%26+97)
else:
c=chr(ord(c)+1)
s=c+s
print(s)
该程序运行后,最后显示的内容为( )
A.IqjwI12 B.21IwjqI C.cbqM33 D.33Mqbc
【答案】D
[解析]该程序的功能是将字符串的第1,3,5,…个字符在各自的范畴内向后移动2个位置(即如果是大写字母、小写字母、数字,各自向后移动2个位置。注:每个范畴都看成一个圈)。最后将它们进行逆向连接。
13.有如下python程序段:
a=“110000010111010”
if len(a)%4!=0:
a=(4-len(a)%4)*“0”+a)
s=“0123456789ABCDEF”
ans=[]
for i in range(0,len(a),4):
num=int(a[i:i+4],2)
ans.append(s[num])
print(‘’.join(ans))
已知int()函数用于将一个字符串或数字转换为整型,例如
int(“101”,2)用于将二进制数101转换为十进制数,结果为5,则程序执行后,输出的结果为( )
A.60BA B.C174 C.182E8 D.305D
【答案】A
[解析]程序功能是将二进制数转换成十六进制数。按照从低位到高位的(从右往左)的顺序,每4位二进制数转换成1位十六进制数,不足4位则在高位补0。“110000010111010”补0的结果为“0110000010111010”,转换成十六进制数为60BA。
14.回文串是一个对称串,从左向右读与从右向左读是一样的。例如:“aba”从左向右读是“aba”,从右向左读也是“aba”。下面的Python程序的功能就是将一个字符串转换成回文串。如输入“abc”,输出“abccba”。程序如下:
s=input(“输入一个串”)
s1=s
i=0
while i<len(s):
______(1)______
_______(2)______
i+=1
print(“回文串:”,s1)
在横线(1)与(2)处可选的语句如下:
①ch=s[len(s)-i]
② ch=s[len(s)-1-i]
③s1=ch+s1
④s1=s1+ch
则完成此程序正确的语句为( )
A.①③ B.②④ C.①④ D.②③
【答案】B
[解析]产生回文串,先将原串复制到一个新的变量中,然后在新变量的后面依次连接上原串的最后1个字符,倒数第2个字符,……,一直到原串的第1个字符连接上为止。
15.有1个栈,从栈顶到栈底依次为元素a、b、c并且已知元素d已入栈并出栈,则这四个元素的入栈顺序可能为( )
A.a,b,c,d B.b,d,c,a C.c,d,b,a D.d,a,b,c
【答案】C
[解析]因为d已经入栈并且出栈,因此其入栈的顺序对于我们是未知的,而a、6、c三个元素的相对顺序是确定的,所以他们之间的入栈顺序也是确定的,依次为c、b、a,而d可任意穿插在其中。故选:C。
16.若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p_1,P_2,P_.…p_n,若p_n是n,则p_i是()
A.i B. n-i C.n-i+1 D.不确定
【答案】C
[解析]根据题目描述,栈的入栈序列是1,2,3,…,n,输出序列是p_1,p_2,p_3,…,p_n。如果p_n是n,则说明在栈中,元素n是最后一个出栈的元素。
A.i:这个选项是错误的。选项A表示p_i的值应为i,即第i个元素出栈。但题目中指出p_n是n,即最后一个元素n出栈,所以p_i不可能是i。
B.n-i:这个选项是错误的。选项B表示pi的值应为n-i,即第n-i个元素出栈。但题目中指出
p_n是n,即最后一个元素n出栈,所以p_i不可能是n-i。
C.n-i+1:这个选项是正确的。选项C表示p_i的值应为n-i+1,即第n-i+1个元素出栈。根据题
目中元素n是最后一个出栈的元素,元素n-1是倒数第二个出栈的元素,以此类推,可得出p_的值为n-i+1。
D.不确定: 这个选项是错误的。题目已经给出了p_n是n的条件,根据这个条件可以确定出
p_i的值为n-i+1。
17.某小型列车站有一个单轨车厢调度轨道,最多可容纳3节车厢。初始时调度轨上停有2节车厢:最里面是1号车厢,出口处是2号车厢。之后有三节车厢进入调度轨的顺序是3,4,5,那么所有车厢出调度轨的顺序可能是( )
A.4,3,2,1,5
B.2,5,4,3,1
C.2,1,5,3,4
D.2,1,5,4,3
【答案】D
[解析]根据栈的原则,先进后出的原则可知,进栈顺序为2.1.3.4.5,所以所有车厢出调度轨的顺序可能是2,1,5,4,3,所以选项D符合题意。故选:D。
18.有如下python 程序段,执行该程序段后,输出结果不可能的是()
Import random as rd
st=[1]*10;top=0
for i in range(5):
num=rd.randint(1,6)
if num>=st[top]:
top+=1;st[top]=num
elifnum%2==0:
top-=1
while top>=0:
print(st[top],end="");top-=1
A.6 3 3 1 1 1 B.1 C.4 2 2 D.6 6 6 1
【答案】C
[解析]num=rd.randint(1,6),num数字是1~6整数。只有生成的数字小于栈顶元素而且为偶数时才出栈,st中初始值都为1,故栈低元素肯定为1(因为生成的num一直不比1小)。故输出的结果最后一位肯定为1,选项C最后一位为2,不符合。故选:C。
19.有如下Python 程序段:
import random
s=[3,2,7,6,9];st=[0]*len(s);top=-1;i=0
while i <len(s):
op = random. randint(0,1 )
if lop == -1 or op == 0 and s[i]>st[top]:
top +=1 ; st[top]=s[i]
elif top>=l and op==1 and s[i]>st[top-1]:
st[top] =s[i]
i +=1
while top!=-1:
print( st[top],end =" " )
top -=1
执行该程序段后,输出的结果不可能是()
A.3 B.9 6 2 C.963 D.973
【答案】B
[解析]考查栈以及栈的代码实现知识。变量top的初值为-1,由代码可知变量p的值只可能是0或1。因此根据逻辑可知,在第一个while循环中,i=0,无论op的值是多少,程序肯定进入第一个分支,因此第一个进栈的元素必定是数组s中的第一个元素3,且栈st至少有3这一个元素。而栈具备“先进后出”的特点,3肯定是最后一个出栈的元素。观察各选项可以发现只有选项B中没有元素3,因此该选项不符合逻辑,故本题选 B。
20.由元素1,2,3,4,5,6,7,8依次入栈、出栈,要求每次出栈之前至少有两次连续入栈操作,出栈时可以出栈一个元素,也可以出栈多个元素直至栈空,则数据的出栈序列可能是()
A.3,4,2,5,7,6,1,8
C.5,7,6,4,8,3,2,1
B.2,4,3,1,8,7,6,5
D.4,3,5,2,1,6,8,7
【答案】B
[解析]A选项1,2,3入栈,3出栈,4人栈,4出栈,由题目描述可知每次出栈前至少有两次连续入栈,4出栈时只有一次入栈,故选项A错误;B选项1,2入栈,2出栈,3,4入栈,4,3,1出栈,5,6,7,8入栈,8,7,6,5出栈,符合要求,故选项B正确;C选项1,2,3,4,5人栈,5出栈,6,7入栈,7,6,4出栈,8入栈,8,3,2,1出栈,8出栈时只有一次入栈,故选项C错误;D选项1,2,3,4入栈,4,3出栈,5入栈,5,2,1
出栈,5出栈时只有一次入栈,故选项D错误。
二、填空题(每空2分,共计40分)
1.栈和队列都是一种特殊的操作受限的线性表,只允许在端点处进行插入和删除。二者的区别是:栈只允许在表的一端进行插入或删除操作,是一种" "的线性表;而队列只允许在表的一端进行插入操作,在另一端进行删除操作,是一种" "的线性表。
【答案】后进先出、先进先出
[解析]栈和队列的共同特点是只允许在端点处插入和删除元素。
2.栈顶元素总是最后被插入的元素,也是最先被 的元素。
[答案]删除
[解析]栈顶元素总是最后被插入的元素,也是最先被删除的元素。栈就像一队士兵,进入时,必须从右边进左边出,就像士兵们持枪时,枪口总是指向右边一样。
3.在一个单向链表中,head 指针指向链表的头节点p,已知节点的指针区域为next,若要删除该链表中的头节点,则应执行的操作是 。
【答案】p=p.next;head=p
[解析]本题主要考查的是在单向链表中删除节点。要删除链表中的头节点,应先将p指向p节点的下一个节点,然后将 head 指针指向p节点,因此答案为p=p.next;head=p。
4.有一个空栈,规定用I表示一个元素入栈,用O表示一个元素出栈。现经过IIOIOOIO系列操作后,元素的出栈顺序是4,1,3,2,则元素的入栈顺序是 。
输出s
【答案】3,4,1,2
[解析]根据操作顺序“HIOIOOIO”,两次入栈后再出栈,因此第一个出栈的是第二个入栈的元素,所以元素4是第二个人栈的,接下来再次入栈一个元素,然后出栈,因此第三个入栈的是第二个出栈的元素,即元素1,此时栈内只有一个元素(即第一个人栈的元素),再次执行出栈,也就是第三个出栈的元素3,故第一个人栈的元素为3,最后元素2入栈出栈。
5.有如下程序段:
S=“2022 Hope To Get Out Of The Epidemic”
t=“”
for i in s:
if i<“a” or i>“z”:
t=””
t=i+t
print(t)
该程序运行后,最后显示的内容是 。
【答案】cimedipE
[解析]该程序中语句“if i<“a” or i>“z”:;t=“””的功能是字符i为非小写字母时,变量t就清空。因此在“Epidemic”出现前,变量t中的内容为空。这样变量t中最后的内容为“Epidemic”的重新组合。语句t=i+t的功能就是将“Epidemic”进行逆向组合。
6.有如下python 程序段:
def fun(a,b):
n=min(len(a),len(b))
for i in range(n):
if a[i]>b[i]:
return a
elif a[i]<b[i]:
return b
if len(a)>len(b):
return a
else:
return b
print(fun(“126”,”26”))
则程序执行后,输出的结果为 。
【答案】26
[解析]自定义函数fun()的功能是比较字符串a 和b的大小,并返回较大的字符串,因为“126”<“26”,故返回“26”。
7.有如下Python程序段:
for ch in “I have a dream”:
if ch not in”aoeiu”:
continue
print(ch,end=””)
则程序执行后,输出的结果是 。
【答案】aeaea
[解析]continue语句的作用是终止本次循环,并忽略continue之后的所有语句,直接回到循环的顶端,提前进入下一次循环,故程序只输出包含在“aoeiu”中的字母。
8.有如下python 程序段,使用长度为3的列表q模拟队列的出队、入队活动:
q=[1,2,3]
ys=[]
for i in range(4,10):
ys.append(q[0])
q[0]=q[1]
q[1]=q[2]
q[2]=i
print(ys,q)
程序运行结束后,列表ys中元素的数量为_____________。
【答案】6
[解析]题目中列表q模拟队列的“先进先出,后进后出”的出队和入队过程,列表ys获得出队的序列,循环中实现了6个元素的出队和入队。
9.有1个栈初始为空,其元素入栈顺序依次为8,t,r,w,u,y,m若经过进栈和出栈操作后,栈底至栈顶元素分别为t,w,y,则第3个出栈元素为 。
【答案】u
[解析]本题考查的是栈的相关问题。栈(stack:)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。入栈顺序依次为8,t,r,w,u,y,m若经过进栈和出栈操作后,栈底至栈顶元素分别为t,u,y。故出入栈顺序应为:入栈s,出栈s;入栈t,r,出栈r;入栈w,u,出栈u;入栈y,m,出栈m。第3个出栈元素为u。
10.某序列为a,b,c,d,经过入栈、出栈、入栈、入栈、出栈、出栈操作后,则出栈的序列是 。
【答案】a, c, b
[解析]已知a入栈、a出栈、b入栈、c入栈、c出栈、b出栈,所以出栈的顺序为a,c,b。
11.在字符串s中找连续数字(仅限1位数)之和为n的子串,若存在多个子串符合要求,则输出子串最长的那一串,如字符串“142176”中,和为14的子串有“4217”与“176”,子串“4217”的长度大于子串“176”的长度,最终输出子串“4217”。假设所给字符串中必存在满足条件的子串,实现该功能的python程序段如下,请在划线处填上合适的代码:
s=input(“输入数字字符串:”)
n=int(“input(“输入数值和:”))
n=14
i=0;sum=0;st=“”
for j in range(len(s)):
____(1)_______
sum+=ch1
while sum>n:
ch2=int(s[i])
____(2)_________
i+=1
if sum==n and____(3)________:
st=s[i:j+1]
print(st)
【答案】(1)ch1=int(s[j]) (2)sum-=ch2 (3)len(st)<(j-i+1)
[解析]查找连续单个数值之和等于指定值的最长序列。本程序具有队列的思想,将当前数值累加到sum中后,sum值还没有超过指定值n,则将后续的数字的值加入;若sum的值超过指定值n,则将最先进来的数值减去;若sum的值等于指定值且长度超过原有的记录,则替换当前记录。
12.队列Q从队首到队尾的元素依次是1,2,3,栈S初始为空。约定:P操作是指Q中1个元素出队后入栈,J操作是指Q中1个元素出队后再入队。经过JPJPP系列操作后,栈S中栈顶到栈底的元素依次为 。
【答案】3,1,2
[解析]初始队列Q为1,2,3,栈S为空。进行J操作,1出队后又入队,队列变为2,3,1;进行P操作,2出队后入栈,此时栈S中有元素2队列变为3,1;再进行操作,3出队后又入队,队列变为1,3;再进行P操作,1出队后入栈,此时栈中有元素1,2,队列变为3;最后进行P操作,3出队后入栈,栈S中栈顶到栈底元素依次为3,1,2。
13.利用栈求逆波兰表达式(表达式由操作数和运算符组成)的方法是:从左往右扫描该表达式,遇到操作数时入栈;遇到运算符时,把处于栈上方的两个元素依次出栈,用运算符计算,并把计算结果压入栈中。如此反复操作,直至表达式扫描结束。当用该算法求逆波兰表达式abcd -*e/+f-的值时(abcde.f表示不同的操作数),所使用的栈的深度至少为 。
【答案】4
[解析]在求逆波兰表达式的值时,当扫描到a时,将其入栈,深度为1。当扫描到6时,将其入栈,深度为2。当扫描到c时,入栈,深度为3。扫描到d时,入栈,深度为4。当扫描到一运算符时,弹出栈顶的两个元素a和c,将计算结果入栈,此时栈深度减少为3。当扫描*运算符,出栈两个元素,计算结果入栈,栈深度为2。扫描到e,入栈,栈深度增加为3。扫描到/运算符,出栈两个元素,计算结果入
栈,栈深度为2。扫描到+运算符,出栈两个元素,计算结果入栈,栈深度为1。f入栈,栈深度增加为2.最后一运算符,再出栈两个元素,入栈,栈深度减少为1。在整个过程中,栈的深度最大为4。因此,为了求逆波兰表达式abcd-*e/+f-的值,所使用的栈的深度至少为4。
14.某字符加密法:先输入英文字符串(大小写均可,长度不超过100),依次将其中字符的ASCII码值转化为7位二进制数,形成输入码并以矩阵形式输出;将7位二进制数进行加密处理,先进行水平翻转,再将翻转后的二进制数奇数位上的数字取反,0转1、1转0;最后将加密后的7位二进制数转化为十进制数作为密文显示。
按上述要求,编写一个Python程序,功能如下:输入英文字符串,运行程序输出对应的输入码,并显示密文。程序运行界面如图所示。
请输入英文字符串:Python
输入码:
P:1010000
y:1111001
t:1110100
h:1101111
o:1101111
n:1101110
密文:80 26 66 94 46 110
(1)若输入的英文字符串是“Ok”,则加密后的密文是______________________________。
(2)实现上述功能的Python程序如下,请在划线处填入合适的代码。
‘’’依次生成并输出英文字符串text各字符对应的7位二进制数‘’’
def show_code(text):
code=[[0]*7 for i in range(len(text))]
for i in range(len(text)):
n=ord(text[i])
j=0
s=””
while n>0:
code[i][6-j]=n%2
s=str(n%2)+s
n= ______①_______
j=j+1
print(f”{text[i]}:{s}”)
return code
‘‘‘对各字符对应的7位二进制数按规则进行加密处理,并返回密文’’’
def encode(plain_code):
secret_code=[ ]
for i in range(len(plain_code)):
s=0
for j in range(7):
num=___②___________
if j%2==0:
num=1-num
s=s*2+num
secret_code.append(______③________)
return “”.join(secret_code)
text=input(“请输入英文字符串:”)
print(“输入码:”)
plain_code=show_code(text)
print(f”密文:{encode(plain_code)}”)
【答案】(1)44 62
(2)①n//2 ②plain_code[i][6-j] ③str(s)
[解析]自定义函数show_code(text)的作用是依次生成并输出英文字符串text各字符对应的7位二进制数,n就是字符的ASCII码值,根据进制转换算法可知第①空答案为n//2;自定义函数encode(plain_code)的作用是将各字符对应的7位二进制数按规则进行加密处理,因为要先进行水平翻转,故num不是第j位上的二进制数,而是j的对称位的二进制数,则第②空答案为plain_code[i][6-j];最后将十进制数密文添加到列表secret_code中,并拼接成字符串返回,注意第③空答案不能写成s,因为不能直接把整数拼接成字符串。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$$
第三章 字符串、队列和栈
单元测试
姓名: 班级: 分数:
(满分:100分 时间:90分钟)
题型
选择题
填空题
总计
题数
20
14
34题
分数
60
40
100分
得分
一、单项选择题(每题3分,共60分)
1.已知字符串a"人生苦短,我用Python”,则下列说法正确的是( )
A.a[5]的值为",",a[:5]的值为"人生苦短"
B.a[5]的值为"我”,a[:5]的值为"人生苦短"
C.a[-5]的值为"y",a[-5:]的值为" thon "
D.a[-5]的值为"用",a[-5:]的值为"ython "
2.下列Python字符串不合法的是:( )
A.”I love ‘China’” B.’I “love” China’
C.’I love \’China\’’ D.’I love ‘China”
3.有如下Python程序段:
a=”Beautiful is better than ugly.”.split()
b=””.join(a)
则下列说法正确的是:( )
A.a[4]的值为“ugly”,b[4]的值为“t”
B.a[4]的值为“ugly.”,b[4]的值为“t”
C.a[-4]的值为“is”,b[-4]的值为“u”
D.a[-4]的值为“Beautiful”,b[-4]的值为“g”
4.有如下Python程序段:
text=”床前明月光,疑是地上霜。举头望明月,低头思故乡。”
text=text.replace(“。”,“,”)
ans=[s[0] for s in text.split(“,”) if s]
ans=“”.join(ans)
则程序执行后,ans的值为( )
A.“床前明月光” B.“床前明月” C.“床疑举低” D.”举头望明”
5.有如下python程序段:
text=“It is too old to learn.”
ans=text[:6]+“never”+text[6:]
print(ans)
则程序执行后,输出的结果为( )
A.It is too old to learn B.It is never too old to learn
C.It is nevertoo old to learn D.It isnever too old to learn
6.已知队列元素的个数为6,则队首指针 head 和队尾指针 tail 的值不可能的是( )
A.head=0, tail=6 B. head=6,tail=0 C. head=3,tail=2 D. head=3,tail=8
7.已知队列(4,21,55,66,48,24,35,12,78,5)第一个进入队列的元素是4,请问第3个出队列的元素是( )
A.35 B.12 C.55 D.5
8.小王在使用队列解决问题的过程中,初始时,队列为空,队列的首指针和尾指针分为为head、tail,接着小王开始进行了一系列的操作,操作序列为:入队、入队、入队、出队、入队、入队、出队、出队、出队、入队、入队,则操作结束时head和tail的值分别为( )
A.4 7 B.4 8 C.5 7 D.5 8
9.有1个队列,队首到队尾的元素依次为8,3,2,9,5。约定:T操作是指队列中1个元素出队后再入队,Q操作是指队列中l个元素出队。则经过TTTQTTQ系列操作后,队列中队首到队尾的元素依次为( )
A.2,9,5 B.2,5,8 C.5,8,2 D.8,3,2
10.创建一个容量为3的队列,元素2,3,5,1,3,5,2依次等待入队。入队规则为:
①若当前待入队元素已经在队列中,则跳过该元素,否则转②
②若当前队列已满,将队首元素出队列,否则转③
③将当前待入队元素入队列
操作完成后,队列中的元素为( )
A.2,3,5,1 B.1,2,3,5 C.2,3,5 D.5,1,2
11.有如下python程序段:
s=“Python3.8”
ans=“”
for ch in s:
if ch.isupper():
ans+=ch.lower()
elif ch.islower():
ans+=ch.upper()
else:
ans+=ch
print(ans)
则程序执行后,输出的结果为( )
A.Python B.Python3.8 C.pYTHON D.pYTHON3.8
12.有如下程序段:
s=””
ch=”GaozhouKG2021”
n=len(ch)
for i in range(1,n,2):
c=ch[i]
if “A”<=c<=“Z”:
c=chr((ord(c)-ord(“A”)+2)%26+65)
elif “a”<=c<=“z”:
c=chr((ord(c)-ord(“a”)+2)%26+97)
else:
c=chr(ord(c)+1)
s=c+s
print(s)
该程序运行后,最后显示的内容为( )
A.IqjwI12 B.21IwjqI C.cbqM33 D.33Mqbc
13.有如下python程序段:
a=“110000010111010”
if len(a)%4!=0:
a=(4-len(a)%4)*“0”+a)
s=“0123456789ABCDEF”
ans=[]
for i in range(0,len(a),4):
num=int(a[i:i+4],2)
ans.append(s[num])
print(‘’.join(ans))
已知int()函数用于将一个字符串或数字转换为整型,例如
int(“101”,2)用于将二进制数101转换为十进制数,结果为5,则程序执行后,输出的结果为( )
A.60BA B.C174 C.182E8 D.305D
14.回文串是一个对称串,从左向右读与从右向左读是一样的。例如:“aba”从左向右读是“aba”,从右向左读也是“aba”。下面的Python程序的功能就是将一个字符串转换成回文串。如输入“abc”,输出“abccba”。程序如下:
s=input(“输入一个串”)
s1=s
i=0
while i<len(s):
______(1)______
_______(2)______
i+=1
print(“回文串:”,s1)
在横线(1)与(2)处可选的语句如下:
①ch=s[len(s)-i]
② ch=s[len(s)-1-i]
③s1=ch+s1
④s1=s1+ch
则完成此程序正确的语句为( )
A.①③ B.②④ C.①④ D.②③
15.有1个栈,从栈顶到栈底依次为元素a、b、c并且已知元素d已入栈并出栈,则这四个元素的入栈顺序可能为( )
A.a,b,c,d B.b,d,c,a C.c,d,b,a D.d,a,b,c
16.若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p_1,P_2,P_.…p_n,若p_n是n,则p_i是()
A.i B. n-i C.n-i+1 D.不确定
17.某小型列车站有一个单轨车厢调度轨道,最多可容纳3节车厢。初始时调度轨上停有2节车厢:最里面是1号车厢,出口处是2号车厢。之后有三节车厢进入调度轨的顺序是3,4,5,那么所有车厢出调度轨的顺序可能是( )
A.4,3,2,1,5
B.2,5,4,3,1
C.2,1,5,3,4
D.2,1,5,4,3
18.有如下python 程序段,执行该程序段后,输出结果不可能的是()
Import random as rd
st=[1]*10;top=0
for i in range(5):
num=rd.randint(1,6)
if num>=st[top]:
top+=1;st[top]=num
elifnum%2==0:
top-=1
while top>=0:
print(st[top],end="");top-=1
A.6 3 3 1 1 1 B.1 C.4 2 2 D.6 6 6 1
19.有如下Python 程序段:
import random
s=[3,2,7,6,9];st=[0]*len(s);top=-1;i=0
while i <len(s):
op = random. randint(0,1 )
if lop == -1 or op == 0 and s[i]>st[top]:
top +=1 ; st[top]=s[i]
elif top>=l and op==1 and s[i]>st[top-1]:
st[top] =s[i]
i +=1
while top!=-1:
print( st[top],end =" " )
top -=1
执行该程序段后,输出的结果不可能是()
A.3 B.9 6 2 C.963 D.973
20.由元素1,2,3,4,5,6,7,8依次入栈、出栈,要求每次出栈之前至少有两次连续入栈操作,出栈时可以出栈一个元素,也可以出栈多个元素直至栈空,则数据的出栈序列可能是()
A.3,4,2,5,7,6,1,8
C.5,7,6,4,8,3,2,1
B.2,4,3,1,8,7,6,5
D.4,3,5,2,1,6,8,7
二、填空题(每空2分,共计40分)
1.栈和队列都是一种特殊的操作受限的线性表,只允许在端点处进行插入和删除。二者的区别是:栈只允许在表的一端进行插入或删除操作,是一种" "的线性表;而队列只允许在表的一端进行插入操作,在另一端进行删除操作,是一种" "的线性表。
2.栈顶元素总是最后被插入的元素,也是最先被 的元素。
3.在一个单向链表中,head 指针指向链表的头节点p,已知节点的指针区域为next,若要删除该链表中的头节点,则应执行的操作是 。
4.有一个空栈,规定用I表示一个元素入栈,用O表示一个元素出栈。现经过IIOIOOIO系列操作后,元素的出栈顺序是4,1,3,2,则元素的入栈顺序是 。
输出s
5.有如下程序段:
S=“2022 Hope To Get Out Of The Epidemic”
t=“”
for i in s:
if i<“a” or i>“z”:
t=””
t=i+t
print(t)
该程序运行后,最后显示的内容是 。
6.有如下python 程序段:
def fun(a,b):
n=min(len(a),len(b))
for i in range(n):
if a[i]>b[i]:
return a
elif a[i]<b[i]:
return b
if len(a)>len(b):
return a
else:
return b
print(fun(“126”,”26”))
则程序执行后,输出的结果为 。
7.有如下Python程序段:
for ch in “I have a dream”:
if ch not in”aoeiu”:
continue
print(ch,end=””)
则程序执行后,输出的结果是 。
8.有如下python 程序段,使用长度为3的列表q模拟队列的出队、入队活动:
q=[1,2,3]
ys=[]
for i in range(4,10):
ys.append(q[0])
q[0]=q[1]
q[1]=q[2]
q[2]=i
print(ys,q)
程序运行结束后,列表ys中元素的数量为_____________。
9.有1个栈初始为空,其元素入栈顺序依次为8,t,r,w,u,y,m若经过进栈和出栈操作后,栈底至栈顶元素分别为t,w,y,则第3个出栈元素为 。
10.某序列为a,b,c,d,经过入栈、出栈、入栈、入栈、出栈、出栈操作后,则出栈的序列是 。
11.在字符串s中找连续数字(仅限1位数)之和为n的子串,若存在多个子串符合要求,则输出子串最长的那一串,如字符串“142176”中,和为14的子串有“4217”与“176”,子串“4217”的长度大于子串“176”的长度,最终输出子串“4217”。假设所给字符串中必存在满足条件的子串,实现该功能的python程序段如下,请在划线处填上合适的代码:
s=input(“输入数字字符串:”)
n=int(“input(“输入数值和:”))
n=14
i=0;sum=0;st=“”
for j in range(len(s)):
____(1)_______
sum+=ch1
while sum>n:
ch2=int(s[i])
____(2)_________
i+=1
if sum==n and____(3)________:
st=s[i:j+1]
print(st)
12.队列Q从队首到队尾的元素依次是1,2,3,栈S初始为空。约定:P操作是指Q中1个元素出队后入栈,J操作是指Q中1个元素出队后再入队。经过JPJPP系列操作后,栈S中栈顶到栈底的元素依次为 。
13.利用栈求逆波兰表达式(表达式由操作数和运算符组成)的方法是:从左往右扫描该表达式,遇到操作数时入栈;遇到运算符时,把处于栈上方的两个元素依次出栈,用运算符计算,并把计算结果压入栈中。如此反复操作,直至表达式扫描结束。当用该算法求逆波兰表达式abcd -*e/+f-的值时(abcde.f表示不同的操作数),所使用的栈的深度至少为 。
14.某字符加密法:先输入英文字符串(大小写均可,长度不超过100),依次将其中字符的ASCII码值转化为7位二进制数,形成输入码并以矩阵形式输出;将7位二进制数进行加密处理,先进行水平翻转,再将翻转后的二进制数奇数位上的数字取反,0转1、1转0;最后将加密后的7位二进制数转化为十进制数作为密文显示。
按上述要求,编写一个Python程序,功能如下:输入英文字符串,运行程序输出对应的输入码,并显示密文。程序运行界面如图所示。
请输入英文字符串:Python
输入码:
P:1010000
y:1111001
t:1110100
h:1101111
o:1101111
n:1101110
密文:80 26 66 94 46 110
(1)若输入的英文字符串是“Ok”,则加密后的密文是______________________________。
(2)实现上述功能的Python程序如下,请在划线处填入合适的代码。
‘’’依次生成并输出英文字符串text各字符对应的7位二进制数‘’’
def show_code(text):
code=[[0]*7 for i in range(len(text))]
for i in range(len(text)):
n=ord(text[i])
j=0
s=””
while n>0:
code[i][6-j]=n%2
s=str(n%2)+s
n= ______①_______
j=j+1
print(f”{text[i]}:{s}”)
return code
‘‘‘对各字符对应的7位二进制数按规则进行加密处理,并返回密文’’’
def encode(plain_code):
secret_code=[ ]
for i in range(len(plain_code)):
s=0
for j in range(7):
num=___②___________
if j%2==0:
num=1-num
s=s*2+num
secret_code.append(______③________)
return “”.join(secret_code)
text=input(“请输入英文字符串:”)
print(“输入码:”)
plain_code=show_code(text)
print(f”密文:{encode(plain_code)}”)
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$$