11 202309青少年软件编程(Python)等级考试试卷(四级)

标签:
普通文字版答案
2024-11-01
| 14页
| 98人阅读
| 0人下载

内容正文:

青少年软件编程(Python)等级考试试卷(四级) 202309真题与解析 分数:100  题数:38 测试时长:60分钟 一、单选题(共25题,每题2分,共50分) 1.用枚举算法求解“100以内既能被3整除又能被4整除的元素”时,在下列数值范围内,算法执行效率最高的是?( ) A.  1~101 B.  4~100 C.  12~100 D.  12~96 2.下列有关函数的描述中,正确的是?( ) A.  函数中必须有return语句 B.  在函数内部不能使用全局变量 C.  函数能提高应用的模块化程度和代码的重复利用率 D.  函数内容以大括号起始,并且缩进 3.下列哪个语句能够定义参数个数不确定的函数?( ) A.  hs(parameters) B.  hs(parameters[]) C.  hs(parameters{}) D.  hs(*parameters) 4.执行如下Python代码的结果是?( ) def area(r,pi=3.14):      return r*r*pi print(area(2,10)) A.  40 B.  200 C.  400 D.  20 5.执行如下Python代码,输出结果是?( ) def hs(num):     num += 1     return num n=10 s=hs(n) print(s) A.  11 B.  10 C.  1 D.  运行错误 6.有如下Python程序,输出的结果是?( ) def whao(year = '2023'):     print('你好' + year) whao()  A.  你好 B.  你好2023 C.  你好year D.  没有输出 7.编写计算正方体体积的匿名函数,下列哪一个语句是正确的?( ) A.  rst = lambda a : a * 3 B.  lambda a : a * 3 C.  rst = lambda a : a ** 3 D.  lambda a : a ** 3 8.执行如下Python程序,运行的结果是?( ) def zfzh(s):     c = ''     for ch in s:         if "9">=ch>= "0":             c+=str(int(ch)+1)         elif "z">=ch>= "a":             c+= chr(ord(ch)- ord("a")+ord("A"))     return c s = 'hzag-21-8' print(zfzh(s)) A.  HZAG329 B.  923HZAG C.  GAZH329 D.  923GAZH 9.在Python中,以下哪个代码是安装numpy模块的方法?( ) A.  pip install numpy B.  pip uninstall numpy C.  install numpy D.  setup numpy 10.在Python中导入第三方库的主要关键字是?( ) A.  from B.  import C.  pip D.  Install 11.《阅微草堂笔记》里描述了槐树果实“响豆”,在夜里爆响,这种豆一棵树只有一粒,难以辨认出。所以古人就等槐树开花结果后,用许多布囊分别贮存豆荚,用来当枕头。夜里如果没有听到声音,便扔掉。如果有爆响声。然后把这一囊的豆荚又分成几个小囊装好,夜里再枕着听……如此这么分下去直到找到响豆。以上故事体现的算法是?( ) A.  顺序查找 B.  枚举算法 C.  解析算法 D.  分治算法 12.下列哪项不是分治算法所具有的特征?( ) A.  求解问题的规模缩小到一定的程度就能够容易地解决 B.  求解题可以分解为若干个规模较小的不同问题 C.  利用求解问题分解出的子问题的解可以合并为该问题的解 D.  求解问题所分解出的各个子问题是相互独立的 13.两位同学玩猜数字游戏,规则如下:一方在心里默想一个范围在1-100之间的数,如果另一方猜的数字比对方想的要大,就说大了;如果猜的数字比想的要小,就说小了,直到猜中数字。那么使用二分查找法最多需要猜测的次数是?( ) A.  10 B.  8 C.  7 D.  6 14.用递推算法求解n个自然数的乘积,请问代码中横线上需要填入的正确代码是?( ) def fact(n):     s=1     for i in range(1,n+1):         s=s*i     return ________ a=fact(5) print(a) A.  s B.  i C.  fact(n-1) D.  fact(n) 15.一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高? 可以用下列代码解决这个问题,请问这段代码是基于( )算法编写的? high=100 s=0 sum=0 for i in range(10):     s,high=high+high/2,high/2     sum=sum+s sum=sum-high print(sum) print(high) A.  递归 B.  枚举 C.  递推 D.  二分 16.用递归算法求1~n个连续自然数的乘积的代码如下,请选择合适的代码补全程序?( ) def Chengji(n):     if n <=1:         return 1     else:         return _____?______ print(Chengji(3)) A.  n*Chengji(n) B.  n*Chengji(n-1) C.  n*Chengji(n+1) D.  n×Chengji(n-1) 17.有一根绳子,第一次剪去一半多2米,第二次剪去剩下的一半多2米,第三次剪去剩下的一半多2米,第四次剪去剩下的一半多2米,第五次剪去剩下的一半多2米,此时绳子还剩2米。这根绳子长几米?想解决这个问题的话,可以采用以下哪种算法?( ) A.  排序 B.  递推 C.  解析 D.  枚举 18.小猴子第一天摘下若干桃子,当即吃掉一半,又多吃一个。第二天早上又将剩下的桃子吃一半,又多吃一个。以后每天早上吃前一天剩下的一半另加一个。到第5天早上猴子想再吃时,发现只剩下一个桃子了。问第一天猴子共摘多少个桃子? 这个问题可以用递归来解决,代码如下: def peach(day):     if day==1:         return 1     return (peach(day-1) + 1)*2 s=peach(5) print('一共有%d只桃子'%(s)) 请问第2行的“if day == 1”代码起到的作用是?( ) A.  结束递归的边界条件 B.  开始递归的边界条件 C.  调用自身 D.  递归过程中的变化 19.下列代码可以求两个数的最小公倍数。请认真阅读下列代码运用了什么算法?( ) def lcm(s,m,n):     if s%n==0:         return s     else:         return lcm(s+m,m,n) a=int(input('请输入第1个数:')) b=int(input('请输入第2个数:')) c=lcm(a,a,b) print('{}和{}的最小公倍数是{}'.format(a,b,c)) A.  枚举 B.  解析 C.  递归 D.  二分 20.关于函数,正确的描述是?( ) A.  规范的函数设计都应该带有返回值 B.  函数体中,只要遇到break关键字,函数就结束 C.  函数体中,只要遇到return关键字,函数就结束 D.  函数的返回值只能是整型、浮点型、布尔型和字符串 21.关于全局变量和局部变量,正确的描述是?( ) A.  通俗来说,无缩进的变量都是全局变量 B.  函数体中,只能使用局部变量 C.  Python程序中,全局变量与局部变量不允许重名 D.  函数体中,只能通过实参传递的方式实现对全局变量数值的使用 22.定义以下函数:  def func(x,y,z=2):      print(x+y+z)  分别以func(1,2,3)和func(1,2)语句调用该函数,运行后的结果分别是?( ) A.  6;出错 B.  5;出错 C.  5;5 D.  6;5 23.在嵌套函数中,也就是一个函数里面还有一个函数,如果内部函数需要修改外部变量的值,处理的方法是?( ) A.  只能通过不定长参数传递来实现 B.  使用local关键字 C.  使用nonlocal关键字 D.  使用global关键字 24.在自定义函数中,如果发现局部变量与全局变量同名,则?( ) A.  程序会出现语法错,不能运行 B.  程序可以运行,局部变量与全局变量互不干扰 C.  可能会出现局部变量修改全局变量的值的情况,需要检查程序设计是否合理 D.  不允许出现这种情况,应该采用参数传递的方法去解决问题 25.考察以下函数定义代码: def func(x:int,y:str)->str:     z=x*y     return z 以下陈述正确的是?( ) A.  Python是一种动态类型语言,不强制要求指定参数类型,上述代码行是不符合Python语法的 B.  为提高程序的可靠性,Python函数定义时允许为形参指定数据类型,也允许为返回值指定类型 C.  由于为函数指定了返回值类型,变量z一定要做类型转换后,才能用于上述return语句中 D.  由于为形参指定了不同的数据类型,变量x和y也需要先做类型转换后才能进行上述运算 二、判断题(共10题,共20分) 26.函数是将实现相同功能的代码封装在一起,实现代码复用。( ) 27.关键字实参通过“关键字=值”的方式传值,函数参数全部采用此方式传值时,不需要考虑函数调用过程中形参的顺序。( ) 28. 函数的定义代码不需要在主程序调用函数之前( ) 29. 命令pip download <第三方库>表示下载并安装指定的第三方库。( )   30.二分查找又称对折半查找,例如:在数列34、17、25、9、10、3中查找3,适合采用二分查找法。( ) 31.递归算法不涉及高深的数学知识,使得很多比较复杂的问题,也可以用简洁的代码解决,代码的执行效率比较高,所以即使有其他算法可行,也应该首选递归算法解决问题。( ) 32.递归算法中,必然存在函数体内调用自身的情况,可以在最后调用,也可以在中间调用。( ) 33. Python程序中,自定义函数可以放在整个程序的开头,也可以放在主程序之后,比较自由。( ) 34. 通过把某些特定功能语句设计成自定义函数,可以简化主程序的编写。( ) 35. 下面代码的时间复杂度为O(n*n)。( ) arr = [ 2, 3, 4, 10, 40 ]  n = len(arr) for i in range(n):     for j in range(0, n-i-1):          if arr[j] > arr[j+1] :             arr[j], arr[j+1] = arr[j+1], arr[j] 三、编程题(共3题,共30分) 36.一个列表中存在n个数据,可以用分治算法来找到其中的最小值。具体过程如下:如果列表元素的个数小于等于2的时候,经过一个判断就找到其中的最小值,所以可以先把数据从中间划分为左右两部分,然后通过递归把每一部分再划分为左右两部分,直到数据规模小于等于2的时候,返回结果,然后通过递归到最后为两个数据对比,我们就可以找到最小值。 请根据以上算法过程,补全代码。 # 求列表中小于两个元素的最小值 def get_min(number):     if len(number) == 1:         return         ①             else:         if number[1] > number[0]:             return number[0]         else:             return number[1] def solve(number):     n = len(number)     if n <= 2:         return get_min(number)     else:         # 将整个列表分为左右两部分         left_list, right_list =         ②        , number[n//2:]         # 递归(树),分治         left_min, right_min = solve(left_list),         ③                 return get_min([left_min, right_min]) test_list = [5, 11, 3, 2, 7, 9] print(solve(test_list)) 37.未来居民社区设计有一个机器人服务中心,假如某社区有若干栋住宅楼,每栋楼的位置可以由坐标(x,y)表示,其中x坐标表示居民楼的东西向位置,y坐标表示居民楼的南北向位置。这里约定,社区中任意2点(x1,y1)和(x2,y2)的之间的距离使用数值|x1-x2|+|y1-y2|来度量。要求为社区选择建立机器人服务中心的最佳位置,使各个居民点到机器人服务中心的距离总和最小。以下是机器人服务中心的选址程序,采用取各坐标中位数的方法来确定中心位置,请补充完成该程序。 注:中位数的含义:一组按大小顺序排列起来的数据中处于中间位置的数。当有奇数个数据时,中位数就是中间那个数;当有偶数个数据时,中位数就是中间那两个数的平均数。 n=int(input("请输入居民楼总数:")) hx=[] hy=[] for i in range(n):     x,y = map(int,input("请输入居民楼的x和y坐标:").split(","))     hx. append(x)     hy. append(y)  hx = sorted(        ①        ) hy = sorted(        ②        )   if n%2 == 0:  #偶数情况,求中位数     sn = int(n/2)     x0 = int((hx[sn]+hx[sn-1])/2)     y0 = int((hy[sn]+hy[sn-1])/2) else:         #奇数情况,求中位数     sn = int((n-1)/2)     x0 =         ③             y0 =         ④           sumx=0 sumy=0 for j in hx:     dx =abs(x0-j)     sumx += dx   for k in hy:     dy = abs(y0-k)     sumy += dy     print("选址点的坐标是:(%d,%d)"%(x0,y0)) print("选址到各楼的累计距离是:",sumx+sumy) 38.从键盘上分别输入要查找和替换的字符串,对文本文件进行查找与替换,替换后保存到新的文本文件中。 思路:输入待查找字符串s,需查找子字符串key和替换字符串new,通过调用自定义函数replace实现替换。完善划线处代码。 s = input("请输入待查找的字符串:") key = input("请输入需查找的子字符串:") new = input("请输入要替换的字符串:") def findstr(key, s, begin):       for i in range(begin,len(s) - len(key) + 1):            if s[i:        ①        ]== key:               return i       return -1 def replace(key, new, s):       begin = 0       while begin <         ②        :             pos = findstr(key,s, begin)             if pos ==-1:                       break             else:                   s = s[0:pos]+ new + s[pos + len(key):        ③        ]                   begin =  pos + len(key)        return s rst =        ④          #调用函数替换字符 print(rst) 参考答案及解析: 一、单选题 1. 答案:C - 解析:在选取循环控制变量时,枚举范围应尽可能小,但又不能遗漏。 2. 答案:C - 解析:函数不一定要有`return`语句;在函数内部可以使用全局变量;函数内容以`def`起始,通过缩进来表示函数体;函数能提高应用的模块化程度和代码的重复利用率。 3. 答案:D - 解析:`hs(*parameters)`可以定义参数个数不确定的函数,通过可变参数的方式接收多个参数。 4. 答案:A - 解析:函数`area`计算圆的面积,传入参数`2`和`10`,则计算`2*2*10 = 40`。 5. 答案:A - 解析:函数`hs`将传入的参数加1后返回,`n=10`,调用函数后`s=11`。 6. 答案:B - 解析:函数`whao`有一个默认参数`year='2023'`,调用时没有传入参数,使用默认值,输出“你好2023”。 7. 答案:C - 解析:匿名函数定义体积计算应为边长的立方,即`rst = lambda a : a ** 3`。 8. 答案:A - 解析:代码中对数字和小写字母的处理逻辑是正确的。对于字符串`s = 'hzag-21-8'`,函数`zfzh(s)`的处理结果是`HZAG329`,因此正确答案是A. HZAG329。 9. 答案:A - 解析:在命令行中使用`pip install numpy`安装`numpy`模块。 10. 答案:B - 解析:在 Python 中导入第三方库的主要关键字是`import`。 11. 答案:D - 解析:故事中通过不断将问题分解为更小的部分(将一袋豆荚分为几个小袋),直到找到响豆,体现了分治算法的思想。 12. 答案:B - 分治算法要求求解问题可以分解为若干个规模较小的相同问题,而不是不同问题。 13. 答案:C - 对于1-100之间的数,使用二分查找最多需要7次(2⁶<100<2⁷)。 14. 答案:A - 函数`fact`计算`n`个自然数的乘积,最后返回`s`即可。 15. 答案:C - 代码通过每次计算当前下落和反弹的高度,逐步推导出最终结果,是递推算法。 16. 答案:B - 递归求1到`n`的连续自然数乘积,应为`n*Chengji(n - 1)`。 17. 答案:B - 问题通过逐步推导绳子每次剪后的长度,适合用递推算法解决。 18. 答案:A - “if day == 1”是递归的边界条件,当到达第一天时,直接返回1,结束递归。 19. 答案:C - 代码通过不断调用自身来计算两个数的最小公倍数,是递归算法。 20. 答案:C - 函数不一定都要有返回值;函数体中遇到`return`关键字函数就结束,而不是`break`;函数的返回值可以是多种类型,不限于整型、浮点型、布尔型和字符串。 21. 答案:A - 无缩进的变量通常是全局变量;函数体中可以使用全局变量;全局变量与局部变量可以重名;函数体中可以通过多种方式使用全局变量,不只是实参传递。 22. 答案:D - 函数`func`有一个默认参数`z=2`,调用`func(1, 2, 3)`时,计算`1 + 2 + 3 = 6`,调用`func(1, 2)`时,使用默认参数计算`1 + 2 + 2 = 5`。 23. 答案:D - Python嵌套函数中,如果内部函数需要修改外部变量的值,要使用global关键字。 24. 答案:C - 如果局部变量与全局变量同名,可能会出现局部变量修改全局变量的值的情况,需要检查程序设计是否合理。 25. 答案:B - Python 函数定义时允许为形参指定数据类型,也允许为返回值指定类型,以提高程序的可靠性。 二、判断题 26. 答案:对 - 函数将实现相同功能的代码封装在一起,实现代码复用。 27. 答案:对 - 关键字实参通过“关键字=值”的方式传值,不考虑形参顺序。 28. 答案:错 - 函数的定义代码通常应该在主程序调用函数之前,但 Python 中函数定义也可以在调用之后,只要在调用前被解析到即可。 29. 答案:错 - `pip download <第三方库>`表示下载但不安装指定的第三方库。 30. 答案:错 - 给定的数列没有排序,不适合采用二分查找法。 31. 答案:错 - 递归算法虽然简洁,但不一定执行效率高,在有其他更高效算法时,不一定首选递归算法。 32. 答案:对 - 递归算法中,函数体内可以在最后或中间调用自身。 33. 答案:错 - Python程序中,自定义函数要放在主程序之前。 34. 答案:对 - 通过把特定功能语句设计成自定义函数,可以简化主程序编写。 35. 答案:对 - 给定的代码是冒泡排序算法,其时间复杂度为 O(n²)。 三、编程题 36.参考答案: 参考程序: s = input("请输入待查找的字符串:") key = input("请输入需查找的子字符串:") new = input("请输入要替换的字符串:") def findstr(key, s, begin):       for i in range(begin,len(s) - len(key) + 1):             if s[i:i+len(key)]== key:               return i         return -1 def replace(key, new, s):       begin = 0       while begin < len(s)-len(key)+ 1:             pos = findstr(key,s, begin)             if pos ==-1:                 break             else:                 s = s[0:pos]+ new + s[pos + len(key):len(s)]                 begin = pos + len(key)        return s rst = replace(key,new,s)       #调用函数替换字符 print(rst) 评分标准: (1)i+len(key) 或等价答案;(3分)  (2)len(s)-len(key)+ 1 或等价答案;(3分)  (3)len(s) 或等价答案;(3分) (4)replace(key,new,s) 或等价答案。(3分) 试题解析: (1)在`findstr`函数中,要判断从位置`i`开始的子串是否等于`key`,循环遍历的范围应该是`s[i:i + len(key)]`,所以此处填写`i + len(key)`。其等价答案可以是表达式最终能确定切片范围结束位置为从当前`i`位置开始长度为`key`字符串长度的其他形式。 (2)在`replace`函数中,`while`循环的条件应该是确保在整个字符串`s`中进行查找替换操作,不能超过字符串的长度,又因为`findstr`函数中循环范围是`range(begin, len(s) - len(key) + 1)`,所以这里填写`len(s)-len(key)+ 1`可以确保在可能出现要查找的子串的范围内进行循环。其等价答案可以是能表达相同循环范围限制的其他形式。 (3)在`replace`函数中,当`begin`小于字符串`s`的长度时继续循环进行查找替换操作,所以此处填写`len(s)`。其等价答案可以是能判断是否遍历完整个字符串的其他形式。 (4)最后一行是调用函数进行替换并将结果赋值给`rst`,所以填写`replace(key,new,s)`。其等价答案可以是通过函数调用方式得到替换后字符串的其他形式。 37.参考答案: 参考程序: # 求列表中小于两个元素的最小值 def get_min(number):     if len(number) == 1:         return number[0]     else:         if number[1] > number[0]:             return number[0]         else:             return number[1] def solve(number):     n = len(number)     if n <= 2:         return get_min(number)     else:         # 将整个列表分为左右两部分         left_list, right_list = number[:n//2], number[n//2:]         # 递归(树),分治         left_min, right_min = solve(left_list), solve(right_list)         return get_min([left_min, right_min]) test_list = [5, 11, 3, 2, 7, 9] print(solve(test_list)) 评分标准: (1)number[0];(2分)  (2)number[:n//2];(3分)  (3)solve(right_list)。(3分)  试题解析: (1)当列表中只有一个元素时,这个唯一的元素就是列表中的最小值,所以返回`number[0]`。 (2)在划分列表为左右两部分时,`number[:n//2]`表示取列表从开头到中间位置(不包括中间位置)的元素,作为左半部分。这样可以正确地将列表分成左右两部分,以便进行后续的递归处理。 (3)对于右半部分,同样需要通过递归调用`solve`函数来找到右半部分的最小值。所以这里填写`solve(right_list)`,使得程序可以继续对右半部分进行分治处理,直到找到最小元素。 38.参考答案: 参考程序: n=int(input("请输入居民楼总数:")) hx=[] hy=[] #x,y = input("请输入居民楼的x和y坐标:").split(",") for i in range(n):     x,y = map(int,input("请输入居民楼的x和y坐标:").split(","))     hx.append(x)     hy.append(y) hx=sorted(hx)      #对输入坐标进行排序 hy=sorted(hy) if n%2 == 0:        #偶数情况,求中位数     sn = int(n/2)     x0 = int((hx[sn]+hx[sn-1])/2)     y0 = int((hy[sn]+hy[sn-1])/2) else:                  #奇数情况,求中位数     sn = int((n-1)/2)     x0 = hx[sn]     y0 = hy[sn]   sumx=0 sumy=0 for j in hx:     dx =abs(x0-j)     sumx += dx   for k in hy:     dy = abs(y0-k)     sumy += dy     print("选址点的坐标是:(%d,%d)"%(x0,y0)) print("选址到各楼的累计距离是:",sumx+sumy) 评分标准: (1)hx;(2分)   (2)hy;(2分)   (3)hx[sn];(3分) (4)hy[sn]。(3分) 试题解析: ①处应该填写hx,对hx列表进行排序,以便后续求中位数。 ②处应该填写hy,对hy列表进行排序,以便后续求中位数。 ③处应该填写hx[sn],在奇数情况下,直接取排序后列表中间位置的元素作为中位数。 ④处应该填写hy[sn],在奇数情况下,直接取排序后列表中间位置的元素作为中位数。 学科网(北京)股份有限公司 $$

资源预览图

11 202309青少年软件编程(Python)等级考试试卷(四级)
1
11 202309青少年软件编程(Python)等级考试试卷(四级)
2
11 202309青少年软件编程(Python)等级考试试卷(四级)
3
所属专辑
相关资源
示范课
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。