资源简介 第三章核心素养测评卷一、 选择题(每小题列出的四个选项中只有一个是符合题目要求的)1. 有如下Python程序段:a="3278"new=a[2∶∶-1]则new的值为( C )A. "78" B. 78C. "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 -1a=[65,61,8,58,89,8,3,66,79]search(a,8)执行该程序段后,输出的结果是( B )A. -1 B. 2C. 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+=chprint(c)程序段运行后,输出的结果是( B )A. tEL-678 B. TEL-678C. TEL-321 D. tEL-321【解析】 本题考查信息加密的Python程序实现。读程序可知,在遍历字符串的过程中,若遇到数字0~9,则加密变成9减去该数;若遇到字母a~z,加密后变成大写字母;若遇到其他字符,则直接连接。因此,当p="Tel-321"加密之后得到c="TEL-678",B正确。4. 有如下Python程序段,执行该程序段后,变量num的值为( A )num=40if num<60∶ num=60if num==60∶ num=num+20if num>80∶ num+=20else∶ num=40print(num)A. 40 B. 60C. 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=0for i in range(1,11,2): s+=iprint(s)执行该段代码后,输出的值是( A )A. 25 B. 30C. 45 D. 55【解析】 本题考查循环语句知识。s=1+3+5+7+9=25。7. 某Python程序如下:a = input("输入数字字符串:")s = ""flag=1for 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=-flagif len(a)% 2==1∶ s+=a[len(a)-1]print(s)程序运行时,若输入“48135”,则输出的结果是( C )A. 528 B. 582C. 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=0for 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+kprint(keynum)运行程序时,若输出的结果为28,则可能的输入是( C )A. 3yAc4 B. b3a4AC. 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.5C. 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.8else∶ s=s*0.9B. if s>=300∶ s=s*0.8if s>=200∶ s=s*0.9C. if s>=300∶ s=s*0.8elif s>=200∶ s=s*0.9D. if s>=200∶ s=s*0.9elif 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,0m=len(d)//2for i in range(m)∶ s+=d[m+k]-d[m-k] k+=1print(s)运行该程序后,输出的结果是( A )A. 1 B. -1C. 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 113. 回文是指从左至右读和从右至左读结果都一样的字符串,如“洪福尽享尽福洪”,判断某行诗句是否为回文诗的程序代码如下: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] * 12for 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=0list=[55,82,70,46,53,65,33,87,73,67]for i in range(10)∶ if ∶ c = c + 1print(“列表list中小于60的数的个数为:”,c)A. i<60 B. list[i-1]<60C. 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% 57B. 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 sdef 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 pairsstart = 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. whileC. for D. def(2)②处的语句为( B )A. AQI>=100 B. AQI<=100C. AQI>100 D. AQI<100(3)③处的语句为( D )A. elif B. breakC. if D. else(4)④处的语句为( A )A. int B. floatC. 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] > 0B. 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=0res = ""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. 78C. "723" D. 723【解析】 本题考查字符串数组知识,Python字符串数组中,下标从0开始,2表示第三个字符“7”,-1表示方向,C正确。C2. 有如下Python程序段:def search(b,k): for i in range(len(b))∶ if b[i]==k∶ return i return -1a=[65,61,8,58,89,8,3,66,79]search(a,8)执行该程序段后,输出的结果是( )A. -1 B. 2C. 3 D. 5【解析】 本题考查Python代码及自定义函数的知识。自定义函数的功能是返回列表a中第一个等于k的下标,因此返回第一个8的下标2,B正确。B3. 有如下 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+=chprint(c)程序段运行后,输出的结果是( )A. tEL-678 B. TEL-678C. TEL-321 D. tEL-321【解析】 本题考查信息加密的Python程序实现。读程序可知,在遍历字符串的过程中,若遇到数字0~9,则加密变成9减去该数;若遇到字母a~z,加密后变成大写字母;若遇到其他字符,则直接连接。因此,当p="Tel-321"加密之后得到c="TEL-678",B正确。B4. 有如下Python程序段,执行该程序段后,变量num的值为( )num=40if num<60∶ num=60if num==60∶ num=num+20if num>80∶ num+=20else∶ num=40print(num)A. 40 B. 60C. 80 D. 100【解析】 本题主要考查Python选择语句。num的初始值为40,满足num<60,执行num=60,执行后满足num==60,执行num=num+20,此时num=80,不满足num>80,执行 num=40,故最后变量num=40。A5. 函数abs( )的功能是( )A. 求最大值 B. 求最小值C. 求绝对值 D. 求和【解析】 本题主要考查函数abs( )的功能。函数abs( )的功能是求绝对值。C6. 有如下Python程序段:s=0for i in range(1,11,2): s+=iprint(s)执行该段代码后,输出的值是( )A. 25 B. 30C. 45 D. 55【解析】 本题考查循环语句知识。s=1+3+5+7+9=25。A7. 某Python程序如下:a = input("输入数字字符串:")s = ""flag=1for 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=-flagif len(a)% 2==1∶ s+=a[len(a)-1]print(s)程序运行时,若输入“48135”,则输出的结果是( )A. 528 B. 582C. 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正确。C8. 某Python程序如下:s=input( )k=0; n=0for 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+kprint(keynum)运行程序时,若输出的结果为28,则可能的输入是( )A. 3yAc4 B. b3a4AC. a4kb3 D. ha9k3C【解析】 本题考查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.5C. h<1.5 D. h<=1.5【解析】 本题主要考查Python多分支结构的应用。身高高于1.2米但不到1.5米的儿童可享受半价优惠,因此此处的elif判断条件是h<1.5。C10. 下列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],因此输出结果是偶数、奇数、偶数。A11. 超市进行促销活动,若单笔消费金额满200元打九折,单笔消费金额满300元打八折(单笔消费仅享受一次打折优惠)。设顾客单笔消费s元,则下列Python程序能正确描述超市活动的是( )A. if s>=300∶ s=s*0.8else∶ s=s*0.9 B. if s>=300∶ s=s*0.8if s>=200∶ s=s*0.9C. if s>=300∶ s=s*0.8elif s>=200∶ s=s*0.9 D. if s>=200∶ s=s*0.9elif s>=300∶ s=s*0.8【解析】 本题考查if语句及逻辑判断知识。A项没有200的判断;B项无八折;D项当输入350时,错误判断为九折。C12. 有Python程序如下:d=[1,6,2,9,3,5,2]k,s=1,0m=len(d)//2for i in range(m)∶ s+=d[m+k]-d[m-k] k+=1print(s)运行该程序后,输出的结果是( )A. 1 B. -1C. 14 D. -14A【解析】 本题考查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 113. 回文是指从左至右读和从右至左读结果都一样的字符串,如“洪福尽享尽福洪”,判断某行诗句是否为回文诗的程序代码如下: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]不能实现回文诗的判断,其余选项均可以判断。B14. 居民身份证号码由6位地址码、8位出生日期码、3位顺序码和1位校验码组成。倒数第二位是性别代码,奇数代表男性,偶数代表女性。其格式如图所示:列表IDlist存储了某校所有学生的居民身份证号码。如要分别统计1—12月出生的人数,Python程序代码如下:count=[0] * 12for 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正确。D15. 以下程序的横线上应填入的语句是( )c=0list=[55,82,70,46,53,65,33,87,73,67]for i in range(10)∶ if ∶ c = c + 1print(“列表list中小于60的数的个数为:”,c)A. i<60 B. list[i-1]<60C. list[i+1]<60 D. list[i]<60【解析】 本题主要考查Python程序的调试。分析程序,变量i依次取0、1、2…9,列表的索引从0开始,即i可以作为列表list的索引,该程序实现找出列表list中小于60的数的个数,因此if判断条件是list[i]<60。D16. 判断一个自然数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 sdef 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//idivisors(ds) == i[i,ds] 或(i,ds)418. 一家商场正在降价促销。如果购物金额小于或等于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。floatprice<=101-0.1else1-0.219. 根据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。BBDA20. 列表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缺失了,以此类推。2Bnums[i]!=i+1n+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 nint(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,dtmp =tosec(t[i+1])- tosec(t[i]) + 1(4)主程序代码如下,请在横线上填入合适的代码:_________________。 #读取日志文件中各时间点,依次存入列表t,t形如["08:00:00",……],代码略c,d = getdata(t)tot=0;cmax=0res = ""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。 展开更多...... 收起↑ 资源列表 第三章 核心素养测评卷.docx 第三章核心素养测评卷.pptx