第三章 验收卷(三) 算法的程序实现 浙教版(2019)必修1(课件 练习三份打包)

资源下载
  1. 二一教育资源

第三章 验收卷(三) 算法的程序实现 浙教版(2019)必修1(课件 练习三份打包)

资源简介

(共36张PPT)
验收卷(三) 算法的程序实现
第三章 算法的程序实现
(考试时间40分钟;满分50分)
一、选择题(本大题共12小题,每小题2分,共24分,在每小题给出的四个选项中,只有一个符合题目要求,多选、少选、不选均不得分)
1.Python 表达式 int(19/4)-25%3**2 的值是(  )
A.-3 B.-2 C.2 D.3
A
2.下列 Python 表达式中,值为 True 的是 (  )
A."ac" in "abcabc"
B.9/3**2!=1
C.abs(-4.3)>9∥2
D."12"=="123456"[1:3]
C
3.下列Python表达式中,值为True的是 (  )
A.2**3==64**0.5
B.985>211 and not "book"<"pen"
C."Chat" in "chatGPT"
D.len("Python")>6
A
4.下列表达式的结果为 True 的是 (  )
A.not "a" in "apple"
B. 2023%1000∥4==23
C. "t" in ["tomato","bear","banana"]
D. "abc"*2>="abca"
D
5.已知字典rec中存储着某超市部分水果的类别编码,其值为rec={"01":"苹果","02":"人参果 ","03":"阳光玫瑰葡萄","04":"红心火龙果","05":"果冻橙"},现要在字典rec中增加一个键为 "06",值为"甜蜜柚"的元素,下列Python语句能实现的是 (  )
A.rec[06]="甜蜜柚"
B. rec["06"]="甜蜜柚"
C. rec["06"]={"甜蜜柚"}
D. rec["06"]="06":"甜蜜柚"
B
6.普通车辆高速公路超速罚款规则如下:(1)超过规定时速10%(含10%)以内,暂不处罚;(2)超过规定时速10%以上未达50%(含50%)的,处以200元罚款;(3)超过规定时速50%以上的,处以 2000元罚款。若用变量v表示高速公路规定时速,变量vt表示车辆行驶时速,变量k表示车辆的罚款,则下列程序段无法正常实现车辆行驶时速vt和罚款k之间关系的是 (  )
C
A.if vt<=v*1.1:
   k=0
 elif vt<=v*1.5:
   k=200
 else:
   k=2000
B.if v*1.1   k=200
 else:
   k=0
   if vt>v*1.5:
  k=2000
C.k=0
 if vt>v*1.1:
   k=200
 elif vt>v*1.5:
   k=2000
D.k=2000
 if vt<=v*1.1:
   k=0
 elif vt <=v*1.5:
   k=200
7.根据国家标准,室内空气质量指数的正常范围为0.5~2.5,如果空气质量指数大于2.5,则表明空气质量较差,空气质量指数小于0.5,表明空气质量较好,下列选项能正确表示这三种情况的是 (  )
D
A.if zs>2.5:
   print("较差")
 elif 0.5   print("正常")
 else:
   print("较好")
B.if 2.5>zs>0.5:
   print("正常")
 elif zs<0.5:
   print("较好")
 else:
   print("较差")
D.if zs<0.5:
   print("较好")
 elif not zs>2.5:
   print("正常")
 elif zs>2.5:
   print("较差")
C.if zs>2.5:
   print("较差")
 elif not zs>0.5:
   print("较好")
 else:
   print("正常")
解析 A选项elif 条件应为0.5<=zs<=2.5;B 选项if 条件应为2.5>=zs>=0.5;C 选项中,elif 中条件应为not zs>=0.5。
8.有如下 Python 程序:
s="abcdefghijk";res=0
for i in range(1,len(s),2):
  res+=ord(s[i])-ord(s[i-1])
print(res)
运行该程序,输出的结果是( )   
A.5 B.6 C.9 D.10
解析 每2个字母一组,后一个与前一个字母的ASCII码的差值,共有5组。
A
9.“回文串”是一个正读和反读都一样的字符串。下列Python段的功能是:输入一个字符串,判断该字符串是否为回文串,若是则输出“Yes”,否则输出“No”。
s=input("请输入字符串:")
i=0
j=len(s)-1
flag=True
while i  if s[i]==s[j]:
    i+=1
    ①   
  else:
    flag=False
if ②    :
  print("Yes")
else:
  print("No")
则程序划线①②③处应填入的语句为(  )
A.①j+=1 ②flag B.①j+=1  ②not flag
C.①j-=1 ②flag D.①j-=1  ②not flag
C
解析 本题程序的功能是判断字符串是否为回文串。本题采用双指针的方法来判断头尾一对字符,变量 i指向字符串的头部,j 指向字符串的尾部。因此①处代码为 j-=1 或 j=j-1,最后根据逻辑变量 flag 的值来判断是否为回文串,当 s[i]!=s[j]时,flag 为 False,因此②处代码 flag 或 flag==True。
10.有如下Python程序段:
a=[3,5,2,4,1]
sum1=m=a[0]
for i in range(1,len(a)):
  if a[i]     m=a[i]
     sum1+=m
执行该程序后,sum1的值为(  )
A.6 B.9 C.11 D.15
C
解析 程序功能是每次将 a[i]与 m 中的较小值累加到变量 sum1 中,因此 sum1=3+3+2+2+1=11。
11.用Python程序处理图像文件“chenchen.jpg”,该图像颜色位深度为24bit,图像如图所示,程序代码如下:
    else:
      img[i,j]=0
plt.imshow(img,cmap="gray")
plt.show()
下列说法正确的是(  )
A.待处理图像的文件名为"chenchen"
B.处理后的图像像素数将增加
C.将加框处语句中的“>”改为“<=”,则处理后的图像中黑白色将互换
D.将加框处语句中 128 改为 188,则处理后图像中的黑色部分将减少
C
12.某Python程序如下:
s=[3,3,3,6,6,8,11,11,9,4,2,5]
r=[]
for i in range(1,len(s)-1):
  if not(s[i-1]
s[i]>s[i+1]):
    if s[i-1]==s[i]:
      continue
    j=len(r)-1
    while j>=0 and s[i]<=s[r[j]]:
      j-=1
    if j==len(r)-1 or j==-1:
      j+=1
    r=r[:j]+[i]+r[j:]
print(r)
程序运行后,输出的结果为(  )
A.[3,6,10] B.[6,11,2] C.[6,3,10] D.[10,3,6]
D
二、非选择题(本大题共4个小题,共26分)
13.数据在网络传输中,带宽是宝贵的资源,通过压缩传输的字符串,可以减少数据量,从而加快传输速度,节省带宽资源。现有一种字符压缩方法描述如下:对于连续的若干个相同的子串“X”会压缩为“[DX]”的形式(D是一个整数且1≤D≤99),如字符串“ABABABAB”就压缩为“[4AB]”或者“[2[2AB]]”,类似于后面这种压缩之后再压缩的称为二重压缩。如果是“[2[2[2AB]]]”则是三重的。现给出一串压缩后的结果,并对其进行解压缩。
思路:先找出每个左括号的位置,然后从后往前枚举,找出每一个括号内要解压的子串以及要解压的次数,将子串解压后得到一个新串,重复操作,得到最终的解压缩结果。
例如:[2[2[2AB]]]→[2[2ABAB]]→[2ABABABAB]→ABABABABABABABAB。
(1)已知采用上述压缩方法得到的压缩结果是“[2Z[2DB]]”,则解压缩结果为     。
(2)根据上述描述,小明利用 Python 设计了一个解压缩程序,请在划线处填入合适的代码。
start = []
s=input("请输入压缩结果:")
for i in range(len(s)):
  if s[i]=="[":
    start.append(i)
for i in range(len(start)-1,-1,-1):
  num=0;temp=" "
  ①    
  while j    if "0"<=s[j]<="9":
      num=num*10+int(s[j])
    else:
      ②   
    j+=1
  ans=num*temp
  s=s[:start[i]]+③     #重新构造字符串
print("解压结果为:"+s)
答案 (1)ZDBDBZDBDB (2)①j=start[i]+1 ②temp+=s[j] ③ans +s[j+1:]
14.腾讯通过 QQ 等级来衡量用户的活跃情况。QQ 等级计算规则如下:
①用户当天在线两个小时,记为活跃 1 天;半小时及以上、两小时以下则记为活跃 0.5 天。
②根据累计活跃天数对应不同 QQ 等级,如表所示,0 级至 1 级需活跃 5 天,1 级至 2 级需活跃7天,依此类推。
③每升1级,用户可以获取1个△,4 个△兑换1个◇,4个◇兑换1个○,4 个○兑换 1个☆。
级别 图标 累计活跃天数
0级 0天
1级 △ 5天
2级 △△ 12天
3级 △△△ 21天
4级 ◇ 32天
5级 ◇△ 45天
(1)小张的 QQ 等级图标为○◇◇◇△△,则小张 QQ 等级的级别是    。
(2)“log.txt”文件中逐行记录了某位用户每天的在线时长(以小时为单位),编程实现读取文件内容并计算,按☆○◇△的顺序输出用户的 QQ 等级图标,请在划线处填入合适的代码。
f=open('log.txt')
data=[]
active=0
icon=["☆","○","◇","△"]
#逐行读取'log.txt'文件中的数据,依次添加到 data 列表中,如data=[1.9,
2.3,11.5,3.1,2.8,5.2……]代码略
#计算用户的活跃天数
for i in range(len(data)):
  if data[i] >= 2:
    active+=1
  elif data[i]>=0.5:
    ①   
#计算用户等级
base=5
level=0
while active >=base:
  level+=1
  ②    
  base = base + 2
#将等级换算为图标
s = " "
while level !=0:
  r = level % 4
  s = str(r) + s
  ③   
n=len(s)
ans=" " 
start=4-n
for i in range(n):
  ans +=④   
print(ans)
答案 (1)30 (2) ①active+=0.5 ②active=active-base ③level=level∥4
④icon[start+i]*int(s[i])
15.每个人进、出馆的时间用一个长度为11的字符串表示,例如“08:05-08:45”表示进馆时间为8点05分,出馆时间为8点45分。现要求统计当天馆内人数超过指定人数的总时长,当天在馆人数最多时刻及在馆人数。
(1)8点01分到8点08分的进出馆人数如下表所示:
分钟 01 02 03 04 05 06 07 08
进馆人数 5 0 4 2 1 3 1 2
出馆人数 0 1 1 1 6 3 2 2
在馆人数最多时刻为    。
(2)每个参观者进入场馆和出馆时间保存在“参观记录.txt”文件中,编写Python程序,请将程序补充完整。
rs=[0]*540 #存储早上8点至下午5点每分钟的在馆人数
f=open("参观记录.txt",encoding="utf-8")
n=0
for sj in f :
  m1=int(sj[:2])*60+int(sj[3:5])-480
#将入馆时间转换为上午8点以后的分钟数
  m2=int(sj[6:8])*60+int(sj[9:11])-480
  rs[m1]+=1
  ①   
sp =int(input("请输入指定人数:"))
totrs=imax=sumrs=0
itime=""
for i in range(540):
  ②   
  if totrs>sp:
    ③   
  if totrs>imax:
    imax=totrs
    itime=str(i∥60+8)+":"+str(④   )
print("超过指定人数的总时长:" + str(sumrs) + "分钟")
print("在馆人数最多时刻为:" + itime + ",共" + str(imax) + "人")
答案 (1)8 (2)①rs[m2]-=1
②totrs+= rs[i] ③sumrs+=1 ④i%60
16.挖金矿游戏。在一个8行8列的矩阵中,矿工位于第1行第1列的格子,n个金矿随机分布在第1行下面的各个格子中,每个金矿的横坐标依次保存在x数组,纵坐标保存在y数组。矿工收集金矿方法:先确定每行最左边和最右边金矿的坐标,对于同一行的金矿,矿工先移动到最左边金矿正上方,再执行向下x步的指令进行挖矿,接着从该行左边第2个金矿开始一直挖到最右边。该行完成后,再依次挖下方各行的金矿。
下图a所示的金矿(图中黑色方块)分布图,按右侧所示的指令,可以收集全部金矿。
(1)现有4*4的金矿分布图如图b所示,矿工在左上角位置,写出矿工按规则获得所有金矿的指令(指令之间用逗号或空格隔开)        。
(2)编写程序,按顺序输出指令,使矿工按照规则得到所有金矿,将空白处填写完整。
x=[2,2,5,5,5,8] #各金矿行号,从小到大升序排列
y=[1,2,4,5,8,6] #各金矿列号,同一行金矿,列号从小到大升序排列
n=len(x) #金矿数量
px=py=1 #矿工初始位置行号和列号
i=0
while i  beg=i   
  while i    i+=1
  if y[beg]    print("左"+str(py-y[beg]))
  elif y[beg]>py:
    print("右"+str(①    ))
  print("下"+str(x[beg]-px))
  print("挖矿")
  for k in range(②    ):
    print("右"+str(y[k]-y[k-1]))
    print("挖矿")
  px=x[beg]
  ③    
  i+=1
答案 (1)下1 挖矿 下2 挖矿 右3 挖矿 或下1,挖矿,下2,挖矿,右3,挖矿
(2)①y[beg]-py ②beg+1,i+1 ③py=y[i]验收卷(三) 算法的程序实现
(考试时间40分钟;满分50分)
一、选择题(本大题共12小题,每小题2分,共24分,在每小题给出的四个选项中,只有一个符合题目要求,多选、少选、不选均不得分)
1.Python 表达式 int(19/4)-25%3**2 的值是 (  )
A.-3 B.-2 C.2 D.3
答案 A
2.下列 Python 表达式中,值为 True 的是 (  )
A."ac" in "abcabc"
B.9/3**2!=1
C.abs(-4.3)>9∥2
D."12"=="123456"[1:3]
答案 C
3.下列Python表达式中,值为True的是 (  )
A.2**3==64**0.5
B.985>211 and not "book"<"pen"
C."Chat" in "chatGPT"
D.len("Python")>6
答案 A
4.下列表达式的结果为 True 的是 (  )
A.not "a" in "apple"
B. 2023%1000∥4==23
C. "t" in ["tomato","bear","banana"]
D. "abc"*2>="abca"
答案 D
5.已知字典rec中存储着某超市部分水果的类别编码,其值为rec={"01":"苹果","02":"人参果 ","03":"阳光玫瑰葡萄","04":"红心火龙果","05":"果冻橙"},现要在字典rec中增加一个键为 "06",值为"甜蜜柚"的元素,下列Python语句能实现的是 (  )
A.rec[06]="甜蜜柚"
B. rec["06"]="甜蜜柚"
C. rec["06"]={"甜蜜柚"}
D. rec["06"]="06":"甜蜜柚"
答案 B
6.普通车辆高速公路超速罚款规则如下:(1)超过规定时速10%(含10%)以内,暂不处罚;(2)超过规定时速10%以上未达50%(含50%)的,处以200元罚款;(3)超过规定时速50%以上的,处以 2000元罚款。若用变量v表示高速公路规定时速,变量vt表示车辆行驶时速,变量k表示车辆的罚款,则下列程序段无法正常实现车辆行驶时速vt和罚款k之间关系的是 (  )
A.if vt<=v*1.1:
   k=0
 elif vt<=v*1.5:
   k=200
 else:
   k=2000
B.if v*1.1   k=200
 else:
   k=0
   if vt>v*1.5:
  k=2000
C.k=0
 if vt>v*1.1:
   k=200
 elif vt>v*1.5:
   k=2000
D.k=2000
 if vt<=v*1.1:
   k=0
 elif vt <=v*1.5:
   k=200
答案 C
7.根据国家标准,室内空气质量指数的正常范围为0.5~2.5,如果空气质量指数大于2.5,则表明空气质量较差,空气质量指数小于0.5,表明空气质量较好,下列选项能正确表示这三种情况的是 (  )
A.if zs>2.5:
   print("较差")
 elif 0.5   print("正常")
 else:
   print("较好")
B.if 2.5>zs>0.5:
   print("正常")
 elif zs<0.5:
   print("较好")
 else:
   print("较差")
C.if zs>2.5:
   print("较差")
 elif not zs>0.5:
   print("较好")
 else:
   print("正常")
D.if zs<0.5:
   print("较好")
 elif not zs>2.5:
   print("正常")
 elif zs>2.5:
   print("较差")
答案 D
解析 A选项elif 条件应为0.5<=zs<=2.5;B 选项if 条件应为2.5>=zs>=0.5;C 选项中,elif 中条件应为not zs>=0.5。
8.有如下 Python 程序:
s="abcdefghijk";res=0
for i in range(1,len(s),2):
  res+=ord(s[i])-ord(s[i-1])
print(res)
A.5 B.6 C.9 D.10
答案 A
解析 每2个字母一组,后一个与前一个字母的ASCII码的差值,共有5组。
9.“回文串”是一个正读和反读都一样的字符串。下列Python段的功能是:输入一个字符串,判断该字符串是否为回文串,若是则输出“Yes”,否则输出“No”。
s=input("请输入字符串:")
i=0
j=len(s)-1
flag=True
while i  if s[i]==s[j]:
    i+=1
    ①   
  else:
    flag=False
if ②    :
  print("Yes")
else:
  print("No")
则程序划线①②③处应填入的语句为 (  )
A.①j+=1 ②flag B.①j+=1  ②not flag
C.①j-=1 ②flag D.①j-=1  ②not flag
答案 C
解析 本题程序的功能是判断字符串是否为回文串。本题采用双指针的方法来判断头尾一对字符,变量 i指向字符串的头部,j 指向字符串的尾部。因此①处代码为 j-=1 或 j=j-1,最后根据逻辑变量 flag 的值来判断是否为回文串,当 s[i]!=s[j]时,flag 为 False,因此②处代码 flag 或 flag==True。
10.有如下Python程序段:
a=[3,5,2,4,1]
sum1=m=a[0]
for i in range(1,len(a)):
  if a[i]     m=a[i]
     sum1+=m
执行该程序后,sum1的值为 (  )
A.6 B.9 C.11 D.15
答案 C
解析 程序功能是每次将 a[i]与 m 中的较小值累加到变量 sum1 中,因此 sum1=3+3+2+2+1=11。
11.用Python程序处理图像文件“chenchen.jpg”,该图像颜色位深度为24bit,图像如图所示,程序代码如下:
#导入PIL、np和matplotlib.pyplot库,代码略
img=np.array(Image.open("chenchen.jpg").convert("L"))
rows,cols=img.shape
for i in range(rows):
  for j in range(cols):
    if (img[i,j]>128):
      img[i,j]=1
    else:
      img[i,j]=0
plt.imshow(img,cmap="gray")
plt.show()
下列说法正确的是 (  )
A.待处理图像的文件名为"chenchen"
B.处理后的图像像素数将增加
C.将加框处语句中的“>”改为“<=”,则处理后的图像中黑白色将互换
D.将加框处语句中 128 改为 188,则处理后图像中的黑色部分将减少
答案 C
12.某Python程序如下:
s=[3,3,3,6,6,8,11,11,9,4,2,5]
r=[]
for i in range(1,len(s)-1):
  if not(s[i-1]
s[i]>s[i+1]):
    if s[i-1]==s[i]:
      continue
    j=len(r)-1
    while j>=0 and s[i]<=s[r[j]]:
      j-=1
    if j==len(r)-1 or j==-1:
      j+=1
    r=r[:j]+[i]+r[j:]
print(r)
程序运行后,输出的结果为 (  )
A.[3,6,10] B.[6,11,2] C.[6,3,10] D.[10,3,6]
答案 D
二、非选择题(本大题共4个小题,共26分)
13.数据在网络传输中,带宽是宝贵的资源,通过压缩传输的字符串,可以减少数据量,从而加快传输速度,节省带宽资源。现有一种字符压缩方法描述如下:对于连续的若干个相同的子串“X”会压缩为“[DX]”的形式(D是一个整数且1≤D≤99),如字符串“ABABABAB”就压缩为“[4AB]”或者“[2[2AB]]”,类似于后面这种压缩之后再压缩的称为二重压缩。如果是“[2[2[2AB]]]”则是三重的。现给出一串压缩后的结果,并对其进行解压缩。
思路:先找出每个左括号的位置,然后从后往前枚举,找出每一个括号内要解压的子串以及要解压的次数,将子串解压后得到一个新串,重复操作,得到最终的解压缩结果。
例如:[2[2[2AB]]]→[2[2ABAB]]→[2ABABABAB]→ABABABABABABABAB。
(1)已知采用上述压缩方法得到的压缩结果是“[2Z[2DB]]”,则解压缩结果为     。
(2)根据上述描述,小明利用 Python 设计了一个解压缩程序,请在划线处填入合适的代码。
start = []
s=input("请输入压缩结果:")
for i in range(len(s)):
  if s[i]=="[":
    start.append(i)
for i in range(len(start)-1,-1,-1):
  num=0;temp=" "
  ①    
  while j    if "0"<=s[j]<="9":
      num=num*10+int(s[j])
    else:
      ②   
    j+=1
  ans=num*temp
  s=s[:start[i]]+③     #重新构造字符串
print("解压结果为:"+s)
答案 (1)ZDBDBZDBDB (2)①j=start[i]+1 ②temp+=s[j] ③ans +s[j+1:]
14.腾讯通过 QQ 等级来衡量用户的活跃情况。QQ 等级计算规则如下:
①用户当天在线两个小时,记为活跃 1 天;半小时及以上、两小时以下则记为活跃 0.5 天。
②根据累计活跃天数对应不同 QQ 等级,如表所示,0 级至 1 级需活跃 5 天,1 级至 2 级需活跃7天,依此类推。
③每升1级,用户可以获取1个△,4 个△兑换1个◇,4个◇兑换1个○,4 个○兑换 1个☆。
级别 图标 累计活跃天数
0级 0天
1级 △ 5天
2级 △△ 12天
3级 △△△ 21天
4级 ◇ 32天
5级 ◇△ 45天
(1)小张的 QQ 等级图标为○◇◇◇△△,则小张 QQ 等级的级别是    。
(2)“log.txt”文件中逐行记录了某位用户每天的在线时长(以小时为单位),编程实现读取文件内容并计算,按☆○◇△的顺序输出用户的 QQ 等级图标,请在划线处填入合适的代码。
f=open('log.txt')
data=[]
active=0
icon=["☆","○","◇","△"]
#逐行读取'log.txt'文件中的数据,依次添加到 data 列表中,如data=[1.9, 2.3,11.5,3.1,2.8,5.2……]代码略
#计算用户的活跃天数
for i in range(len(data)):
  if data[i] >= 2:
    active+=1
  elif data[i]>=0.5:
    ①   
#计算用户等级
base=5
level=0
while active >=base:
  level+=1
  ②    
  base = base + 2
#将等级换算为图标
s = " "
while level !=0:
  r = level % 4
  s = str(r) + s
  ③   
n=len(s)
ans=" " 
start=4-n
for i in range(n):
  ans +=④   
print(ans)
答案 (1)30 (2) ①active+=0.5
②active=active-base ③level=level∥4
④icon[start+i]*int(s[i])
15.每个人进、出馆的时间用一个长度为11的字符串表示,例如“08:05-08:45”表示进馆时间为8点05分,出馆时间为8点45分。现要求统计当天馆内人数超过指定人数的总时长,当天在馆人数最多时刻及在馆人数。
(1)8点01分到8点08分的进出馆人数如下表所示:
分钟 01 02 03 04 05 06 07 08
进馆人数 5 0 4 2 1 3 1 2
出馆人数 0 1 1 1 6 3 2 2
在馆人数最多时刻为    。
(2)每个参观者进入场馆和出馆时间保存在“参观记录.txt”文件中,编写Python程序,请将程序补充完整。
rs=[0]*540 #存储早上8点至下午5点每分钟的在馆人数
f=open("参观记录.txt",encoding="utf-8")
n=0
for sj in f :
  m1=int(sj[:2])*60+int(sj[3:5])-480
#将入馆时间转换为上午8点以后的分钟数
  m2=int(sj[6:8])*60+int(sj[9:11])-480
  rs[m1]+=1
  ①   
sp =int(input("请输入指定人数:"))
totrs=imax=sumrs=0
itime=""
for i in range(540):
  ②   
  if totrs>sp:
    ③   
  if totrs>imax:
    imax=totrs
    itime=str(i∥60+8)+":"+str(④   )
print("超过指定人数的总时长:" + str(sumrs) + "分钟")
print("在馆人数最多时刻为:" + itime + ",共" + str(imax) + "人")
答案 (1)8 (2)①rs[m2]-=1
②totrs+= rs[i] ③sumrs+=1 ④i%60
16.挖金矿游戏。在一个8行8列的矩阵中,矿工位于第1行第1列的格子,n个金矿随机分布在第1行下面的各个格子中,每个金矿的横坐标依次保存在x数组,纵坐标保存在y数组。矿工收集金矿方法:先确定每行最左边和最右边金矿的坐标,对于同一行的金矿,矿工先移动到最左边金矿正上方,再执行向下x步的指令进行挖矿,接着从该行左边第2个金矿开始一直挖到最右边。该行完成后,再依次挖下方各行的金矿。
下图a所示的金矿(图中黑色方块)分布图,按右侧所示的指令,可以收集全部金矿。
(1)现有4*4的金矿分布图如图b所示,矿工在左上角位置,写出矿工按规则获得所有金矿的指令(指令之间用逗号或空格隔开)        。
(2)编写程序,按顺序输出指令,使矿工按照规则得到所有金矿,将空白处填写完整。
x=[2,2,5,5,5,8] #各金矿行号,从小到大升序排列
y=[1,2,4,5,8,6] #各金矿列号,同一行金矿,列号从小到大升序排列
n=len(x) #金矿数量
px=py=1 #矿工初始位置行号和列号
i=0
while i  beg=i   
  while i    i+=1
  if y[beg]    print("左"+str(py-y[beg]))
  elif y[beg]>py:
    print("右"+str(①    ))
  print("下"+str(x[beg]-px))
  print("挖矿")
  for k in range(②    ):
    print("右"+str(y[k]-y[k-1]))
    print("挖矿")
  px=x[beg]
  ③    
  i+=1
答案 (1)下1 挖矿 下2 挖矿 右3 挖矿 或下1,挖矿,下2,挖矿,右3,挖矿
(2)①y[beg]-py ②beg+1,i+1 ③py=y[i]验收卷(三) 算法的程序实现
(考试时间40分钟;满分50分)
一、选择题(本大题共12小题,每小题2分,共24分,在每小题给出的四个选项中,只有一个符合题目要求,多选、少选、不选均不得分)
1.Python 表达式 int(19/4)-25%3**2 的值是(  )
A.-3 B.-2
C.2 D.3
2.下列 Python 表达式中,值为 True 的是 (  )
A."ac" in "abcabc" B.9/3**2!=1
C.abs(-4.3)>9∥2 D."12"=="123456"[1:3]
3.下列Python表达式中,值为True的是 (  )
A.2**3==64**0.5
B.985>211 and not "book"<"pen"
C."Chat" in "chatGPT"
D.len("Python")>6
4.下列表达式的结果为 True 的是 (  )
A.not "a" in "apple"
B. 2023%1000∥4==23
C. "t" in ["tomato","bear","banana"]
D. "abc"*2>="abca"
5.已知字典rec中存储着某超市部分水果的类别编码,其值为rec={"01":"苹果","02":"人参果 ","03":"阳光玫瑰葡萄","04":"红心火龙果","05":"果冻橙"},现要在字典rec中增加一个键为 "06",值为"甜蜜柚"的元素,下列Python语句能实现的是 (  )
A.rec[06]="甜蜜柚"
B. rec["06"]="甜蜜柚"
C. rec["06"]={"甜蜜柚"}
D. rec["06"]="06":"甜蜜柚"
6.普通车辆高速公路超速罚款规则如下:(1)超过规定时速10%(含10%)以内,暂不处罚;(2)超过规定时速10%以上未达50%(含50%)的,处以200元罚款;(3)超过规定时速50%以上的,处以 2000元罚款。若用变量v表示高速公路规定时速,变量vt表示车辆行驶时速,变量k表示车辆的罚款,则下列程序段无法正常实现车辆行驶时速vt和罚款k之间关系的是 (  )
A.if vt<=v*1.1:
   k=0
 elif vt<=v*1.5:
   k=200
 else:
   k=2000
B.if v*1.1   k=200
 else:
   k=0
   if vt>v*1.5:
  k=2000
C.k=0
 if vt>v*1.1:
   k=200
 elif vt>v*1.5:
   k=2000
D.k=2000
 if vt<=v*1.1:
   k=0
 elif vt <=v*1.5:
   k=200
7.根据国家标准,室内空气质量指数的正常范围为0.5~2.5,如果空气质量指数大于2.5,则表明空气质量较差,空气质量指数小于0.5,表明空气质量较好,下列选项能正确表示这三种情况的是(  )
A.if zs>2.5:
   print("较差")
 elif 0.5   print("正常")
 else:
   print("较好")
B.if 2.5>zs>0.5:
   print("正常")
 elif zs<0.5:
   print("较好")
 else:
   print("较差")
C.if zs>2.5:
   print("较差")
 elif not zs>0.5:
   print("较好")
 else:
   print("正常")
D.if zs<0.5:
   print("较好")
 elif not zs>2.5:
   print("正常")
 elif zs>2.5:
   print("较差")
8.有如下 Python 程序:
s="abcdefghijk";res=0
for i in range(1,len(s),2):
  res+=ord(s[i])-ord(s[i-1])
print(res)
运行该程序,输出的结果是(  )
A.5 B.6 C.9 D.10
9.“回文串”是一个正读和反读都一样的字符串。下列Python段的功能是:输入一个字符串,判断该字符串是否为回文串,若是则输出“Yes”,否则输出“No”。
s=input("请输入字符串:")
i=0
j=len(s)-1
flag=True
while i  if s[i]==s[j]:
    i+=1
    ①   
  else:
    flag=False
if ②    :
  print("Yes")
else:
  print("No")
则程序划线①②③处应填入的语句为(  )
A.①j+=1 ②flag B.①j+=1  ②not flag
C.①j-=1 ②flag D.①j-=1  ②not flag
10.有如下Python程序段:
a=[3,5,2,4,1]
sum1=m=a[0]
for i in range(1,len(a)):
  if a[i]     m=a[i]
     sum1+=m
执行该程序后,sum1的值为(  )
A.6 B.9 C.11 D.15
11.用Python程序处理图像文件“chenchen.jpg”,该图像颜色位深度为24bit,图像如图所示,程序代码如下:
#导入PIL、np和matplotlib.pyplot库,代码略
img=np.array(Image.open("chenchen.jpg").convert("L"))
rows,cols=img.shape
for i in range(rows):
  for j in range(cols):
    if (img[i,j]>128):
      img[i,j]=1
    else:
      img[i,j]=0
plt.imshow(img,cmap="gray")
plt.show()
下列说法正确的是(  )
A.待处理图像的文件名为"chenchen"
B.处理后的图像像素数将增加
C.将加框处语句中的“>”改为“<=”,则处理后的图像中黑白色将互换
D.将加框处语句中 128 改为 188,则处理后图像中的黑色部分将减少
12.某Python程序如下:
s=[3,3,3,6,6,8,11,11,9,4,2,5]
r=[]
for i in range(1,len(s)-1):
  if not(s[i-1]
s[i]>s[i+1]):
    if s[i-1]==s[i]:
      continue
    j=len(r)-1
    while j>=0 and s[i]<=s[r[j]]:
      j-=1
    if j==len(r)-1 or j==-1:
      j+=1
    r=r[:j]+[i]+r[j:]
print(r)
程序运行后,输出的结果为(  )
A.[3,6,10] B.[6,11,2] C.[6,3,10] D.[10,3,6]
二、非选择题(本大题共4个小题,共26分)
13.数据在网络传输中,带宽是宝贵的资源,通过压缩传输的字符串,可以减少数据量,从而加快传输速度,节省带宽资源。现有一种字符压缩方法描述如下:对于连续的若干个相同的子串“X”会压缩为“[DX]”的形式(D是一个整数且1≤D≤99),如字符串“ABABABAB”就压缩为“[4AB]”或者“[2[2AB]]”,类似于后面这种压缩之后再压缩的称为二重压缩。如果是“[2[2[2AB]]]”则是三重的。现给出一串压缩后的结果,并对其进行解压缩。
思路:先找出每个左括号的位置,然后从后往前枚举,找出每一个括号内要解压的子串以及要解压的次数,将子串解压后得到一个新串,重复操作,得到最终的解压缩结果。
例如:[2[2[2AB]]]→[2[2ABAB]]→[2ABABABAB]→ABABABABABABABAB。
(1)已知采用上述压缩方法得到的压缩结果是“[2Z[2DB]]”,则解压缩结果为     。
(2)根据上述描述,小明利用 Python 设计了一个解压缩程序,请在划线处填入合适的代码。
start = []
s=input("请输入压缩结果:")
for i in range(len(s)):
  if s[i]=="[":
    start.append(i)
for i in range(len(start)-1,-1,-1):
  num=0;temp=" "
  ①    
  while j    if "0"<=s[j]<="9":
      num=num*10+int(s[j])
    else:
      ②   
    j+=1
  ans=num*temp
  s=s[:start[i]]+③     #重新构造字符串
print("解压结果为:"+s)
14.腾讯通过 QQ 等级来衡量用户的活跃情况。QQ 等级计算规则如下:
①用户当天在线两个小时,记为活跃 1 天;半小时及以上、两小时以下则记为活跃 0.5 天。
②根据累计活跃天数对应不同 QQ 等级,如表所示,0 级至 1 级需活跃 5 天,1 级至 2 级需活跃7天,依此类推。
③每升1级,用户可以获取1个△,4 个△兑换1个◇,4个◇兑换1个○,4 个○兑换 1个☆。
级别 图标 累计活跃天数
0级 0天
1级 △ 5天
2级 △△ 12天
3级 △△△ 21天
4级 ◇ 32天
5级 ◇△ 45天
(1)小张的 QQ 等级图标为○◇◇◇△△,则小张 QQ 等级的级别是    。
(2)“log.txt”文件中逐行记录了某位用户每天的在线时长(以小时为单位),编程实现读取文件内容并计算,按☆○◇△的顺序输出用户的 QQ 等级图标,请在划线处填入合适的代码。
f=open('log.txt')
data=[]
active=0
icon=["☆","○","◇","△"]
#逐行读取'log.txt'文件中的数据,依次添加到 data 列表中,如data=[1.9, 2.3,11.5,3.1,2.8,5.2……]代码略
#计算用户的活跃天数
for i in range(len(data)):
  if data[i] >= 2:
    active+=1
  elif data[i]>=0.5:
    ①   
#计算用户等级
base=5
level=0
while active >=base:
  level+=1
  ②    
  base = base + 2
#将等级换算为图标
s = " "
while level !=0:
  r = level % 4
  s = str(r) + s
  ③   
n=len(s)
ans=" " 
start=4-n
for i in range(n):
  ans +=④   
print(ans)
15.每个人进、出馆的时间用一个长度为11的字符串表示,例如“08:05-08:45”表示进馆时间为8点05分,出馆时间为8点45分。现要求统计当天馆内人数超过指定人数的总时长,当天在馆人数最多时刻及在馆人数。
(1)8点01分到8点08分的进出馆人数如下表所示:
分钟 01 02 03 04 05 06 07 08
进馆人数 5 0 4 2 1 3 1 2
出馆人数 0 1 1 1 6 3 2 2
在馆人数最多时刻为    。
(2)每个参观者进入场馆和出馆时间保存在“参观记录.txt”文件中,编写Python程序,请将程序补充完整。
rs=[0]*540 #存储早上8点至下午5点每分钟的在馆人数
f=open("参观记录.txt",encoding="utf-8")
n=0
for sj in f :
  m1=int(sj[:2])*60+int(sj[3:5])-480
#将入馆时间转换为上午8点以后的分钟数
  m2=int(sj[6:8])*60+int(sj[9:11])-480
  rs[m1]+=1
  ①   
sp =int(input("请输入指定人数:"))
totrs=imax=sumrs=0
itime=""
for i in range(540):
  ②   
  if totrs>sp:
    ③   
  if totrs>imax:
    imax=totrs
    itime=str(i∥60+8)+":"+str(④   )
print("超过指定人数的总时长:" + str(sumrs) + "分钟")
print("在馆人数最多时刻为:" + itime + ",共" + str(imax) + "人")
16.挖金矿游戏。在一个8行8列的矩阵中,矿工位于第1行第1列的格子,n个金矿随机分布在第1行下面的各个格子中,每个金矿的横坐标依次保存在x数组,纵坐标保存在y数组。矿工收集金矿方法:先确定每行最左边和最右边金矿的坐标,对于同一行的金矿,矿工先移动到最左边金矿正上方,再执行向下x步的指令进行挖矿,接着从该行左边第2个金矿开始一直挖到最右边。该行完成后,再依次挖下方各行的金矿。
下图a所示的金矿(图中黑色方块)分布图,按右侧所示的指令,可以收集全部金矿。
(1)现有4*4的金矿分布图如图b所示,矿工在左上角位置,写出矿工按规则获得所有金矿的指令(指令之间用逗号或空格隔开)        。
(2)编写程序,按顺序输出指令,使矿工按照规则得到所有金矿,将空白处填写完整。
x=[2,2,5,5,5,8] #各金矿行号,从小到大升序排列
y=[1,2,4,5,8,6] #各金矿列号,同一行金矿,列号从小到大升序排列
n=len(x) #金矿数量
px=py=1 #矿工初始位置行号和列号
i=0
while i  beg=i   
  while i    i+=1
  if y[beg]    print("左"+str(py-y[beg]))
  elif y[beg]>py:
    print("右"+str(①    ))
  print("下"+str(x[beg]-px))
  print("挖矿")
  for k in range(②    ):
    print("右"+str(y[k]-y[k-1]))
    print("挖矿")
  px=x[beg]
  ③    
  i+=1

展开更多......

收起↑

资源列表