第三章核心素养测评卷(含答案) 2025-2026学年高中信息技术 必修1 数据与计算

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

第三章核心素养测评卷(含答案) 2025-2026学年高中信息技术 必修1 数据与计算

资源简介

第三章核心素养测评卷
一、 选择题(每小题列出的四个选项中只有一个是符合题目要求的)
1. 有如下Python程序段:
a="3278"
new=a[2∶∶-1]
则new的值为( C )
A. "78" B. 78
C. "723" D. 723
【解析】 本题考查字符串数组知识,Python字符串数组中,下标从0开始,2表示第三个字符“7”,-1表示方向,C正确。
2. 有如下Python程序段:
def search(b,k):
  for i in range(len(b))∶
    if b[i]==k∶
       return i
  return -1
a=[65,61,8,58,89,8,3,66,79]
search(a,8)
执行该程序段后,输出的结果是( B )
A. -1 B. 2
C. 3 D. 5
【解析】 本题考查Python代码及自定义函数的知识。自定义函数的功能是返回列表a中第一个等于k的下标,因此返回第一个8的下标2,B正确。
3. 有如下 Python 程序段:
p="Tel-321"
c=""
for ch in p:
  if ch>= "0" and ch<= "9":
    c+=str(9-int(ch))
  elif ch>= "a" and ch<= "z":
    c+=chr(ord(ch)-ord("a")+ord("A"))
  else:
    c+=ch
print(c)
程序段运行后,输出的结果是( B )
A. tEL-678 B. TEL-678
C. TEL-321 D. tEL-321
【解析】 本题考查信息加密的Python程序实现。读程序可知,在遍历字符串的过程中,若遇到数字0~9,则加密变成9减去该数;若遇到字母a~z,加密后变成大写字母;若遇到其他字符,则直接连接。因此,当p="Tel-321"加密之后得到c="TEL-678",B正确。
4. 有如下Python程序段,执行该程序段后,变量num的值为( A )
num=40
if num<60∶
  num=60
if num==60∶
  num=num+20
if num>80∶
  num+=20
else∶
  num=40
print(num)
A. 40 B. 60
C. 80 D. 100
【解析】 本题主要考查Python选择语句。num的初始值为40,满足num<60,执行num=60,执行后满足num==60,执行num=num+20,此时num=80,不满足num>80,执行 num=40,故最后变量num=40。
5. 函数abs( )的功能是( C )
A. 求最大值 B. 求最小值
C. 求绝对值 D. 求和
【解析】 本题主要考查函数abs()的功能。函数abs()的功能是求绝对值。
6. 有如下Python程序段:
s=0
for i in range(1,11,2):
  s+=i
print(s)
执行该段代码后,输出的值是( A )
A. 25 B. 30
C. 45 D. 55
【解析】 本题考查循环语句知识。s=1+3+5+7+9=25。
7. 某Python程序如下:
a = input("输入数字字符串:")
s = ""
flag=1
for i in range(0,len(a)-1,2)∶
  d1=int(a[i])
  d2= int(a[i+ 1])
  t=d1+flag*d2
  if t < 0∶
    t+= 10
  elif t>= 10∶
    t-=10
  s=str(t)+s
  flag=-flag
if len(a)% 2==1∶
  s+=a[len(a)-1]
print(s)
程序运行时,若输入“48135”,则输出的结果是( C )
A. 528 B. 582
C. 825 D. 285
【解析】 本题考查字符串处理及加密知识。由代码可知,将字符a中的数字每两个字符为一组进行分组处理,t = d1 + flag * d2,且flag的值将变号。然后将t逆序连接到字符s中。不能成对的字符按顺序连接到字符串s中。计算如下:第一组,flag=1,4+8=12,因此t=2,s=“2”;第二组,flag=-1,t=1-3=-2,处理后t=8,故s=“82”。最后一个字符是“5”,按顺序进行连接,故s=“825”,C
正确。
8. 某Python程序如下:
s=input()
k=0; n=0
for x in s∶
  if "a" <= x and x <= "g"∶
    k=(ord(x)-ord("a") + 5) % 7 + 1
  elif "1" <= x and x<= "5"∶
    n=int(x)
keynum=n*7+k
print(keynum)
运行程序时,若输出的结果为28,则可能的输入是( C )
A. 3yAc4 B. b3a4A
C. a4kb3 D. ha9k3
【解析】 本题考查Python语言的循环和分支语句以及字符串处理等基础知识。根据Python代码可知,在for语句中,变量x逐个枚举字符串s中的单个字符,若x属于范围“a”~“g”的小写英文字符时,计算该字符和字母“a”之间的ASCII码的差值,然后加上5之后%7,最后再加1。若x是1~5的数字字符,则将其转换为整数类型。最终程序自动输出n*7+k的值,由于前面的k和n可能被后面的值所覆盖,例如B,字符“b3”的组合恰好能令keynum的值为28,但后面的“a4”会覆盖k和n的值。而C中的字符“b3”出现在最后位置,因此不会被覆盖,最终
n=3,k=7,故keynum的值为28,C正确。
9. 高铁购票标准如下:身高达到或超过1.5米的乘客购买全价票;身高1.2米及以下的儿童免票;身高超过1.2米但不足1.5米的儿童可享受半价优惠。用下面的Python程序实现上述算法,则第4行横线上的代码应为( C )
h=float (input("请输入身高(米): "))
if h<=1.2:
  print(“免票”)
elif     :
  print("请购买半价票")
else:
  print("请购买全价票")
A. h>1.5 B. h>=1.5
C. h<1.5 D. h<=1.5
【解析】 本题主要考查Python多分支结构的应用。身高高于1.2米但不到1.5米的儿童可享受半价优惠,因此此处的elif判断条件是h<1.5。
10. 下列Python程序的运行结果为( A )
x=[ 偶数 , 奇数 ]
for i in range (3):
  print(x[i%2])
A. 偶数 奇数 偶数 B. 奇数 偶数 奇数 C. 偶数 偶数 奇数 D. 奇数 奇数 偶数
【解析】 本题主要考查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)。变量i依次取0、1、2,对应的x[i%2]分别是x[0]、x[1]、x[0],因此输出结果是偶数、奇数、偶数。
11. 超市进行促销活动,若单笔消费金额满200元打九折,单笔消费金额满300元打八折(单笔消费仅享受一次打折优惠)。设顾客单笔消费s元,则下列Python程序能正确描述超市活动的是( C )
A. if s>=300∶
  s=s*0.8
else∶
  s=s*0.9
B. if s>=300∶
  s=s*0.8
if s>=200∶
  s=s*0.9
C. if s>=300∶
  s=s*0.8
elif s>=200∶
  s=s*0.9
D. if s>=200∶
  s=s*0.9
elif s>=300∶
  s=s*0.8
【解析】 本题考查if语句及逻辑判断知识。A项没有200的判断;B项无八折;D项当输入350时,错误判断为九折。
12. 有Python程序如下:
d=[1,6,2,9,3,5,2]
k,s=1,0
m=len(d)//2
for i in range(m)∶
  s+=d[m+k]-d[m-k]
  k+=1
print(s)
运行该程序后,输出的结果是( A )
A. 1 B. -1
C. 14 D. -14
【解析】 本题考查for循环及列表知识。由模拟计算可知,d=[1,6,2,9,3,5,2]。
k m m+k m-k d[m+k] d[m-k] s
初值 1 3 4 2 0
第一次 运行 1 3 4 2 3 2 1
第二次 运行 2 3 5 1 5 6 0
第三次 运行 3 3 6 0 2 1 1
13. 回文是指从左至右读和从右至左读结果都一样的字符串,如“洪福尽享尽福洪”,判断某行诗句是否为回文诗的程序代码如下:
s=input(“请输入一句古诗∶”)
n=len(s)
if     ∶
  print(s,“是回文诗!”)
else∶
  print(s,“不是回文诗!”)
为实现上述功能,在横线上填入代码,下列表达式中,不能实现判断是否为回文诗的是( B )
A. s==s[∶∶-1]
B. s==s[-1∶-n+1]
C. s[∶n//2]==s[∶(n-1)//2∶-1]
D. s[∶n//2]==s[∶-(n//2)-1∶-1]
【解析】 本题主要考查Python分支结构的应用。切片操作基本表达式为object[start_index:end_index:step]。step:正负数均可,其绝对值大小决定了切取数据时的“步长”,而正负号决定了“切取方向”,正表示“从左往右”取值,负表示“从右往左”取值。start_index:表示起始索引(包含该索引对应值),该参数省略时,表示从对象“端点”开始取值。end_index:表示终止索引(不包含该索引对应值),该参数省略时,表示一直取到数据“端点”。s[-1:-n+1]="",因此s==s[-1:-n+1]不能实现回文诗的判断,其余选项均可以判断。
14. 居民身份证号码由6位地址码、8位出生日期码、3位顺序码和1位校验码组成。倒数第二位是性别代码,奇数代表男性,偶数代表女性。其格式如图所示:
第14题图
列表IDlist存储了某校所有学生的居民身份证号码。如要分别统计1—12月出生的人数,Python程序代码如下:
count=[0] * 12
for i in     ∶
  mon=int(i[10∶12])   #从居民身份证号码中提取月份
     
for i in range(12)∶
  print(i+1,“月份人数为”,count[i])
为实现上述功能,横线上自上而下依次填入的代码如下:
①IDlist
②range(len(IDlist))
③count[mon-1]+=1
④count[mon]+=1
横线上的代码顺序正确的是( D )
A. ②③ B. ②④
C. ①④ D. ①③
【解析】 本题主要考查Python程序的执行与调试。列表IDlist存储了某校所有学生的居民身份证号码,第一空依次遍历列表IDlist,故填IDlist。由第二个for循环可知,count[i]中保存的是i+1月份的人数,因此第二空填count[mon-1]
+=1,D正确。
15. 以下程序的横线上应填入的语句是( D )
c=0
list=[55,82,70,46,53,65,33,87,73,67]
for i in range(10)∶
  if     ∶
    c = c + 1
print(“列表list中小于60的数的个数为:”,c)
A. i<60 B. list[i-1]<60
C. list[i+1]<60 D. list[i]<60
【解析】 本题主要考查Python程序的调试。分析程序,变量i依次取0、1、2…9,列表的索引从0开始,即i可以作为列表list的索引,该程序实现找出列表list中小于60的数的个数,因此if判断条件是list[i]<60。
16. 判断一个自然数x是否能被57整除,下列表达式中,正确的是( B )
A. x/57==x% 57
B. x/57==int(x/57)
C. x//57==int(x/57)
D. x% 57
【解析】 本题主要考查Python表达式的运算。“/”是除运算符,int() 函数用于将一个字符串或数字转换为整型,因此表达式x/57==int(x/57)可以判断一个自然数x是否能被57整除,B正确。
[答题区]
序号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
答案 C B B A C A C C C A C A B D D B
二、 非选择题
17. 亲和数是一对整数,其中每个数都是另一个数的真因数之和。真因数是指除了自身以外的所有因数,例如整数6的真因数有1,2,3(注:真因数表示有多个相同因数,只能累加一次)。例如,220和284是一对亲和数,因为220的真因数之和是284,而284的真因数之和是220。以下Python程序用于在指定范围内查找所有亲和数对。程序运行结果如图所示。
第17题图
def divisors(n):
  s = 1
  for i in range(2,int(n ** 0.5)+1):
    if n % i == 0:
      s += i
      if  ① :
        s += n // i
  return s
def find(start,end):
  pairs = []
  for i in range(start,end+1):
    ds = divisors(i)
    if ds > i and ds<=end and  ② :
      pairs.append( ③ ) # append表示在列表pairs末尾增加元素
return pairs
start = int(input( ))
end = int(input( ))
pairs = find(start,end)
for pair in pairs:
  print("亲和数对:", pair[0],"和", pair[1])
请回答下列问题:
(1)请在横线上填入合适的代码:① i! = n//i ,② divisors(ds) == i ,③ [i,ds] 或(i,ds) 。
(2)若删除程序加框处语句,输入start的值为1,end的值为2000,则输出 4 对亲和数对。
【解析】 本题考查枚举算法的应用。(1)①计算真因数时,需要同时添加两个真因数,因此在 s += n //i 前需要判断 i 不是其自身整除的结果 n // i,不是时,才计入s,故此处应为i! = n//i;②检查是否找到了一个亲和数对,故此处应为divisors( ds) == i;③将亲和数对添加到列表 pairs,故此处应为[i, ds]。(2)加框处的语句是 ds>i,它保证在诸如(a,b)的亲和数添加时a < b,避免了重复的亲和数对添加。如果删除此条件语句,将会认为220和284、284和220是两对,故将会输出4对亲和数对。
18. 一家商场正在降价促销。如果购物金额小于或等于10元,能享受10%的折扣;如果购买金额大于10元,能享受20%的折扣。编写一个程序,询问购买价格,再显示打折后的最终价格。请在横线上填入合适的代码:① float ,② price<=10 ,③ 1-0.1 ,④ else ,⑤ 1-0.2 。
price=  ①  (input("购物金额:”))#输入购物金额
if   ②  : #价格小于或等于10元,享受10%的折扣
  price=price*(  ③  )
  ④  :#价格大于10元,享受20%的折扣
  price =price*(  ⑤  )
print("最终价格为:",price,"元")  #输出最终价格
【解析】 本题主要考查Python程序设计。购物金额可能会有小数,因此需要使用float函数转换为浮点型,故①处填float。价格小于或等于10元,享受10%的折扣,故②处if判断条件是price<=10。享受10%的折扣,即原价的90%,故③处填1-0.1。④处对应else分支部分,故填else。如果购物金额大于10元,能享受20%的折扣,同理,⑤处填1-0.2。
19. 根据AQI值判断城市的空气质量。若城市的AQI值(整数)不超过100,则空气质量优良,否则空气质量不佳。当输入的AQI值为-1时,则退出程序。不要更改程序结构,在程序中的①②③④四处填入正确的语句。
city = input("请输入城市名:")
AQI = int(input("请输入空气质量指数AQI的值:"))
  ①   AQI != -1:
  if   ②  :
    print(city,"的空气质量优良。")
    ③  :
    print(city,"的空气质量不佳。")
  city=input("请输入城市名:")
  AQI=  ④  (input("请输入空气质量指数AQI的值:"))
(1)①处的语句为( B )
A. if B. while
C. for D. def
(2)②处的语句为( B )
A. AQI>=100 B. AQI<=100
C. AQI>100 D. AQI<100
(3)③处的语句为( D )
A. elif B. break
C. if D. else
(4)④处的语句为( A )
A. int B. float
C. str D. else
【解析】 本题主要考查Python的综合应用。(1)当输入的AQI值为-1时,则退出程序,否则持续输入,故①处为while。(2)若城市的AQI值(整数)不超过100,则空气质量优良,否则空气质量不佳。故②处为AQI<=100。(3)③处为else。(4)input()函数接收的是字符,故要转换为整型数据,所以④处应为int。
20. 列表nums有n(n>2)个整型元素,现要查找出缺失的第一个正整数并输出。若1 ~ n 中没有缺失某个正整数,则输出n+1。例如nums=[3,2,-1,0],则缺失的第一个正整数为1。例如,nums=[1,2,3,4,5,6],则缺失的第一个正整数为7。实现该功能的部分程序段如下:
def findz(nums)∶
  n=len(nums)
  i=0
  while i    if 1 <= nums[i] <= n∶
      p = nums[i] - 1
      if∶
        nums[p], nums[i] = nums[i], nums[p]
        i-=1
    i+=1
  for i in range(n)∶
    if  ①  ∶
      return i + 1
  return  ②  
#列表nums中存储了n个整型元素,代码略
#调用函数findz,并输出结果,代码略
(1)若nums=[-5,4,3,-1,0,1],则缺失的第1个正整数为 2 。
(2)方框中应填入的代码为( B )(单选,填字母)。
A. nums[p] > 0
B. nums[p] != nums[i]
C. nums[p] > nums[i]
(3)请在横线上填入合适的代码:① nums[i]!=i+1 ,② n+1 。
【解析】 本题考查Python语言基础、列表及枚举算法知识。(1)根据题意可知,按照正整数升序排序后的nums=[1, -1, 3, 4, 0, -5],因此缺失的第一个正整数为2。
(2)根据代码可知变量p用于记录按照正整数升序排序后的列表nums的索引值,如果列表的第一个元素(下标为0)的值为1,第二个元素(下标为1)的值是2,不需要交换,否则就将其交换到正确的位置去,例如将3交换到索引号为2的位置。如nums=[3,2,-1,0],按照正整数升序排序后,nums应该是[-1, 2, 3, 0],此时我们可以发现在1~4之间缺失的第一个正整数为1,也就是枚举nums的列表下标后,可以发现下标i(例如0)和列表元素值i+1(1)不相等,因此就可以确定第一个下标0的值1缺失了,以此类推。
(3)①nums[i]为排序后的列表元素值,而i+1为按照正整数升序排序后的元素索引值。例如:检测到列表索引值为0的元素值为1,索引值为1的元素值为2,说明不缺正整数,可以继续往下枚举索引值i,否则说明缺失对应的元素值,并返回该元素的值i+1。②枚举所有索引后,没有返回任何值,说明在1~n中没有缺失某个正整数,此时按照题意应该输出n+1。
21. 某APP依据手机每秒钟屏幕的亮熄情况,记录当天00:00:00至23:59:59手机持续亮屏的各时间段,并生成手机亮屏日志文件。若用0表示熄屏,1表示亮屏,某天前10秒的屏幕状态为“0011011110”,则日志中记作“00:00:02,00:00:03,00:00:05,00:00:08”,表示第1个持续亮屏时间段的开始与结束时间点分别为“00:00:02”和“00:00:03”,时长为2秒,第2个持续亮屏时间段时长为4秒。
编写Python程序读取某天的日志文件,计算并输出手机当天亮屏的总时长、单次持续亮屏时长的最大值和相应的时间段(若相应时间段有多个,则按时间顺序全部输出)。
(1)如图所示为某天日志文件记录的前6个时间点,可知当天10:00:00该手机处于 B (单选,填字母)。
A.亮屏状态 B.熄屏状态
第21题图
(2)定义函数 tosec(x),参数x是形如“08:00:00”的字符串,表示时间点。该函数返回时间点x是当天的第几秒(约定00:00:00为当天第0秒)。请在横线上填入合适的代码: int(x[6:8]) 或 int(x[6:]) 。
def tosec(x):
  #从时间点x中提取时、分,转为整型后分别存储在变量h,m中,代码略
  s=     
  n=h * 3600 + m * 60 + s
  return n
(3)定义函数getdata(t),该函数的功能是依次计算每个持续亮屏时间段的时长并存入列表c,对应时间段存入列表d,返回c和d。请在横线上填入合适的代码:
 tmp = tosec(t[i+1])- tosec(t[i]) + 1 。
def getdata(t):
  i=0
  c = [];d = []
  while i <= len(t):
         
    c.append(tmp) #在列表c末尾添加一个元素
    d.append(t[i] + "—" + t[i+1])
    i+=2
  return c,d
(4)主程序代码如下,请在横线上填入合适的代码: c[i]==cmax 。
#读取日志文件中各时间点,依次存入列表t,t形如["08:00:00",……],代码略
c,d = getdata(t)
tot=0;cmax=0
res = ""
for i in range(len(d)):
  tot += c[i]
  if c[i]> cmax:
    cmax=c[i]
    res = d[i]
  elif      :
    res = res + "," + d[i]

输出当天亮屏的总时长tot
输出单次持续亮屏时长的最大值cmax和相应的时间段res
代码略
【解析】 本题考查Python语言基础及枚举算法知识及切片、自定义函数等知识。
(1)根据图中给出的样例可知,每两个数据为一组,逗号前后分别是每次手机亮屏时间段的开始与结束时间点,由数据“09:00:00,09:59:59”得知,09:59:59后恰好是熄屏时间段,而下一段的亮屏时间开始于10:05:03,因此当天10:00:00该手机处于熄屏状态。
(2)根据代码可知,自定义函数tosec(x)的功能是返回时间点x是当天的第几秒(00:00:00为当天第0秒),参数x是形如“08:00:00”的字符串,表示时间点,s表示秒,因此该值可以从字符x的第6,7位切片得到,并转换为相应的整型即可,故此处答案是int(x[6:8])。
(3)函数getdata(t)的功能是依次计算每个持续亮屏时间段的时长并存入列表c,由下面的语句“c.append(tmp)”可知横线上需要关于tmp的表达式,结合自定义函数tosec(),故此处答案是tmp = tosec(t[i+1])- tosec(t[i]) + 1。
(4)题干规定,计算单次持续亮屏时长的最大值和相应的时间段(若相应时间段有多个,则按时间顺序全部输出),因此若存在多段最长持续亮屏时长,要求全部输出,结合代码可知此处的表达式是c[i]==cmax。(共36张PPT)
第三章核心素养测评卷
信息技术 必修1 数据与计算
一、 选择题(每小题列出的四个选项中只有一个是符合题目要求的)
1. 有如下Python程序段:
a="3278"
new=a[2∶∶-1]
则new的值为(  )
A. "78" B. 78
C. "723" D. 723
【解析】 本题考查字符串数组知识,Python字符串数组中,下标从0开始,2表示第三个字符“7”,-1表示方向,C正确。
C
2. 有如下Python程序段:
def search(b,k):
  for i in range(len(b))∶
    if b[i]==k∶
       return i
  return -1
a=[65,61,8,58,89,8,3,66,79]
search(a,8)
执行该程序段后,输出的结果是(  )
A. -1 B. 2
C. 3 D. 5
【解析】 本题考查Python代码及自定义函数的知识。自定义函数的功能是返回列表a中第一个等于k的下标,因此返回第一个8的下标2,B正确。
B
3. 有如下 Python 程序段:
p ="Tel-321"
c=""
for ch in p:
  if ch>= "0" and ch<= "9":
    c+=str(9-int(ch))
  elif ch>= "a" and ch<= "z":
    c+=chr(ord(ch)-ord("a")+ord("A"))
  else:
    c+=ch
print(c)
程序段运行后,输出的结果是(  )
A. tEL-678 B. TEL-678
C. TEL-321 D. tEL-321
【解析】 本题考查信息加密的Python程序实现。读程序可知,在遍历字符串的过程中,若遇到数字0~9,则加密变成9减去该数;若遇到字母a~z,加密后变成大写字母;若遇到其他字符,则直接连接。因此,当p="Tel-321"加密之后得到c="TEL-678",B正确。
B
4. 有如下Python程序段,执行该程序段后,变量num的值为(  )
num=40
if num<60∶
  num=60
if num==60∶
  num=num+20
if num>80∶
  num+=20
else∶
  num=40
print(num)
A. 40 B. 60
C. 80 D. 100
【解析】 本题主要考查Python选择语句。num的初始值为40,满足num<60,执行num=60,执行后满足num==60,执行num=num+20,此时num=80,不满足num>80,执行 num=40,故最后变量num=40。
A
5. 函数abs( )的功能是(  )
A. 求最大值 B. 求最小值
C. 求绝对值 D. 求和
【解析】 本题主要考查函数abs( )的功能。函数abs( )的功能是求绝对值。
C
6. 有如下Python程序段:
s=0
for i in range(1,11,2):
  s+=i
print(s)
执行该段代码后,输出的值是(  )
A. 25 B. 30
C. 45 D. 55
【解析】 本题考查循环语句知识。s=1+3+5+7+9=25。
A
7. 某Python程序如下:
a = input("输入数字字符串:")
s = ""
flag=1
for i in range(0,len(a)-1,2)∶
  d1=int(a[i])
  d2= int(a[i+ 1])
  t=d1+flag*d2
  if t < 0∶
    t+= 10
  elif t>= 10∶
    t-=10
  s=str(t)+s
  flag=-flag
if len(a)% 2==1∶
  s+=a[len(a)-1]
print(s)
程序运行时,若输入“48135”,则输出的结果是(  )
A. 528 B. 582
C. 825 D. 285
【解析】 本题考查字符串处理及加密知识。由代码可知,将字符a中的数字每两个字符为一组进行分组处理,t = d1 + flag * d2,且flag的值将变号。然后将t逆序连接到字符s中。不能成对的字符按顺序连接到字符串s中。计算如下:第一组,flag=1,4+8=12,因此t=2,s=“2”;第二组,flag=-1,t=1-3=-2,处理后t=8,故s=“82”。最后一个字符是“5”,按顺序进行连接,故s=“825”,C正确。
C
8. 某Python程序如下:
s=input( )
k=0; n=0
for x in s∶
  if "a" <= x and x <= "g"∶
    k=(ord(x)-ord("a") + 5) % 7 + 1
  elif "1" <= x and x<= "5"∶
    n=int(x)
keynum=n*7+k
print(keynum)
运行程序时,若输出的结果为28,则可能的输入是(  )
A. 3yAc4 B. b3a4A
C. a4kb3 D. ha9k3
C
【解析】 本题考查Python语言的循环和分支语句以及字符串处理等基础知识。根据Python代码可知,在for语句中,变量x逐个枚举字符串s中的单个字符,若x属于范围“a”~“g”的小写英文字符时,计算该字符和字母“a”之间的ASCII码的差值,然后加上5之后%7,最后再加1。若x是1~5的数字字符,则将其转换为整数类型。最终程序自动输出n*7+k的值,由于前面的k和n可能被后面的值所覆盖,例如B,字符“b3”的组合恰好能令keynum的值为28,但后面的“a4”会覆盖k和n的值。而C中的字符“b3”出现在最后位置,因此不会被覆盖,最终n=3,k=7,故keynum的值为28,C正确。
9. 高铁购票标准如下:身高达到或超过1.5米的乘客购买全价票;身高1.2米及以下的儿童免票;身高超过1.2米但不足1.5米的儿童可享受半价优惠。用下面的Python程序实现上述
算法,则第4行横线上的代码应为(  )
h=float (input("请输入身高(米): "))
if h<=1.2:
  print(“免票”)
elif     :
  print("请购买半价票")
else:
  print("请购买全价票")
A. h>1.5 B. h>=1.5
C. h<1.5 D. h<=1.5
【解析】 本题主要考查Python多分支结构的应用。身高高于1.2米但不到1.5米的儿童可享受半价优惠,因此此处的elif判断条件是h<1.5。
C
10. 下列Python程序的运行结果为(  )
x=[ 偶数 , 奇数 ]
for i in range (3):
  print(x[i%2])
A. 偶数 奇数 偶数 B. 奇数 偶数 奇数 C. 偶数 偶数 奇数 D. 奇数
奇数
偶数
【解析】 本题主要考查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)。变量i依次取0、1、2,对应的x[i%2]分别是x[0]、x[1]、x[0],因此输出结果是偶数、奇数、偶数。
A
11. 超市进行促销活动,若单笔消费金额满200元打九折,单笔消费金额满300元打八折(单笔消费仅享受一次打折优惠)。设顾客单笔消费s元,则下列Python程序能正确描述超市
活动的是(  )
A. if s>=300∶
  s=s*0.8
else∶
  s=s*0.9 
B. if s>=300∶
  s=s*0.8
if s>=200∶
  s=s*0.9
C. if s>=300∶
  s=s*0.8
elif s>=200∶
  s=s*0.9 
D. if s>=200∶
  s=s*0.9
elif s>=300∶
  s=s*0.8
【解析】 本题考查if语句及逻辑判断知识。A项没有200的判断;B项无八折;D项当输入350时,错误判断为九折。
C
12. 有Python程序如下:
d=[1,6,2,9,3,5,2]
k,s=1,0
m=len(d)//2
for i in range(m)∶
  s+=d[m+k]-d[m-k]
  k+=1
print(s)
运行该程序后,输出的结果是(  )
A. 1 B. -1
C. 14 D. -14
A
【解析】 本题考查for循环及列表知识。由模拟计算可知,d=[1,6,2,9,3,5,2]。
k m m+k m-k d[m+k] d[m-k] s
初值 1 3 4 2 0
第一次 运行 1 3 4 2 3 2 1
第二次 运行 2 3 5 1 5 6 0
第三次 运行 3 3 6 0 2 1 1
13. 回文是指从左至右读和从右至左读结果都一样的字符串,如“洪福尽享尽福洪”,判断某行诗句是否为回文诗的程序代码如下:
s=input(“请输入一句古诗∶”)
n=len(s)
if     ∶
  print(s,“是回文诗!”)
else∶
  print(s,“不是回文诗!”)
为实现上述功能,在横线上填入代码,下列表达式中,不.能.实现判断是否为回文诗的是(  )
A. s==s[∶∶-1]
B. s==s[-1∶-n+1]
C. s[∶n//2]==s[∶(n-1)//2∶-1]
D. s[∶n//2]==s[∶-(n//2)-1∶-1]
【解析】 本题主要考查Python分支结构的应用。切片操作基本表达式为object[start_index:end_index:step]。step:正负数均可,其绝对值大小决定了切取数据时的“步长”,而正负号决定了“切取方向”,正表示“从左往右”取值,负表示“从右往左”取值。start_index:表示起始索引(包含该索引对应值),该参数省略时,表示从对象“端点”开始取值。end_index:表示终止索引(不包含该索引对应值),该参数省略时,表示一直取到数据“端点”。s[-1:-n+1]="",因此s==s[-1:-n+1]不能实现回文诗的判断,其余选项均可以判断。
B
14. 居民身份证号码由6位地址码、8位出生日期码、3位顺序码和1位校验码组成。倒数第二位是性别代码,奇数代表男性,偶数代表女性。其格式如图所示:
列表IDlist存储了某校所有学生的居民身份证号码。如要分别统计1—12月出生的人数,Python程序代码如下:
count=[0] * 12
for i in     ∶
  mon=int(i[10∶12])   #从居民身份证号码中提取月份
     
for i in range(12)∶
  print(i+1,“月份人数为”,count[i])
为实现上述功能,横线上自上而下依次填入的代码如下:
①IDlist
②range(len(IDlist))
③count[mon-1]+=1
④count[mon]+=1
横线上的代码顺序正确的是(  )
A. ②③ B. ②④
C. ①④ D. ①③
【解析】 本题主要考查Python程序的执行与调试。列表IDlist存储了某校所有学生的居民身份证号码,第一空依次遍历列表IDlist,故填IDlist。由第二个for循环可知,count[i]中保存的是i+1月份的人数,因此第二空填count[mon-1]+=1,D正确。
D
15. 以下程序的横线上应填入的语句是(  )
c=0
list=[55,82,70,46,53,65,33,87,73,67]
for i in range(10)∶
  if     ∶
    c = c + 1
print(“列表list中小于60的数的个数为:”,c)
A. i<60 B. list[i-1]<60
C. list[i+1]<60 D. list[i]<60
【解析】 本题主要考查Python程序的调试。分析程序,变量i依次取0、1、2…9,列表的索引从0开始,即i可以作为列表list的索引,该程序实现找出列表list中小于60的数的个数,因此if判断条件是list[i]<60。
D
16. 判断一个自然数x是否能被57整除,下列表达式中,正确的是(  )
A. x/57==x% 57 B. x/57==int(x/57)
C. x//57==int(x/57) D. x% 57
【解析】 本题主要考查Python表达式的运算。“/”是除运算符,int() 函数用于将一个字符串或数字转换为整型,因此表达式x/57==int(x/57)可以判断一个自然数x是否能被57整除,B正确。
B
二、 非选择题
17. 亲和数是一对整数,其中每个数都是另一个数的真因数之和。真因数是指除了自身以外的所有因数,例如整数6的真因数有1,2,3(注:真因数表示有多个相同因数,只能累加一次)。例如,220和284是一对亲和数,因为220的真因数之和是284,而284的真因数之和是220。以下Python程序用于在指定范围内查找所有亲和数对。程序运行结果如图所示。
def divisors(n):
  s = 1
  for i in range(2,int(n ** 0.5)+1):
    if n % i == 0:
      s += i
      if  ① :
        s += n // i
  return s
def find(start,end):
  pairs = []
  for i in range(start,end+1):
    ds = divisors(i)
    if and ds<=end and  ② :
      pairs.append( ③ ) # append表示在列表pairs末尾增加元素
return pairs

start = int(input( ))
end = int(input( ))
pairs = find(start,end)
for pair in pairs:
  print("亲和数对:", pair[0],"和", pair[1])
请回答下列问题:
(1)请在横线上填入合适的代码:①__________,②_______________________,
③________________。
(2)若删除程序加框处语句,输入start的值为1,end的值为2000,则输出__________对亲和数对。
【解析】 本题考查枚举算法的应用。(1)①计算真因数时,需要同时添加两个真因数,因此在 s += n //i 前需要判断 i 不是其自身整除的结果 n // i,不是时,才计入s,故此处应为i! = n//i;②检查是否找到了一个亲和数对,故此处应为divisors( ds) == i;③将亲和数对添加到列表 pairs,故此处应为[i, ds]。(2)加框处的语句是 ds>i,它保证在诸如(a,b)的亲和数添加时a < b,避免了重复的亲和数对添加。如果删除此条件语句,将会认为220和284、284和220是两对,故将会输出4对亲和数对。
i! = n//i
divisors(ds) == i
[i,ds] 或(i,ds)
4
18. 一家商场正在降价促销。如果购物金额小于或等于10元,能享受10%的折扣;如果购买金额大于10元,能享受20%的折扣。编写一个程序,询问购买价格,再显示打折后的最
终价格。请在横线上填入合适的代码:①__________,②______________,③__________,
④__________,⑤__________。
price=   ①  (input("购物金额:”))#输入购物金额
if   ②  : #价格小于或等于10元,享受10%的折扣
  price=price*(  ③  )
  ④  :#价格大于10元,享受20%的折扣
  price =price*(  ⑤  )
print("最终价格为:",price,"元")  #输出最终价格
【解析】 本题主要考查Python程序设计。购物金额可能会有小数,因此需要使用float函数转换为浮点型,故①处填float。价格小于或等于10元,享受10%的折扣,故②处if判断条件是price<=10。享受10%的折扣,即原价的90%,故③处填1-0.1。④处对应else分支部分,故填else。如果购物金额大于10元,能享受20%的折扣,同理,⑤处填1-0.2。
float
price<=10
1-0.1
else
1-0.2
19. 根据AQI值判断城市的空气质量。若城市的AQI值(整数)不超过100,则空气质量优良,否则空气质量不佳。当输入的AQI值为-1时,则退出程序。不要更改程序结构,在程序中的①②③④四处填入正确的语句。
city = input("请输入城市名:")
AQI = int(input("请输入空气质量指数AQI的值:"))
  ①   AQI != -1:
  if   ②  :
    print(city,"的空气质量优良。")
    ③  :
    print(city,"的空气质量不佳。")
  city=input("请输入城市名:")
  AQI=  ④  (input("请输入空气质量指数AQI的值:"))
(1)①处的语句为(  )
A. if B. while C. for D. def
(2)②处的语句为(  )
A. AQI>=100 B. AQI<=100 C. AQI>100 D. AQI<100
(3)③处的语句为(  )
A. elif B. break C. if D. else
(4)④处的语句为(  )
A. int B. float C. str D. else
【解析】 本题主要考查Python的综合应用。(1)当输入的AQI值为-1时,则退出程序,否则持续输入,故①处为while。(2)若城市的AQI值(整数)不超过100,则空气质量优良,否则空气质量不佳。故②处为AQI<=100。(3)③处为else。(4)input()函数接收的是字符,故要转换为整型数据,所以④处应为int。
B
B
D
A
20. 列表nums有n(n>2)个整型元素,现要查找出缺失的第一个正整数并输出。若1 ~ n 中没有缺失某个正整数,则输出n+1。例如nums=[3,2,-1,0],则缺失的第一个正整数为1。例如,nums=[1,2,3,4,5,6],则缺失的第一个正整数为7。实现该功能的部分程序段如下:
def findz(nums)∶
  n=len(nums)
  i=0
  while i    if 1 <= nums[i] <= n∶
      p = nums[i] - 1
      if∶
        nums[p], nums[i] = nums[i], nums[p]
        i-=1
    i+=1
  for i in range(n)∶
    if  ①  ∶
      return i + 1
  return  ②  
#列表nums中存储了n个整型元素,代码略
#调用函数findz,并输出结果,代码略
(1)若nums=[-5,4,3,-1,0,1],则缺失的第1个正整数为__________。
(2)方框中应填入的代码为(  )(单选,填字母)。
A. nums[p] > 0     B. nums[p] != nums[i]    
C. nums[p] > nums[i]
(3)请在横线上填入合适的代码:①________________,②__________。
【解析】 本题考查Python语言基础、列表及枚举算法知识。(1)根据题意可知,按照正整数升序排序后的nums=[1, -1, 3, 4, 0, -5],因此缺失的第一个正整数为2。
(2)根据代码可知变量p用于记录按照正整数升序排序后的列表nums的索引值,如果列表的第一个元素(下标为0)的值为1,第二个元素(下标为1)的值是2,不需要交换,否则就将其交换到正确的位置去,例如将3交换到索引号为2的位置。如nums=[3,2,-1,0],按照正整数升序排序后,nums应该是[-1, 2, 3, 0],此时我们可以发现在1~4之间缺失的第一个正整数为1,也就是枚举nums的列表下标后,可以发现下标i(例如0)和列表元素值i+1(1)不相等,因此就可以确定第一个下标0的值1缺失了,以此类推。
2
B
nums[i]!=i+1
n+1
(3)①nums[i]为排序后的列表元素值,而i+1为按照正整数升序排序后的元素索引值。例如:检测到列表索引值为0的元素值为1,索引值为1的元素值为2,说明不缺正整数,可以继续往下枚举索引值i,否则说明缺失对应的元素值,并返回该元素的值i+1。②枚举所有索引后,没有返回任何值,说明在1~n中没有缺失某个正整数,此时按照题意应该输出n+1。
21. 某APP依据手机每秒钟屏幕的亮熄情况,记录当天00:00:00至23:59:59手机持续亮屏的各时间段,并生成手机亮屏日志文件。若用0表示熄屏,1表示亮屏,某天前10秒的屏幕状态为“0011011110”,则日志中记作“00:00:02,00:00:03,00:00:05,00:00:08”,表示第1个持续亮屏时间段的开始与结束时间点分别为“00:00:02”和“00:00:03”,时长为2秒,第2个持续亮屏时间段时长为4秒。
编写Python程序读取某天的日志文件,计算并输出手机当天亮屏的总时长、单次持续亮屏时长的最大值和相应的时间段(若相应时间段有多个,则按时间顺序全部输出)。
(1)如图所示为某天日志文件记录的前6个时间点,可知当天10:00:00该手机处于__________(单选,填字母)。
A.亮屏状态 B.熄屏状态
B
(2)定义函数 tosec(x),参数x是形如“08:00:00”的字符串,表示时间点。该函数返回时间点x是当天的第几秒(约定00:00:00为当天第0秒)。请在横线上填入合适的代码:
_________________________。
def tosec(x):
  #从时间点x中提取时、分,转为整型后分别存储在变量h,m中,代码略
  s=     
  n=h * 3600 + m * 60 + s
  return n
int(x[6:8]) 或 int(x[6:])
(3)定义函数getdata(t),该函数的功能是依次计算每个持续亮屏时间段的时长并存入列
表c,对应时间段存入列表d,返回c和d。请在横线上填入合适的代码:_______________
______________________________。
def getdata(t):
  i=0
  c = [];d = []
  while i <= len(t):
         
    c.append(tmp) #在列表c末尾添加一个元素
    d.append(t[i] + "—" + t[i+1])
    i+=2
  return c,d
tmp =
tosec(t[i+1])- tosec(t[i]) + 1
(4)主程序代码如下,请在横线上填入合适的代码:_________________。
#读取日志文件中各时间点,依次存入列表t,t形如["08:00:00",……],代码略
c,d = getdata(t)
tot=0;cmax=0
res = ""
for i in range(len(d)):
  tot += c[i]
  if c[i]> cmax:
    cmax=c[i]
    res = d[i]
  elif      :
    res = res + "," + d[i]

输出当天亮屏的总时长tot
输出单次持续亮屏时长的最大值cmax和相应的时间段res
代码略
c[i]==cmax
【解析】 本题考查Python语言基础及枚举算法知识及切片、自定义函数等知识。
(1)根据图中给出的样例可知,每两个数据为一组,逗号前后分别是每次手机亮屏时间段的开始与结束时间点,由数据“09:00:00,09:59:59”得知,09:59:59后恰好是熄屏时间段,而下一段的亮屏时间开始于10:05:03,因此当天10:00:00该手机处于熄屏状态。
(2)根据代码可知,自定义函数tosec(x)的功能是返回时间点x是当天的第几秒(00:00:00为当天第0秒),参数x是形如“08:00:00”的字符串,表示时间点,s表示秒,因此该值可以从字符x的第6,7位切片得到,并转换为相应的整型即可,故此处答案是int(x[6:8])。
(3)函数getdata(t)的功能是依次计算每个持续亮屏时间段的时长并存入列表c,由下面的语句“c.append(tmp)”可知横线上需要关于tmp的表达式,结合自定义函数tosec(),故此处答案是tmp = tosec(t[i+1])- tosec(t[i]) + 1。
(4)题干规定,计算单次持续亮屏时长的最大值和相应的时间段(若相应时间段有多个,则按时间顺序全部输出),因此若存在多段最长持续亮屏时长,要求全部输出,结合代码可知此处的表达式是c[i]==cmax。

展开更多......

收起↑

资源列表