内容正文:
4.4 运用循环结构描述问题求解过程
一、选择题
1.若要使语句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)
2.有如下 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
3.在Python中,以下代码的输出结果是( )
x=0
for i in range(2,8,2):
x=x+i
print(x)
A.20 B.16 C.12 D.10
4.函数range(6,10)生成的序列中元素的个数是( )
A.3 B.4 C.5 D.6
5.在下面Python程序代码中,①和②处应该填的代码是( )
sc=float(input("请输入期末考成绩sc="))
if sc>=90:
print("优秀")
① sc>=80:
print("良好")
elif sc>=60:
print("合格")
②:
print("不合格")
A.if else B.else elif C.elif else D.elif elif
6.有如下Python程序段:
a=[99,85,74,68,53,42,34,27,20,13]
key=int(input("请输入一个整数:"));i,j,k,c=0,9,0,"N"
flag=False
while i<=j and flag==False:
m=(i+j+1)//2;k=k+1
if key==a[m]:
c="Y";flag=True
if key>a[m]:
j=m-1
else:
i=m+1
print(c,k)
执行该程序段后,下列说法正确的是( )
A.该程序段既能用于升序序列的查找,也能用于降序序列的查找
B.若输出k的值为2,则c的值一定为Y
C.若输入key的值为74,程序执行后变量i和j的值分别为0和4
D.输入两位任意正整数,k的值介于1和3之间
7.有如下Python程序段:
import random
s=''
for i in range(1,4):
k=random.randint(1,4)
ch=chr(65+k)
s+=ch
print(s)
执行该程序段后,输出的结果可能是( )
A.BCCD B.EEE C.BEF D.ECBF
8.在 Python语言中,运行以下程序,屏幕打印“*”的个数是( )
for i in range(0,10,2):
print("* ")
A.10 B.5 C.6 D.9
9.下列代码的运行结果是( )
A.55 B.14 C.36 D.25
10.在python中,运行下列程序后会看到( )“*”
for i in range(1,5):
print("hello")
print("*")
A.5 B.4 C.2 D.1
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程序段实现相同的功能,则右框内划线处填写的代码应该是 ( )
s=t=0
for t in range(0,7,2):
s+=t
s=t=0
while t<=6:
s+=t
________
A.t+=2 B.s+=2 C.t+=s D.t=s+2
13.有如下Python程序段:
import random
s1="PROGRESS";s2=""
f=[False]*8
for i in range(1,5):
t=random.randint(0,3)*2+1
while f[t]:
t=random.randint(0,3)*2+1
f[t]=True
s2=s2+s1[t]
print(s2) 执行该程序段后,显示的值不可能是( )
A.EGRS B.GERS C.SEOR D.RESG
14.有如下Python程序段:
def f(x):
return x[::-1] #对x逆序输出
s = 'CPU'
while len(s) > 0:
print(f(s),end=" ")
s = s[:len(s) - 1]
执行该程序段后,输出结果为()
A.UPC PC C B.CPU PU U C.UPC D.U
15.以下Python程序的基本结构是( )
m=1
for I in range(1,5):
m=2*m
print(m)
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.阅读下列程序,写出运行结果。
18.某 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时,程序输出结果是 。
19.阅读下列程序,写出运行结果
sum=0
for k in range(1,11):
if k%2==0:
sum=sum+k
print(sum)
程序运行后输出结果是: 。
20.以下Python程序运行结束后,循环变量i的值是 。
21.下面程序的运行结果为( )
三、判断题
22.下列Python程序段运行结束后,赋值语句sum=sum+i共被执行了9次。( )
23.如果循环以“while 1:”开头,在不加干预的情况下,程序会一直运行下去。( )
24.for循环与while循环任何时候都不可以相互替换。( )
四、操作题
25.某水果店铺每天接收来自全国各地的订单如图a所示,为了保证水果的新鲜程度和提高顾客的购物体验,店铺每天下午四点前的订单必须当天全部发出送往附近三个物流中转站ABC,再经由中转站发往全国各地。店铺按照订单顺序打包,相同地区的包裹装在一起,当某一地区包裹总重量超过货车限重m时,则将已有包裹按照时间顺序装多辆车运走,同一辆车按重量从大到小放置包裹。编写程序,按送达顺序将包裹装车,输出各车次及对应的订单编号,运行结果如图b所示。
图a 图b
(1)若货车限重升级为60,则如图a所示的订单需要发送的车次数量为
(2)实现上述功能的部分Python程序如下,请在划线处填入合适的代码。
def loading(k,num): # 已送达待打包的物品按重量由大到小输出
num+=1
p=tot[k][1]
k=chr(65+k)
print("第"+str(num)+"车,发往中转站"+k+",各包裹订单号为:",end=" ")
while orders[p][4]!=-1:
print(orders[p][0],end=" ")
p=orders[p][4]
print(orders[p][0])
return num
'''接收到的订单数据储存在数组orders中,orders中节点包含信息[订单编号,物流中转站,订单时间,重量],货车限重为 m,代码略'''
n=len(orders)
m=40
num=0
for i in range(len(orders)):
order[i].append(-1)
tot=[[0,-1] for i in range(3)]
for i in range(n):
k=ord(orders[i][1])-65
if tot[k][0]+orders[i][3]>m:
num=loading(k,num)
tot[k]=[0,-1]
①
if p==-1:
tot[k][1]=i
else:
if orders[i][3]>orders[p][3]:
tot[k][1]=i
else:
q=-1
while ② :
q=p
p=orders[p][4]
orders[q][4]=i
orders[i][4]=p
③
#重量不足 m 的剩余包裹,按照物流中转站依次装入货车
for i in range(3):
if tot[i][1]!=-1:
num=loading(i,num)
(3)加框处代码替换为下列的 (多选,填写字母),仍能实现上述功能。
A.
while p!=-1:
print(orders[p][0],end=" ")
p=orders[p][4]
print()
B.
q=p
p=orders[p][4]
while p!=-1:
print(orders[p][0],end=" ")
q=p
p=orders[p][4]
print()
C.
while orders[p][4]!=-1:
print(orders[orders[p][4]][0],end=" ")
p=orders[p][4]
print()
D.
q=p
p=orders[p][4]
while p!=-1:
print(orders[q][0],end=" ")
q=p
p=orders[p][4]
print(orders[q][0])
26.抽样统计某市联考成绩,其成绩存放在“cj.xlsx”Excel文件中,部分数据如图a所示,现对成绩进行如下分析处理:
图a
请回答下列问题:
(1)在数据整理时,常见的数据问题有 。(多选,填字母:A.数据量过大/B.数据重复/C.数据单一/D.格式不一致)
(2)成绩分析程序如下,完成划线处填空。
import pandas as pd
import matplotlib.pyplot as plt
df=pd.read_excel("① ") #导入cj.xlsx文件
#计算每个学生除英语以外的选考总成绩(本次考试部分学生由于训练没有参加)
#新增“数目”数据列,统计每行数据记录的非空数据项
df["数目"]=df.count(axis=1)
for i in df.index:
if df.at[i,"数目"]==8:
df.at[i,"选考成绩"]=df.at[i,"成绩"]-df.at[i,"英"]
else:
df.at[i,"选考成绩"]=df.at[i,"成绩"]
dfl=df[② ] #筛选出选考成绩不小于210的数据记录
#选择合适的选项,绘图呈现每所学校选考成绩不小于210的人数对比图
df2=dfl.groupby("校码",as_index=True).count()
plt.figure(figsize=(5,2))
plt.③ #根据图b,建立学校与人数的对比图表
plt.xlabel("人数")
plt.ylabel("学校")
plt.tide("各学校人数比对") #显示图表标题
plt.show()
图b
试卷第1页,共3页
试卷第1页,共3页
学科网(北京)股份有限公司
参考答案:
1.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。
2.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正确。
3.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(2,8,2)生成2、4、6,循环结束后x=x+i=0+2+4+6=12,故本题选C选项。
4.B
【详解】本题考查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(6,10)生成:6、7、8、9共4个。故选B。
5.C
【详解】本题考查Python基础。第二个条件语句sc>=80前面缺少elif关键字,应该加上elif。最后一个条件语句没有对应的print语句的关键字,应该添加上else。故选择C。
6.D
【详解】本题考查二分查找。A选项错误,给定的程序段是用于升序序列的二分查找算法,如果要用于降序序列的查找,需要对程序进行修改。B选项错误,如果k的值为2,则意味着循环体执行两次,不一定能找到目标值,因此c的值可能是N。C选项错误,当输入key的值为74时,程序执行后变量i和j的值分别为3和4。D选项正确,由于二分查找算法的复杂度为O(log n),所以k的值介于1和3之间是合理的。故正确答案为选项D。
7.B
【详解】本题考查的是Python循环语句及随机函数。由range(1,4)可知,s中只有三个字符,选项AD错误;random.randint(1,4)生成1到4的随机整数,结合ch=chr(65+k),可知ch字母可能为BCDE中的一个,选项C中含有F不可能,故选B。
8.B
【详解】本题考查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(0,10,2)生成0,2,4,6,8序列,故打印出5个“*”。选项B正确。
9.D
【详解】本题主要考循环结构。range(1,11,2)会产生数字:1、3、5、7、9,s=s+i的作用是将这些数字累加,则1+3+5+7+9=25,故本题选D。
10.D
【详解】本题考查的是Python循环语句。print("*")没有缩进不是for的循环体,故最后会看到1个“*”。选项D正确。
11.C
【详解】本题考查的是Python循环语句。图中可以看出i的初始值都为1;右边采用了while循环,左边采用了for循环;两段程序都实现了1+3+5+7+9的操作。故本题应选C。
12.A
【详解】本题是循环结构程序 for语句和while语句之间的转换实现。for语句通过“range(1,7,2)”语句,按照步长来改变循环变量的值直至结束循环;而while语句则需要在其循环体(语句块)内编写改变循环变量的语句,直至 while 条件表达式的值为False,从而结束循环。由题中 for语句程序段可知循环变量t的步长为2,在循环体(语句块)其他语句保持不变的情况下,为了确保两程序段能实现计算“1+3+5”的相同功能,则右框内划线处填写的代码应该是:t+=2。故本题应选A。
13.C
【详解】本题考查Python程序设计相关内容。由 t=random.randint(0,3)*2+1可知t可能是1,3,5,7,故s2中的字符可能是“RGES”,由while循环可知,字符不能重复。选项C字符中含有O不可能,故本题应选C。
14.A
【详解】本题考查的是自定义函数及循环语句。阅读程序可知,逆序输出字符串s,然后字符串s去除首字符,再次逆序输出,直到字符串s为空。 s = 'CPU',故输出:UPC PC C。选项A正确。
15.D
【详解】本题主要考查Python循环结构。分析程序可知,以下Python程序的基本结构是for循环结构,故本题选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.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
18.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。
19.30
【详解】本题考查的是Python循环语句。sum=0,变量i的范围是1~10,如果是偶数,则执行sum=sum+i,故程序执行完,sum=sum+i=0+2+4+6+8+10=30。
20.3 6 9
【详解】本题主要考查Python循环结构的应用。
这段代码遍历从1到9的整数,并打印出其中可以被3整除的数。
for i in range(1,10):这行代码创建了一个循环,从1开始到9结束(range()函数的上限是不包含的)。在每次循环中,i的值都会变成下一个数。
if i%3==0:这行代码检查i除以3的余数是否为0。如果为0,那么这个数就是3的倍数。
print(i):如果i是3的倍数,这行代码就会打印出这个数。所以,这段代码会打印出数字3,6和9。
21.1
1
1
1
1
1
……
【详解】本题考查循环结构。这段代码实际上会陷入无限循环,不会停止。循环条件 i <= 10 在循环内部没有更新 i 的值,因此 i 的值永远都不会大于10,导致无限循环,不断打印出1。
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. 4 p=tot[k][1] p != -1 and orders[i][3] <= orders[p][3] tot[k][0]+=orders[i][3]
AD
【详解】本题考查程序分析。(1)当货车载重为60时候,根据装车规则,某一地区包裹总重量超过货车限重60时,顺序装车运走。物流中转站A达到64,故装车运走。不能超载,第1车,发往中转站A,各包裹订单号为:3 6 1 5 ;第2车,发往中转站A,各包裹订单号为:12; 第3车,发往中转站B,各包裹订单号为: 4 7 11; 第4车,发往中转站C,各包裹订单号为:10 2 9 8。(2)①在主程序中,没有对变量p初始化且根据代码if orders[i][3]>orders[p][3] tot[k][1]=i,可知p存储着三个中转地tot列表的最大重量订单的载重。故初始化变量p=tot[k][1]。②代码if orders[i][3]>orders[p][3] 的判断,当不满足if判断条件时候,执行while循环,则循环条件必然对 orders[i][3] <= orders[p][3]的处理。程序的目的是保证从大到小排列订单,找到找到合适的位置,将 orders[i][3]放入链表中,需要p判断没有到达链表最后。故填写p != -1 and orders[i][3] <= orders[p][3]。 ③当订单得按照从大到小排列后,要更新不同中转地的订单总总量。订单总总量存储在各个中转地tot列表的0号索引。故填写tot[k][0]+=orders[i][3]。(3)选项B,p存储着最大订单的索引,在没有输出的时候,先通过语句p=orders[p][4]开始移动最大订单的索引,所以在输出的时候,会丢失最大订单。选项C,订单索引p移动时候,在当前订单没有输出时候,判断后续订单索引是否为-1,最后会导致程序退出后,还没有输出当前订单。所以,选项BC错误,故选择AD。
26. BD cj.xlsx df.选考成绩>=210或df["选考成绩"]>=210 barh(df2.index,df2.选考成绩)
【详解】本题考查pandas相关知识。(1)在数据整理时,常见的数据问题有:数据缺失、数据重复、逻辑错误、格式不一致、数据异常等。故选择BD。(2)①打开excel文件命令,文件名是cj.xlsx。②pandas支持在中括号里输入条件表达式,筛选出指定内容。因此其表达式为df.选考成绩>=210或df["选考成绩"]>=210。③水平柱形图为barh,再加上之前的as_index=True,因此“校码”列已经作为索引,不能使用df2.校码,其x轴和y轴刚好和垂直柱形图相反,故答案是barh(df2.index,df2.选考成绩)
答案第1页,共2页
答案第1页,共2页
学科网(北京)股份有限公司
$$