内容正文:
4.4 运用循环结构描述问题求解过程
一、选择题
1.在Python编程中,以下哪个关键字用于实现循环结构( )
A.if B.while C.for D.loop
2.若要使语句s=s+i执行6次,则程序画线处的语句为( )
s=1
for i in :
s+=i
A.range(1,6) B.range(10,5,-1) C.range(6) D.range(1,9,2)
3.有如下 python程序段:
n=int(input())
s=0
i=1
while i*i<=n :
if n%i==0:
s=s+1
else:
s=s+2
i=i+1
print(s)
若输入“26”,程序运行后输出的结果是( )
A.6 B.7 C.8 D.9
4.某Python程序如下:
from random import randint
a=[0]*6
flag=True
i=0
while i<=5:
x=randint(1,50) #randint(a,b)用来随机生成[a,b]之间正整数
if flag or x>25:
a[i]=x
flag=not flag
i+=1
print(a)
执行该程序段后,在下列选项中,列表a中元素值不可能的是( )
A.[8,39,30,39,37,45] B.[7,35,12,28,25,23] C.[18,44,46,34,1,40] D.[20,33,16,50,47,39]
5.以下Python程序段用于求100以内所有奇数之和,其中无法实现该功能的是( )
A.
s=0
for i in range(1,100):
s+=i
i=i+2
print(s)
B.
s=0
for i in range(1,101,2):
s+=i
print(s)
C.
s=0;i=1
while i<100:
s=s+i
i=i+2
print(s)
D.
s=1;i=1
while i<99:
i=i+2
s=s+i
print(s)
A.-1 B.0 C.1 D.2
6.有5万元资金存入银行,由于银行利率是不断变化的,这5年利率分别是3.25%、3%、3%、2%、1.75%。5年后会有多少收益呢?(money=50000,rate表示年利率),用for循环计算收益,下列选择正确的是( )
A、
for rate in [0.0325,0.03,0.03,0.02,0.0175]:
money=money*(1+rate)
B、
for year in range(0.0325,0.03,0.03,0.02,0.0175):
money=money*(1+rate)
C、
for year in (0.0325,0.03,0.03,0.02,0.0175):
money=money*(1+rate)
D、
for rate in range[0.0325,0.03,0.03,0.02,0.0175]:
money=money*(1+rate)
A.A B.B C.C D.D
7.在 Python 语言中,在 while 语句后面的条件不满足时就退出循环,但是,如果我们想在循环的过程中直接退出循环体,使用的命令是( )
A.len B.end C.break D.del
8.一个3位正整数,每位上的数字的3次幂之和等于它本身,这类数称为水仙花数。小芸编写Python程序输出100至999之间的所有水仙花数,代码如下
1 for i in range(100,1000):
2 s=str(i)
3 bai=s[0]
4 shi=s[1]
5 ge=s[2]
6 if int(s)==bai**3+shi**3+ge**3:
7 print(i,"是水仙花数")
程序调试时报错,请分析程序出错的原因( )
>>>%Run‘水仙花数.py'
Traceback(most recent call last):
File"D:\KINGSTON\123\水仙花数.py",line 6,in<module>
If int(s)==bai**3+shi**3+ge**3:
TypeError:unsupported operand type(s) for** or pow():'str' and 'int’
A.第2行不能使用str()函数把变量i的值转换为字符串类型
B.第6行的幂运算不能使用**运算符,应该使用*运算符
C.第6行的bai、shi、ge三个变量是字符串类型,不能进行幂运算
D.第7行输出格式错误,应该使用双引号
9.有如下Python程序段:
a=[2,1,3,4,5]
c=0
for i in range(2,5):
if a[i-2]+a[i-1]==a[i]:
c+=1
print(c)
该程序段运行后,显示的c的值是 ( )
A.1 B.2 C.3 D.4
10.某Python程序如下:
a=[0]*4
for i in range(7):
j=0
a [j]+=1
while a[j]= =2:
a [j]=0
j+=1
a [j]+=1
print(a[::-1])
程序运行后输出的结果为( )
A.[1,1,1,0] B.[0,1,0,1] C.[0,1,1,1] D.[1,0,1,0]
11.有如下Python程序段:
s=input("请输入待处理字符串:")
st=" "
for i in range(len(s)):
ch=s[i]
if "0" <=ch<="9":
st=ch+st
else:
if "A"<=ch<="Z":
ch=ch. Lower( ) #函数lower( )的作用是将大写字母转换成小写。
st=st+ch
print(st)
执行程序后,输入字符串"Lucky2023!",输出的结果( )
A.3202lucky! B.lucky2023! C.!3202ykcul D.!ykcul2023
12.在程序设计当中,面对大量重复的问题,宜使用( )来提高效率
A.顺序结构 B.选择结构 C.循环结构 D.重复结构
13.如下Python程序运行结束时,变量i和s的值分别是( )
i=0
s=0
while i<5:
i+=1
s=s+i
print("i=",i,"s=",s)
A.i=5 s=10 B.i=4 s=10 C.i=5 s=15 D.i=4 s=15
14.编程求所输入数n的阶乘(0!=1),即s=n*(n-1)*(n-2)*…*2*1,下面横线填什么( )
A.s=n*n B.s=s*s C.s=s*n D.s=s*i
15.有如下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
16.有如下Python程序段:
tmps=[32,28,26,29]
n=len(tmps);top=-1
ans=[0]*n
stk=[-1]*n
for i in range(n):
t=tmps[i]
while top>-1 and t>tmps[stk[top]]:
d=stk[top]
top-=1
ans[d]=i-d
top+=1
stk[top]=i
print(ans)
执行该程序段后,输出的结果是( )
A.[1,0,0,1] B.[1,1,0,0]
C.[0,2,1,0] D.[0,1,2,0]
二、填空题
17.有如下 Python 程序段:
li=[["a",10],["b",20],["c",30]]
dic={}
for i in range(len(li)):
dic[li[i][0]]=li[i][1]
print(dic)
运行该段程序后,输出内容为
18.阅读下列程序,写出运行结果。
19.已知a=2,b=1,以下Python程序段运行结束后,b的值是 。
20.实现循环控制的三要素是 、 和 。
21.写出运行结果。
s=0
while s<=30:
s=s+10
print(s)
结果:
三、判断题
22.下列Python程序段运行结束后,赋值语句sum=sum+i共被执行了9次。( )
23.如果循环以“while 1:”开头,在不加干预的情况下,程序会一直运行下去。( )
24.for循环与while循环任何时候都不可以相互替换。( )
四、操作题
25.根据AQI值判断城市的空气质量。若城市的AQI值(整数)不超过100则空气质量优良,否则空气质量有污染。当输入的AQI值为-1时则退出程序。
city = input("请输入城市名:")
AQI = int(input("请输入空气质量指数AQI的值:"))
AQI != -1:
if :
print(city,"的空气质量优良。")
:
print(city,"的空气质量有污染。")
city=input("请输入城市名:")
AQI=int(input("请输入空气质量指数AQI的值:"))
26.某电商超市开展满减活动,每个账户赠送了多张优惠券,购物满一定额度可减免相应金额。例:小华账户中有 “满100减30”“满40减12”“满20减5”3张优惠券,小华购买了100元商品,使用满额最大的优惠券(“满100减30”)后实付金额70元。
设计Python程序:运行程序时,显示已有的优惠券,输入多种商品数量及单价,用“*”分隔数量和单价(商品数量为1可省略数量及“*”),多种商品间用“,”分隔,以“,”结束。例如输入“10,3*20,2*15,”表示: 1件10元商品,3件20元商品,2件15元商品,程序输出使用优惠券后的订单信息。程序界面及程序如下:
(1)输入购买商品数量及单价,计算商品原价及商品总数量,请在划线处填入合适的代码。
coupon=[[100,30,True],[40,12,True],[20,5,True]] #优惠券按满额值降序排序,True代表可用
print("可用优惠券:",coupon)
a=input('请输入商品数量及单价:')
pcs=①
t=0
total=0
sumpcs=0
for i in range(0,len(a),1):
___②
if c=='*':
pcs=t
t=0
elif c==',':
total+=t*pcs
sumpcs+=pcs
t=0
pcs=1
else:
_③
(2)根据商品原价使用满额最优的优惠券,计算实付金额,请在划线处填入合适的代码。
amount=total
for i in range(len(coupon)):
if amount>=coupon[i][0] and coupon[i][2]==True:
④
coupon[i][2]=False
break
print("商品原价:",total,"元")
print("实付金额:",amount,"元")
print("优惠金额:",total-amount,"元")
print("商品总数量:",sumpcs,"件")
print("优惠券状态:" ,coupon)
(3)运行该程序,若输入商品数量及单价为“3*20,10,”则输出实付金额为
试卷第1页,共3页
试卷第1页,共3页
学科网(北京)股份有限公司
参考答案:
1.BC
【详解】本题考查Python循环结构。在Python编程中,while和for关键字用于实现循环结构。if关键字用于条件判断,而非循环。loop不是Python中的关键字。for循环通常用于遍历一个序列或可迭代对象,例如for i in range(5):。while循环则是在条件为真时持续执行循环体,例如while i<5:。故答案为:BC。
2.C
【详解】本题考查的是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)。range(1,6)生成1~5共5个序列数,range(10,5,-1)生成10~6共5个序列数,range(6)生成0~5共6个序列数,range(1,9,2)生成1、3、5、7共4个序列数。若要使语句s=s+i执行6次,序列数应为6个,故选C。
3.C
【详解】本题考查的是Python循环与选择。输入26,由 i*i<=n可知i取到5,26能被1~5中的1、2整除,故s+1执行两次;不能被3、4、5整除,故s+2执行三次,故s的值为:1*2+2*3=8。选项C正确。
4.B
【详解】本题考查程序分析能力。根据程序分析可知代码随机生成大于25的正整数,要存放到列表a中。每次if语句判断可知,flag和x>25满足一个可以存放到a中。故可判断出当flag为假时,x>25为真,那么存放到a中的值必然大于25。可知flag值真假交替出现,所以B选项中的23不可能出现在第6项,这一项的值必然大于25,故正确答案为选项B。
5.A
【详解】本题考查Python程序编写。选项A中range(1,1000)生成1到99数字,依次赋值给i。程序中i=i+2试图改变i的取值,但是for循环时,将i的值又改回到遍历中的数字,故该程序功能计算1累加到99的结果,故无法实现功能,正确答案为A选项。
6.A
【详解】本题考查的是循环语句的应用。由循环体money=money*(1+rate)可知利率存储在rate中,故循环变量应为rate而不是year,选项B、C错误;range()是函数,故选项D错误。本题应选A。
7.C
【详解】本题考查的知识点是Python循环语句。在Python中,可以使用break语句退出循环。continue语句用于跳过当前循环的剩余部分并进入下一次循环,故本题应选C。
8.C
【详解】本题考查的是Python程序调试与运行。应为 s=str(i),s是字符串,故bai、shi、ge三个变量是字符串类型,不能进行幂运算。故本题应选C。
9.B
【详解】本题主要考查Python程序的执行。分析程序可知,变量c用于统计列表a中前两项之和等于第三项的个数,a[0]+a[1]=a[2],a[1]+a[2]=a[3],故c的值为2,故本题选B选项。
10.C
【详解】本题考查的是Python循环嵌套。
当i取值为0时,a[0]=1,不满足while循环条件,结束第一次外循序,列表a为[1,0,0,0];
当i取值为1时,a[0]=2,满足while循环条件进入内循环,a[0]=0,j=1,a[1]=1,结束第二次外循序,列表a为[0,1,0,0];
当i取值为2时,a[0]=1,不满足while循环条件,结束第三次外循序,列表a为[1,1,0,0];
当i取值为3时,a[0]=2,满足while循环条件进入内循环,a[0]=0,j=1,a[1]=2,满足while循环条件进入内循环,a[1]=0,j=2,a[2]=1,结束第四次外循序,列表a为[0,0,1,0];
当i取值为4时,a[0]=1,不满足while循环条件,结束第五次外循序,列表a为[1,0,1,0];
当i取值为5时,a[0]=2,满足while循环条件进入内循环,a[0]=0,j=1,a[1]=1,结束第六次外循序,列表a为[0,1,1,0];
当i取值为4时,a[0]=1,不满足while循环条件,结束第七次外循序,列表a为[1,1,1,0];
最后逆序输出列表a,故为:[0,1,1,1],选项C正确。
11.A
【详解】本题考查的是Python循环及选择语句。阅读程序可知,程序功能是:对输入的字符串逐个处理,如果是数字,则提到字符串st前头,否则如果是大写字母则转换为小写字母后拼接在st后,其他字符直接拼接在st后。故输入字符串"Lucky2023!",输出的结果:3202lucky!,选项A正确。
12.C
【详解】本题考查程序结构相关内容。程序设计由三大基本结构:顺序结构、选择结构、循环结构。面对大量重复的问题,使用循环结构能提高效率。故本题答案是C选项。
【点睛】
13.C
【详解】本题考查Python循环程序设计相关内容。分析代码段可知,其功能是计算1-5的和。s初值为0,i初值为0,小于5,
第一次进入循环:i+=1,i值变为1;s=s+i-->s=0+1,s值为1;i值为1,小于5;
第二次进入循环:i+=1,i值变为2;s=s+i-->s=1+2,s值为3;i值为2,小于5;
第三次进入循环:i+=1,i值变为3;s=s+i-->s=3+3,s值为6;i值为3,小于5;
第四次进入循环:i+=1,i值变为4;s=s+i-->s=6+4,s值为10;i值为4,小于5;
第五次进入循环:i+=1,i值变为5;s=s+i-->s=10+5,s值为15;i值为5,不小于5,不再进入循环,此时,i=5,s=15,输出i、s的值。
故本题答案是C选项。
14.D
【详解】本题考查循环结构。阶乘的计算需要从n开始,依次乘以n-1、n-2,一直乘到1为止。在程序中,可以使用循环来实现这一逻辑。在每一轮循环中,我们将s乘以当前的i,以计算阶乘。我们在循环中递减i的值,以便逐步计算阶乘。最后,输出计算得到的阶乘值s。故答案为D选项。
15.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。
16.C
【详解】本题主要考查Python程序的执行与调试。分析程序可知,当i=0、1、2时,均不满足while循环条件,此时top=2,stk=[0,1,2,-1]。当i=3时,第一次while循环结束,top=1,d=stk[2]=2,ans[2]=3-2=1;第二次while循环结束,top=0,d=stk[1]=1,ans[1]=3-1=2,while循环结束,for循环也结束,因此,执行该程序段后,输出ans的结果是[0,2,1,0],故本题选C选项。
17. {'a': 10, 'b': 20, 'c': 30}
【详解】本题考查的是字典及循环语句。由dic[li[i][0]]=li[i][1]可知,程序的功能是将嵌套列表中,列表的第一个元素作为字典的键,第二个元素作为字典的值,li=[["a",10],["b",20],["c",30]],运行该段程序后,输出内容为: {'a': 10, 'b': 20, 'c': 30}。
18.90
【详解】本题考查程序分析。
第一步,根据确定层次关系
运行顺序:
先运行第1行,跳过红框自定义函数到第7行,然后执行绿框代码。当运行到绿框内is_prime(x)时,调用红框自定义函数。
第一步,自定义函数的意义
红框内为自定义函数,遍历“2”-“n-1”所有数字,如果n能被其中任何一个数整除,就返回False,否则就返回True,所以红框是在判断n是否是质数,如果该数是质数,则返回True,否则返回False。(质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数)。
第二步模拟运行
①初始值:1s=[23,45,67,87],sum=0
②进入绿框,x遍历列表ls
x=23时,是质数,执行第10行,sum=sum+x=0+23=23
x=45时,不是质数,可以被3整除,不执行第10行
x=67时,是质数,执行第10行,sum=23+67=90
x=87时,不是质数,可以被3整除,不执行第10行
③绿框循环完毕,执行第11行,输出sum,故运行结果为90
19.4
【详解】本题考查的是Python循环语句。初始a=2,b=1。
a>=b成立,第一次循环,执行b=a*b=2*1=2;
a>=b成立,第二次循环,执行b=a*b=2*2=4;
a>=b不成立,跳出循环,故b的值是4。
20. 初值 终值 循环体
【详解】本题考查循环结构的描述。实现循环控制的三要素是:初值、终值和循环体。
21.40
【详解】本题考查循环结构。这段代码使用了一个while循环。循环开始时,s的值为0。然后,循环检查s是否小于或等于30。如果条件成立,循环体内的代码将被执行。在循环体内,s的值增加10,然后再次检查循环条件。这个过程会一直重复,直到s的值大于30。循环结束后,最后一次s增加10的操作也会执行,将s的值增加到40。所以,打印出的结果是40。故答案为:40。
22.正确
【详解】本题考查的是Python循环与选择语句。range(1,20)生成1~19的整数,阅读程序可知,只有i为1~19的偶数,才执行赋值语句sum=sum+i。故一共被执行了9次。题干中说法正确。
【点睛】
23.正确
【详解】本题考查Python循环结构的描述。如果循环以“while 1:”开头,while的条件是1,非零即为真,在不加干预的情况下,程序会一直运行下去,陷入死循环。表述正确。
24.错误
【详解】本题考查循环。for 循环和 while 循环是两种不同类型的循环结构,它们用于不同的情况,但它们通常可以相互替换。for 循环通常用于已知循环次数的情况,例如遍历一个列表或迭代器中的元素。while 循环通常用于未知循环次数的情况,即当某个条件为真时继续执行循环。在某些情况下,可以使用 for 循环来模拟 while 循环,反之亦然,但这通常需要额外的控制语句。故说法错误。
25. while AQI<=100 else
【详解】本题考查的是Python条件循环及选择语句。①当输入的AQI值为-1时则退出程序。故此处应为:while;②由print(city,"的空气质量优良。")可知if条件是AQI值(整数)不超过100,故此处应为:AQI<=100;③双分支结构格式if……else……故此处应为:else。
26. 1 c=a[i] t=t*10+int(c) 或 t=int(str(t)+c) amount=amount-coupon[i][1] 或 amount-=coupon[i][1] 58
【详解】本题考查Python程序。
(1)这里初始化了商品数量pcs为1,因为在输入中,如果数量为1,可以省略数量和"*",故答案为:1。c = a[i],这里将输入字符串中的每个字符依次赋值给变量c,以便处理商品数量和单价,故答案为:c=a[i]。t = t * 10 + int(c) ,这里是将字符转换为整数并累积到商品单价t中,以构建商品的单价,故答案为:t=t*10+int(c) 或 t=int(str(t)+c)。
(2)这段代码会循环检查可用的优惠券列表,找到第一个满足条件的优惠券(金额达到要求且可用),然后将其金额从总金额中减去,并标记为已使用。这样,实际付款金额就是减去了优惠券金额的总金额。amount = amount - coupon[i][1] ,这里减去使用的优惠券金额来计算实际付款金额,然后将相应的优惠券标记为已使用。故答案为:amount=amount-coupon[i][1] 或 amount-=coupon[i][1]。
(3)这是通过计算商品原价,使用优惠券的逻辑来得出的。首先,总原价为 3*20 + 10 = 70,然后根据可用的优惠券列表,最优惠的是 "满40减12" 优惠券,因此减去12元,得到实付金额为58元。故答案为58元。
答案第1页,共2页
答案第1页,共2页
学科网(北京)股份有限公司
$$