内容正文:
4.4 运用循环结构描述问题求解过程
一、选择题
1.以下Python保留字中,不属于分支结构的是( )
A.If B.while C.else D.elif
2.关于python语句功能描述正确的( )
A.ord(chr(x)+26) #若字符变量x是大写字母即变成小写字母
B.str(x)+str(y) #求两数之和
C."abcd"[2:4] #运行结果为"bcd"
D.2**3*2/2 % 5 #结果3
3.近期学校进行了一次技术学考模拟考试,学生的成绩数据保存在文件“jscj.xlsx”中,部分数据如图所示。编写Python程序,统计本次考试各班级的优秀(A等级)人数。
import pandas as pd #导入pandas模块
import matplotlib.pyplot as plt #导入matplotlib的pyplot子库
df=pd.read_excel("jscj.xlsx") #读文件中的数据
plt.bar(g.index,g.等级)
plt.show()
方框中代码由下列语句中的部分语句组成:
①df=df[df.等级=="A"]
②df=df["等级"=="A"]
③g=df.groupby("班级", as_index=True).sum()
④g=df.groupby("班级", as_index=True).count()
要实现上述功能,下列选项中正确的是( )
A.①④ B.①③ C.②④ D.②③
4.某Python程序如下:
s=input("请输入字符串:")
ans=0
for i in s:
if "a"<=i<="z":
ans+=2
elif "A"<=i<="Z":
ans+=1
print(ans)
程序运行后,输入“P3fhYT8X”,输出的结果是( )
A.3 B.7 C.11 D.8
5.有如下对分查找程序段
#列表a存放整数升序数据,代码略
key=int(input())
f=[0]*9
i=0
j=8
while i<=j:
m=(i+j)//2
f[m]=1
if a[m]>key:
j=m-1
else:
i=m+1
print(f)
输入待查找数据,执行该程序段后,下列选项中,列表f的值不可能的是( )
A.[0, 0, 0, 0, 1, 1, 1, 0, 0] B.[1, 1, 0, 0, 1, 0, 0, 0, 0]
C.[0, 1, 0, 0, 1, 0, 1, 0, 0] D.[0, 0, 0, 0, 1, 0, 1, 1, 0]
6.有如下python程序段:
a=[4,5,3,6,7,8,2,9,1]
m ,c=1, 1
for i in range(1, len(a)):
if a[i]>=a[i-1]:
c+=1
m=max(m, c)
else:
c=1
print (c, m)
则程序执行后,c和m的值分别是( )
A.1和1 B.1和4 C.2和4 D.3和4
7.有如下Python程序,
n=0;s=[1,1,2,2,2,3,1,1,3,3]
for i in range(0,len(s)-1):
if s[i]==s[i+1]:
n+=1
else:
n-=1
print(n)
执行以上程序后,变量n的值为( )
A.0 B.1 C.-1 D.2
8.有如下Python程序段:
a=[1,3,4,2,3]
m,s=0,0
for i in range(5):
if a[i]>m:
m=a[i]+1
s=s+m
执行该程序后,变量s的值为( )
A.13 B.15 C.16 D.18
9.程序代码如下:
x=1
while x10: x=x+3
print(x)
输出结果是()
A.4,7,10 B.3,6,9
C.3,6,9,12 D.1,4,7,10
10.有如下Python函数mydel,功能是在非空列表lst中找第一个数据x并删除,划线处的正确代码为( )
def mydel(lst, x):
for i in range(len(lst)):
if lst[i]==x:
break
else:
return("找不到想删除的数据")
for j in range(① ):
lst[j]=lst[j+1]
lst.pop() #pop()方法的功能是删除列表最后一个数据
A.i, len(lst)-1 B.i, len(lst)-2 C.len(lst)-1, i, -1 D.len(lst)-2, i-1, -1
11.有如下 VB 程序段:
Private Sub Command1_Click()
Dim a(1 To 6) As Integer, i As Integer
For i = 1 To 6
a(i) = Int(Rnd * 5) * 2 + 1
Next i
For i = 2 To 6 Step 2
a(i) = cha(a(i -1), a(i))
Next i
End Sub
Function cha(x As Integer, y As Integer) As Integer
Dim t As Integer
If x < y Then
t=x: x = y: y = t
cha = y
Else
cha = x -1
End If
End Function
执行该程序段后,在下列选项中,a(1)~a(6)各元素值可能的是( )
A.8,9,3,2,5,1 B.7,6,5,5,3,1
C.9,3,5,4,4,3 D.7,3,1,0,5,4
12.有如下VB程序段:
For i = 1 To 3
For j = 1 To 6-i
If a(j)>a(j+1) Then t=a(j):a(j)=a(j+1): a(j+1)=t
Next j
Next i
数组元素 a(1)到 a(6)的数据依次为“55,31,19,42,37,23”,则此程序运行完成后数组元素的数据依次是( )
A.55,42,37,31,23,19 B.19,23,31,55,37,42
C.19,23,31,37,42,55 D.19,31,23,37,42,55
13.下图是通过 VB 程序读取“GDP2018.accdb”文件中的 GDP 总量,显示在列表框中,部分代码实现如下:
Private Sub Command1_Click() ’列表框中
输出 b(i),代码略End Sub
Private Sub Form_Load()
conn.ConnectionString="Provider=Microsoft.ACE.OLEDB.12.0;DATASource="& App.Path & "\GDP2018.accdb" conn.Open:Set myrecord.ActiveConnection = conn:myrecord.Open "GDP"
n = 0
Do While Not myrecord.EOF n = n + 1
a(n) = myrecord.Fields("2018")
b(n) = Left(myrecord.Fields("Area"), 5) & " " & myrecord.Fields("2018")
myrecord.MoveNext
Loop
conn.Close: myrecord.Close: Set myrecord = Nothing: Set conn = Nothing End Sub
下列说法不正确的是( )
A.ConnectionString 是实例 conn 的属性
B.myrecord.Fields("2018")返回当前记录中“2018”字段的值
C.a(1)读取后执行myrecord.MoveNext 将读取下一条记录,即 a(2)=“中国”
D.myrecord.Fields("2018")也可以写成 myrecord.Fields(3)
14.有如下python程序段:
import random
list1=[60]
for i in range(9):
r=list1[-1]+random.randint(0,i)
if r not in list1:
list1.append(r)
该程序段运行后,list1的值可能是( )
A.[60,61,64,69,71] B.[60,63,65,66,66,75]
C.[60,62,67,68,69,75,79] D.[60,61,63,66,70,72,78,80,81,85]
15.有如下 Python 程序段:
a = [0] * 6
b = [76, 88, 84, 91, 99, 80]
for i in range(6):
for j in range(i + 1, 6):
if b[j] > b[i]:
a[i] += 1
else:
a[j] += 1
print(a)
该程序段运行后,列表 a 的值为 ( )
A.[5, 2, 3, 1, 0, 4] B.[0, 3, 2, 4, 5, 1]
C.[10, 6, 4, 8, 12, 2] D.[6, 3, 4, 2, 1, 5]
16.在Python中,运行下列程序,正确的结果是( )
s=0
for i in range(1,6,2):
s=s+i
print("i=",i,"s=",s)
A.i=5 s=15 B.i=5 s=9 C.i=7 s=9 D.i=6 s=21
17.有如下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
18.有如下 Python 程序段:
import random
a = [0]*6
i = 0
x = int(input())
while i <= 5:
c = random.randint(1, 10)
if x % 2 == c % 2:
a[i] = c
i += 1
x = x//2
执行该程序段后,若要在列表 a 中产生 4 个偶数、2 个奇数,输入的 x 的值不可能的是( )
A.3 B.4 C.5 D.6
二、填空题
19.阅读程序代码,写出运行结果。
运行结果是: 。
20.阅读下处程序写出运行结果
有四个嫌疑人甲乙丙丁涉嫌偷盗,其中一人是小偷。甲说“不是我”,乙说“是丙” ,丙说“是丁”, 丁说“丙在冤枉我”。若他们中只有一人说了假话,请编程判断谁是小偷。(注:在Python运算中,True的值为1, Fa1se的值为0)运行输出结果是
21.下面程序的运行结果为:
for num in range(2,10):
if num % 2==0 :
continue
print(num,end=”、”)
22.某 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时,程序输出结果是 。
23.用Python表达式补充完成如下程序,统计四位奇数中满足能被23和19整除的总数。
s=0
for i in range(1001,10000,2):
:
s=s+1
print(s)
三、操作题
24.某换位密码加密的程序如下:
(1)在划线①②处,填入适当的语句或表达式,将程序补充完整
① ②
(2)如果输入的code为“诸暨二中2021”,key为2,那么输出的结果为:
试卷第1页,共3页
试卷第1页,共3页
学科网(北京)股份有限公司
参考答案:
1.B
【详解】本题主要考查Python分支结构。while是循环结构的关键字,故本题选B选项。
2.D
【详解】本题考查表达式的运算。A选项,会导致类型错误。B选项,字符拼接,非求和。C选项,结果为“cd”。D选项正确,结果为3。故正确答案为选项D。
3.A
【详解】本题考查数据的处理与应用。筛选的语法为df[条件],筛选出等级为A的学生,语句为①。按班级分组,班级当做索引,统计各班级的优秀人数,用count()来表示,故答案为A选项。
4.D
【详解】本题考查程序分析。程序功能读取字母,小写字母ans+=2。大写字母ans+=1。读取P,ans值为1,读取f、h,ans值为5,读取Y、T,ans值为7,读取X,ans值为8。故正确答案为选项D。
5.C
【详解】本题主要考查对分查找算法。变量m是依次查找的下标索引值,第一次循环,m=4,f[4]=1,根据二叉树查找规则,往后查找只会在m=4的左边或右边进行查找,不会出现选项C中f[1]和f[6]同时为1的情况,故本题选C选项。
6.B
【详解】本题主要考查Python程序的执行。m=1,c=1,当i=1时,5>4,c+=1=2,m=max(m, c)=2;当i=2时,3<5,c=1;当i=3时,6>3,c+=1=2,m=max(m, c)=2;当i=4时,7>6,c+=1=3,m=max(m, c)=3;当i=5,8>7,c+=1=4,m=max(m, c)=4;当i=6时,2<8,c=1;当i=7时,9>2,c+=1=2,m=max(m, c)=4;当i=8时,1<9,c=1,循环结束,c和m的值分别是1和4,故本题选B选项。
7.B
【详解】本题主要考查Python程序的执行。分析程序可知,如果相邻的两个数相等则n递增1,如果不相等则n递减1,s=[1,1,2,2,2,3,1,1,3,3],n初值为0,故n=0+1-1+1+1-1-1+1-1+1=1,故本题选B选项。
8.D
【详解】本题主要考查Python程序的执行。遍历列表a,若a[i]大于m,则更新m的值为a[i]+1,并将m累加到s中。因此m依次为0、2、4,s=2+4+4+4+4=18,故本题选D选项。
9.A
【详解】本题主要考查Python循环结构的应用。x=1,每次递增3,循环条件是x<10,因此输出结果是4、7、10,故本题选A选项。
10.A
【详解】本题考查的是Python循环语句。第一个循环跳出时,找到第一个数据x的索引号i, 由lst[j]=lst[j+1],可知删除的时候从i开始后面数据往前移,直到最后一个数据(索引号为:len(lst)-1)。故选A。
11.D
【详解】本题考查VB程序段。根据第一个循环内a(i)=Int(Rnd*5)*2+1,可知,a数组是[1,9]中的奇数。又根据第二个循环可知i=2,4,6,又a(i)=cha(a(i-1),a(i)),两种情况,若a(i-1)<a(i),则交换,则a(i)<a(i-1)。若a(i-1)>=a(i),则a(i)=a(i-1)-1,会出现a(i-1)>a(i),综合两种情况,必定有a(i-1)>a(i)。A中8,9不会出现,B中5,5不会出现,C中4,3不会出现,只能选D。
12.D
【详解】本题考查冒泡排序。根据外循环语句,该排序只执行三趟,又根据内循环和判断条件If a(j)>a(j+1) Then 交换,可知将数值较大的数据往下交换。原始数据为55,31,19,42,37,23,经过三趟排序后,最终结果为19,31,23,37,42,55。故本题D选项为正确选项。
13.D
【详解】本题主要考查VB程序的执行。ConnectionString 是实例 conn 的属性;myrecord.Fields("2018")返回当前记录中“2018”字段的值;a(1)读取后执行myrecord.MoveNext 将读取下一条记录,即 a(2)=“中国”;myrecord.Fields("2018")不可以写成 myrecord.Fields(3),故本题选D选项。
14.A
【详解】本题主要考查Python程序的执行与调试。for循环可以执行9次。第一次for循环随机数生成的一定是0,r是[60],if条件不满足,所以list1最多有9个元素,D选项有10个元素错误。因为有if条件的存在,list1中不会有重复数据,B选项错误。C选项中第二值为62,需要至少是第三次循环此时i为2。第三个值为67,至少需要是第六次循环此时i为5。第六次循环后还剩3次循环,所以67之后最多有3个元素而C选项有4个选项,矛盾,选项C错误,故本题选A选项。
15.A
【详解】本题主要考查Python程序的执行。分析程序可知,该程序实现用列表a统计列表b中第i个元素后面的所有元素比第i个元素值大的个数有多少,如b[0]=76,88、84、91、99、80均大于b[0],则a[0]=5,其余依次类推,该程序段运行后,列表 a 的值为[5, 2, 3, 1, 0, 4],故本题选A选项。
16.B
【详解】本题考查的是Python中for循环语句。range()函数是让Python从指定的起始值,并在到达所指的结束值后停止,不包含结束值。 range(1,6,2)生成的系列数是:1,3,5。故s=1+3+5=9,退出循环时i=5。选项B正确。
17.B
【详解】本题主要考查Python程序的执行。分析程序可知,变量c用于统计列表a中前两项之和等于第三项的个数,a[0]+a[1]=a[2],a[1]+a[2]=a[3],故c的值为2,故本题选B选项。
18.B
【详解】本题考查的是Python循环、选择语句。由if语句可知列表a中数值与x奇偶性相同。结合x = x//2可知,当x=4时,x的奇偶性变化:偶、偶、奇、偶、偶、偶。因为列表a中数值与x奇偶性相同,故不满足列表a中产生 4 个偶数、2 个奇数。故本题应选B。
19.114
【详解】本题主要考查Python程序的执行。分析程序可知,该程序实现对列表data中的偶数进行求和赋给变量sum,故sum=sum+i=0+34+78=114,故运行结果是114。
20.丙
【详解】本题主要考查Python程序的执行。分析程序可知,通过for循环遍历所有的可能,当thief是丙时,满足if判断条件,即一人说了假话,三人说了真话,flag=3,故运行输出结果是丙。
21.3,5,7,9
【详解】本题主要考查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)。变量num的范围是2~9,当num是偶数时跳过,只输出奇数,即运行结果是:3,5,7,9。
22.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。
23.if i %23==0 and i %19 ==0
【详解】本题考查的是Python循环与选择语句。通过循环变量i遍历所有四位数的奇数,判断能否被23和19整除,只要看除完后的余数是否为0,故画线处代码为:if i %23 == 0 and i %19== 0。
24. result=[ ] enpwd(code,key) 诸二22暨中01
【详解】本题主要考查Python程序的综合应用。①此处是初始化列表result为空,故填result=[ ]。②函数enpwd(msg,key)将明文msg按照密钥key进行换位加密,此处通过调用该函数对明文code按照密钥key进行加密,故填enpwd(code,key)。③如果输入的code为“诸暨二中2021”,key为2,变量i的范围是0和1,当i=0时,循环完,result=["诸","二","2","2"],当i=1时,循环完,result=["诸","二","2","2","暨","中","0","1"],此时循环结束,通过join函数输出结果为:诸二22暨中01。
答案第1页,共2页
答案第1页,共2页
学科网(北京)股份有限公司
$$