内容正文:
2.3 周而复始的循环
一、选择题
1.有如下Python程序段:
import random
s='Python2024'; ans="
k=random.choice([-1,1]) #随机生成-1或1
for ch in s:
key=random.randint(1,3)
if 'A'<=ch<='Z':
ans+=chr((ord(ch)+k*key-65)%26+65)
elif '0'<=ch<='9':
ans+= chr((ord(ch)+k*key-48)%10+48)
else:
ans+=ch
print(ans)
执行该段程序后,输出的结果可能是( )
A.Python2024 B.Qython3111 C.Oython3935 D.Sython5145
2.有如下 Python程序段:
import random
s="abcd"*2
k=random. randint(1,3)
for i in range(k):
s=s[1:]+s[0]
s=s[3:3+k]+s[:3]+s[3+k:]
该程序段执行后,变量s的值不可能的是( )
A.cdababcd B.cdadabbc C.abcdbcda D.bccdadab
3.用Python程序处理字符串,程序如下:
s="b2-c1-2"
t=0;sum=0
for ch in s:
if "0"<=ch<="9":
t=t*10+int(ch)
elif "a"<=ch<="z":
t=ord(ch)-ord("a")#函数ord计算字符的ASCII值
else:
sum+=t
t=0
执行该程序段后,sum的值是( )
A.12 B.35 C.33 D.21
4.某算法的流程图如图所示,执行该流程后,输出sum,n的值分别是( )
A.28,10 B.280,10 C.280,13 D.28,13
5.某算法的部分流程图如下图所示,执行这部分程序后,下列说法不正确的是( )
A.m的值为9
B.n的值为17
C.循环条件n<=15?共判断4次
D.当第4次判断循环条件n<=15?时,m的值为9
6.某算法的部分流程图如下图所示,执行这部分流程,则输出s的值是( )
A.6 B.10 C.15 D.21
7.有如下 Python 程序段:
a=[2,2,6,1,8,5,3,6,4,3,6,4,9,5,3]
dic={}
for i in a:
if i not in dic:
dic[i]=0
else:
dic[i]+=1
执行该程序段后,dic[3]的值为( )
A.1 B.2 C.3 D.4
8.下面程序代码中n的值为( )
s=0
n=1
while s<15:
s=s+n
n=n+1
A.4 B.5 C.6 D.7
9.以下对循环结构及其语句的叙述,错误的是( )
A.程序中某些代码的反复执行称为循环
B.循环结构容易引起系统死机
C.循环结构可以减少源程序重复书写的工作量
D.循环结构的3个要素分别是循环变量、循环体和循环终止条件
10.字符串s由数字字符组成,且首位不为"0"。现需要在s中某一位置插入1位数字字符,得到新s,使新s的值最大。例如s串为"975463",插入字符"8"后,得到最大值"9875463"。实现该功能的程序段如下,方框中应填入的正确代码为( )
#输入字符串s,长度为n;输入字符串ch,长度为1,代码略。
i=0
while i<n:
st=s[0:i]+ch+s[i:n]
A.
if ch>=s[i]:
i+=1
else:
break
B.
if ch>=s[i]:
break
else:
i+=1
C.
if ch<s[i]:
break
else:
i+=1
D.
if ch>s[i]:
break
else:
i+=1
A.A B.B C.C D.D
11.某两段Python程序分别如图所示:
n=int(input("n="))
s=0
for i in range(1,n+1,2):
s+=i
print(s)
n=int(input("n="))
s,i=0,1
while i<=n:
s+=i
i+=2
print(s)
当n的值为10时,关于该两段程序,下列说法不正确的是 ( )
A.两段程序中i的初值相同 B.两段程序都采用了循环结构
C.两段程序的运算结果不相同 D.左边程序实现了“1+3+5+7+9”和的运算
12.有如下Python程序:
import random
a=[0,0,0,0,0,0]
for i in range(6):
a[i]=random.randint(1,10)
for i in range(0,6):
if i%2==0 and a[i]%2==0:
a[i]//=2
else:
a[i]+=1
print(a)
执行程序后,列表a各元素可能是( )
A.1,5,1,11,2,11 B.7,2,8,10,5,9 C.6,9,3,7,8,12 D.3,9,0,8,2,7
13.已知列表a的长度为6,a[0]至a[5]的值依次为18,12,24,15,21,0,某程序如下所示:
head, tail=0, 5
x=a[head]
head+=1
while(head+1) % len(a)! =tail:
t=y=a[head]
head=(head+1)%len(a)
if x<y:
x, y=y, x
if x%y!=0:
a[tail]=x%y
tail=(tail+1)%len(a)
x=t
print(a[head])
程序运行后,输出的结果是( )
A.24 B.12 C.3 D.0
14.如下图,要使该段程序重复执行3次,则在①处应该填什么?( )
A.i=3 B.i<2 C.i<=3 D.i<3
15.使用链表结构模拟某景区游玩路线,链表a中每一个节点包含三个数据,第1个为景点名称,第2个为预计游玩时间(单位:分钟),第3个为下一个景点指针。景区可以从多个景点的大门进入,但只能从"天梯"离开,输出显示各大门进入路线及预计总时间的代码如下。
a=[["迎客松",21,2],["激流勇进",40,2],["天空栈道",50,5],["一线天",30,4],["飞来峰",60,5],["天梯",20,-1]
head=[0,1,3]
for i in range(len(head)):
(1)
s=a[p][1]
while a[p][2]! =-1:
print(a[p][0],end="-->")
(2)
(3)
print(a[p][0])
print("预计时间:",s,"分钟")
上述程序划线处的可选代码有:
①p=head ②p=head[i] ③s=s+a[p][1] ④p=a[p][2]
则(1),(2),(3)处代码依次为( )
A.①③④ B.①④③ C.②③④ D.②④③
16.有如下python程序段:
s = input("请输入字符串:")
i = 0;j = 1;t = 0;s1="";maxs = ""
while i < len(s) - 1:
if s[i] <= s[i + 1]:
j += 1
s1 = s[t : t + j]
if len(maxs) <= len(s1):
maxs = s1
else:
s1 = ""
t = i + 1
j = 1
i += 1
print(maxs)
执行该程序,当输入“p8579yt559h6”时,输出的结果为( )
A.579 B.579y C.559h D.t559h
二、填空题
17.编程计算s=2+4+6+……+100。
s=0
for i in range(2,102, ):
s=s+i
print(s)
18.下面代码的运行结果为 。
a=[5,2,8,7,3]
a[0]=6
del a[1 ]
a.append(9)
print (a)
19.某 Python 程序如下:
n = int (input ())
sum = a = 3
res = 0
i=1
while i <= n:
res = res + sum
sum = sum * 10 + a
i = i + 1
print (res)
当输入n值为3时,程序输出结果是 。
20.在 IDLE 编辑器中运行以下程序,依次输出的数字是 。
for i in range(1,5):
print(i,end="," )
21.在循环结构中,break语句的作用是 。
三、判断题
22.下列Python程序段运行结束后,赋值语句sum=sum+i共被执行了9次。( )
23.循环语句可以嵌套使用。( )
24.如果循环以“while 1:”开头,在不加干预的情况下,程序会一直运行下去。( )
25.for循环与while循环任何时候都不可以相互替换。( )
四、操作题
26.有时候人们会重复写一些字母来表示额外的感受,比如"hello" -> "heeellooo", "hi" -> "hiii"。我们将相邻字母都相同的一串字符定义为字母组,例如:"h", "eee", "ll", "ooo"。已知单词s,如果存在另一个单词word,在单词word的若干个字母组中添加相同的字母,最终能使单词word与单词s相同,就可以判定单词word能扩张成单词s。现有一程序:输入单词s与一组单词words,输出words可扩张为s的单词数量以及扩张需要添加的字母。已知s="heeellooo",words=["hello","hi","helo"],程序运行结果如图所示:
(1)已知s="amazzzzinggg",words=["amazing","amazed","amazzzzzingggg","amaazzzingg"],其中可扩张为s的单词数量为 。
(2)实现上述功能的Python程序如下,请在划线处填入合适的代码。
def expend(s,word):
if s==word:
return False
i=j=0
while i<len(s) and j<len(word):
if s[i]!=word[j]:
return False
cnti=0
while i<len(s) and s[i]==ch:
cnti+=1;i+=1
cntj=0
while :
cntj+=1;j+=1
if cnti>cntj:
res.append(( ))
# res中存储需添加字母的字母组[最后一个字母的索引位置,添加的字母个数]
#例'okk'扩张成'ookkk',最终res为[[0,1], [2,1]]
elif cnti<cntj:
return False
return i==len(s) and j==len(word)
s=input('请输入单词s:')
words=input('请输入一组单词(用逗号分隔):').strip().split(',')
#strip()去除字符串两端的指定字符 split(',')以逗号为分隔符,返回列表
count=0;exps={}
for word in words:
res=[]
if :
count+=1
exps[word]=res
print('这组单词中可扩张为 s 的单词数量为:',count)
for key in exps:
print("单词"+key+"可以在",end="")
for exp in exps[key]:
print("索引为"+str(exp[0])+"处添加"+str(exp[1])+"个字母"+key[exp[0]],end=" ")
print("实现扩张")
27.猜数游戏:由计算机随机生成一个100以内的正整数,用户有5次猜数机会,如果猜中则提示“猜中了!”并退出程序;否则经比较给出相应的提示,然后继续猜数。如果5次均未猜中,输出提示信息后结束游戏。
import #导入随机模块
m = random.randint(1,100) # 产生一个1~100的正整数
for i in range(5):
t = int(input("请输入你猜的数:"))
if t > m:
print("数偏大")
t < m:
print("数偏小")
else:
print("猜中了!")
# 退出循环
if t!= m:
print("这个数是:", m)
print("5次没有猜中,很遗憾,游戏结束")
试卷第1页,共3页
试卷第1页,共3页
学科网(北京)股份有限公司
参考答案:
1.D
【详解】本题考查的是Python随机函数及循环语句。程序的功能是将大写字母统一前移或后移key(1~3)位,数字统一前移或后移key(1~3)位。选项A,大写字母没有移位,不可能;选项B,字符"20"变为"31"是前移,字符"4"变为"1"是后移,不可能一下前移一下后移;选项C,字符"P"变"O"是后移,但字符"2024"后移1~3位不可能是"3935";选项D,字符"P"变"S"是后移3位,字符"2024",分别后移3、1、2、1位变成"5145",符合程序功能。故选D。
2.A
【详解】本题考查的是随机函数及循环语句。初始s="abcdabcd",k取值为1或2或3。
若k为1,循环执行一次后,s="bcdabcda",s=s[3:3+k]+s[:3]+s[3+k:]="a"+"bcd"+"bcda"="abcdbcda",对应选项C;
若k为2,循环执行一次后,s="cdabcdab",s=s[3:3+k]+s[:3]+s[3+k:]="bc"+"cda"+"dab"="bccdadab",对应选项D;
若k为3,循环执行一次后,s="dabcdabc",s=s[3:3+k]+s[:3]+s[3+k:]="cda"+"dab"+"bc"="cdadabbc",对应选项B。
故选A。
3.C
【详解】本题考查字符串的应用,根据代码,运行如下表,最后各部分逆序连接。
分组字符
t
sum
“b2”
12
12
“cl”
21
33
“2”
2
不参加运算
故选择C。
4.C
【详解】本题考查程序分析。该程序运行过程:
初始:sum=1,n=1
1<100成立,执行sum=sum*n=1*1=1,n=n+3=1+3=4;
1<100成立,执行sum=sum*n=1*4=4,n=n+3=4+3=7;
4<100成立,执行sum=sum*n=4*7=28,n=n+3=7+3=10;
28<100成立,执行sum=sum*n=28*10=280,n=n+3=710+3=13;
280<100不成立,输出sum为280,n为13
故正确答案为选项C。
5.C
【详解】本题考查流程图分析。A选项正确,根据流程图分析,当循环结束后m值为9。B选项正确,当m=9时候,n的值为17。D选项正确,第四次循环执行时m=m+2,故m的值为9。C选项错误,循环条件判断了5次,第五次判断没有满足条件,退出循环,故正确答案C选项。
6.B
【详解】本题考查算法流程图知识,该流程图实质是计算“1+2+3+4”的值。故选B。
7.B
【详解】本题考查的是Python字典及循环语句。阅读程序可知,依次读取列表a中的值,如果读取的值是第一次出现,则创建以该值为键,值为0的字典,否则以该值为键的值加1。3在列表中出现3次,第一次出现字典中值为0,执行两次加1,故最后值为2。选B。
8.C
【详解】本题考查Python程序设计相关内容。该程序段通过累加的方式计算1+2+3+...的和,若和大于等于15则结束循环。循环体共执行5次,第5次时,s值为15,执行n=n+1后,n值为6,s<15不成立,结束循环。故本题答案是C选项。
9.B
【详解】本题考查的是循环结构。循环结构表示程序反复执行某个或某些操作,直到判断条件为假时才可以终止循环,并不容易引起系统死机。故本题应选B。
10.D
【详解】本题考查的是Python综合应用。要使新s的值最大,则要依次从高位往低位比较,如果找到一位比要插入的字符小,跳出循环,则插入在该位的前面。不能找相等,如果相等的话,后续有字符比要插入的字符大,则插入后组成的字符不会最大,例s串为"975463",插入字符"4",如果找到相等的话,插入则新字符为:"9754463",不是最大,选项A逻辑不对,应改为:ch<=s[i];选项B不能找相等,选项C逻辑不对。故本题应选D。
11.C
【详解】本题考查的是Python循环语句。图中可以看出i的初始值都为1;右边采用了while循环,左边采用了for循环;两段程序都实现了1+3+5+7+9的操作。故本题应选C。
12.A
【详解】本题考查的是Python循环语句。random.randint(1,10)生成1~10的随机整数。经 a[i]//=2或 a[i]+=1不可能为0、12,故选项C、D不可能;选项A中,a[0]=7,只能由a[i]+=1得到结果(如果由a[i]//=2得到,则初始a[0]=14,超出1~10),故初始a[0]=6,初始a[0]=6满足if条件,应执行a[i]//=2,与执行a[i]+=1矛盾了,故选项B不可能。本题应选A。
13.C
【详解】本题考查的是Python循环语句。阅读程序段代码,分析可知将队列队首两个元素进行比较,拿大数除小数;若不能整除,则将余数重新入队;队首元素出队后,重复上述操作,直到队列中只剩一个元素为止。18,12,24,15,21,6,9,6,3,3,3。最后剩一个元素为3,故选项C正确。
14.D
【详解】本题考查循环结构。在这段程序中,我们想要循环执行3次。循环的条件应该是控制变量 i 小于3,因为我们想要执行3次,当 i 达到3时就不再满足循环条件,循环会停止。所以正确的选项是 i<3,即在①处填写 i<3。这样程序会重复执行,直到 i 不再小于3。故答案为D选项。
15.D
【详解】本题考查链表结构。链表结构模拟景区游玩路线的程序中,需要注意如下的逻辑:(1)处:应该设置当前节点的指针p为head[i],表示第i个大门的开始路线,即p=head[i]。(2)(3)处注意s的初值为a[p][1],同时最后一个节点取不到,所以应先跳入下一节点再统计当前时间的和,所以答案为②④③,故答案为D选项。
16.C
【详解】本题考查Python程序。 这个程序的目标是找到输入字符串s中的连续非降序子串,然后找到最长的一个。让我们逐步分析程序:初始化 s = input("请输入字符串:"),并要求用户输入字符串。初始化 i = 0,j = 1,t = 0,s1 = "",maxs = "",这些变量用于跟踪当前正在检查的子串和找到的最长子串。使用 while i < len(s) - 1: 开始循环遍历字符串s。在每次循环中,检查s[i]是否小于或等于s[i + 1](即,字符是否升序排列):如果是升序,增加j,并使用 s1 = s[t : t + j] 提取当前的升序子串。如果maxs的长度小于或等于s1的长度,则将maxs设置为s1,以保持跟踪最长的升序子串。否则,将s1重置为空字符串,以查找下一个升序子串。增加i的值,继续循环。在给定输入字符串 "p8579yt559h6" 的情况下,程序的输出是最长的连续升序子串,即 "559h"。故答案为:C。
17.2
【详解】本题考查Python程序。题目要求计算2到100之间的偶数之和。在range函数中,第一个参数表示起始值,第二个参数表示终止值(不包含),第三个参数表示步长。这里要计算偶数之和,所以步长应设为2,从2开始每次增加2,依次相加,从而得到2+4+6+……+100的和。故答案为:2。
18.[6,8,7,3,9]
【详解】本题考查Python程序设计相关内容。分析程序段,a为列表,初始值为[5,2,8,7,3],执行a[0]=6,a值为[6,2,8,7,3];执行del a[1](删除a[1]),a值为[6,8,7,3];执行a.append(9)(在列表末尾添加元素值9),a值为[6,8,7,3,9]。故本题答案是:[6,8,7,3,9]。
19.369
【详解】本题考查的是Python循环语句。初始i=1,sum = a = 3,当输入n值为3时。
i<=3成立,res = res+sum=3, sum=sum*10+a=30+3=33,i=i+1=2;
i<=3成立,res = res+sum=36, sum=sum*10+a=330+3=333,i=i+1=3;
i<=3成立,res = res+sum=369, sum=sum*10+a=3330+3=3333,i=i+1=4;
i<=3不成立,故输出res为369。
20.1,2,3,4
【详解】本题考查Python循环结构的应用。range(start, stop, [step]),start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5;step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)。因此依次输出的数字是:1,2,3,4。
21.结束当前循环/终止当前循环
【详解】本题考查break的作用。在循环结构中,break、continue为转向语句。break是跳出循环的执行,不再进入循环;continue是用于终止本次循环,是否再次循环由判断条件决定。故答案是:终止当前循环/结束当前循环。
22.正确
【详解】本题考查的是Python循环与选择语句。range(1,20)生成1~19的整数,阅读程序可知,只有i为1~19的偶数,才执行赋值语句sum=sum+i。故一共被执行了9次。题干中说法正确。
【点睛】
23.正确
【详解】本题考查的知识点是循环结构应用。循环语句可以嵌套使用。在一个循环的内部再使用另一个循环,这就是循环的嵌套。在大多数编程语言中,如Python,Java,C++等,都支持循环的嵌套。故答案为正确。
24.正确
【详解】本题考查Python循环结构的描述。如果循环以“while 1:”开头,while的条件是1,非零即为真,在不加干预的情况下,程序会一直运行下去,陷入死循环。表述正确。
25.错误
【详解】本题考查循环。for 循环和 while 循环是两种不同类型的循环结构,它们用于不同的情况,但它们通常可以相互替换。for 循环通常用于已知循环次数的情况,例如遍历一个列表或迭代器中的元素。while 循环通常用于未知循环次数的情况,即当某个条件为真时继续执行循环。在某些情况下,可以使用 for 循环来模拟 while 循环,反之亦然,但这通常需要额外的控制语句。故说法错误。
26. 1 ch=s[i]或ch= word[j] j<len(word) and word[j]==ch [j-1,cnti-cntj] expend(s,word)
【详解】本题考查的是Python综合应用。
(1)依据题干原则,["amazing","amazed","amazzzzzingggg","amaazzzingg"]中只有amazing可以,故填1。
(2)逐个字符比对,如果s[i]与word[j]相同,记录下字符存储在ch,故第一空应为:ch=s[i]或ch= word[j];如果word字符还没判断完同时当前字符与ch相同,则继续统计word中与ch相同的个数cntj,故第二空应为:j<len(word) and word[j]==ch;res中存储需添加字母的字母组[最后一个字母的索引位置,添加的字母个数],cnti表示s中相邻字母相同的个数,cntj表示word中相邻字母相同的个数,故添加的字母个数为:cnti-cntj。由于统计时执行了j+=1,故最后一个字母的索引位置为:j-1。故第三空应为:[j-1,cnti-cntj];函数expend(s,word)是判断word能否扩张为s,故第四空应为:expend(s,word)。
27. random elif break
【详解】本题考查的是Python循环语句应用。 随机模块是random,故第一空应为:random;多分支语句格式:if……elif……else……,故第二空应为:elif;break是跳出循环,continue是跳过当前循环,故第三空应为:break。
答案第1页,共2页
答案第1页,共2页
学科网(北京)股份有限公司
$$