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

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

内容正文:

青少年软件编程(Python)等级考试试卷(四级) 202406真题与解析 分数:100  题数:38 测试时长:60分钟 一、单选题(共25题,每题2分,共50分) 1.执行以下程序后所输出的结果是?( ) def f(n): s=0 for i in range(2, n+1): p = True for j in range(2, int(i**0.5)+1): if i % j == 0: p = False break if p==True and i%3==1: s=s+i return sprint(f(13)) A 20 B 41 C 21 D 91 2.以下说法错误的是?( ) A python中可以在不同的自定义函数中声明相同名字的变量,使用时不会造成数据混乱 B 形参在其自定义函数内不能与其它变量重名 C 全局变量可以被多个自定义函数调用 D 因为全局变量作用域是整个程序,所以局部变量和全局变量不能使用相同变量名 3.当程序运行时,如果自定义函数内某个变量与程序的全局变量使用相同的变量名,程序会如何处理?( ) A 优先调用全局变量,屏蔽局部变量 B 优先调用局部变量,屏蔽全局变量 C 程序报错 D 将二者视为相同变量,赋值等操作会对二者同时产生影响 4. 如下代码,运行之后,最终打印结果是?( ) def f(x): color=["红","橙","黄","绿","青","蓝","紫"] def lucky(x,y): n=x+y return n m=x*int(lucky(5,6))%7 print("幸运颜色是:",color[m]) f(5) A 幸运颜色是:红 B 幸运颜色是:橙 C 幸运颜色是:黄 D 运颜色是:紫 5. 以下有关return 语句的表述中错误的是?( ) A return语句可以出现在函数内部的任何位置 B 一个函数内可以存在多个return语句,但在函数执行过程中,只有一个会被执行 C 一个函数可以没有return语句,视为返回一个None对象 D return`语句可以返回多个值,比如return a,b,c,将返回一个列表[a,b,c] 6.以下关于关键字nonlocal 和 global表述中错误的是?( ) A:global声明的变量将变成全局变量 B:nonlocal只能声明引用上一层函数中的局部变量,如不存在则会继续向上一层寻找 C:nonlocal 和 global相同点是在函数体内改变非局部变量的值 D:global声明变量时不能同时对该变量赋值 7.用枚举算法求解“各位数之和等于8的所有三位数”时,下列枚举范围中效率最高的是?( ) A:0-999 B:100-999 C:100-800 D:107-800 8.下列关于分治算法的描述中,错误的是?( ) A问题的规模分解到一定的程度,问题容易解决 B问题可以分解为若干个规模较小相同问题 C问题所分解出的各个子问题是可以相互交叉 D问题分解出的子问题的解可以合并为该问题的解 9.解决下列问题体现分治算法思想的是?( ) A打印1000以内的完美数(完美数是除了本身之外的因数之和等于本身) B输出100以内能被5整除的整数 C求斐波那契数列第n项 D用快速排序算法对n个整数升序排序 10.有6位学生的身高分别为“166、168、169、171、172、175”,其中小王的身高为172,若采用二分查找,则需要找多少次才能够找到小王?( ) A:1 B:2 C:3 D:4 11.阶乘是一个数与所有小于它的正整数的乘积。例如,5的阶乘(写作5!)是5 * 4 * 3 * 2 * 1 = 120。以下是用递归方法编写求阶乘的代码,横线处填写的代码是?( ) def fun(n):     if n == 1:         return 1     else:         return ________print(fun(5)) A n * (n-1) B fun(n-1) C n * fun(n-1) D fun(n*(n-1)) 12.运行如下代码,请输出运算结果?( ) def fun(lst):     if len(lst) == 0:         return 0     return lst[0] + fun(lst[1:]) x = [1,2,3,4,5]print(fun(x)) A:9 B:6 C:10 D:15 13.以下是编写一个Python函数,使用递归方法实现字符串的反转,请在横线处填写正确的代码?( ) def fun(s):     if len(s) <= 1:         return s     else:         return _____________ x = "abcde"print(fun(x)) A fun(s[1:]) B fun(s[1:]) + s[0] C fun(s[:1]) + s[0] D fun(s[:1]) 14.运行以下代码,请输出运算结果?( ) def fun(s, n):     if n == 0:         return ""     else:         return s + fun(s, n-1) s = "abc" n = 3print(fun(s, n)) A:abc B:abab C:abcabcabc D:ababab 15.运行以下代码,请输出运算结果?( ) x = 1 while x < 100:     if  x % 3 != 0:         print(x, end=',')     elif x // 10:         break     x += 2print(x) A:1 B:3,9,11 C:3,6,9,10 D:1,5,7,11,13,15 16.下面图形每一行从字母A开始,以ABC方式重复。行数为输入的整数。请在python代码段横线处填入合适的代码?( ) A AB ABC ABCA ABCAB ABCABC ABCABCA n = int(input()) for i in range(1, n+1):   for j in range(0, i):       print("%s" % _____________, end='')   print() A 'A' + j / 3 B chr(ord('A') + j % 3) C 'A' + j % 3 D hr(ord('A') + j / 3) 17.以下哪种情况下适合使用自定义函数?( ) A体现自己独特思路的功能块 B代码量大的功能块 C会多次用到的功能块 D逻辑复杂的功能块 18.调用自定义函数时,以下哪种情况下程序运行时一定会出错?( ) A对实参以关键字赋值的方式去调用函数 B对形参赋以默认值 C给赋予了默认值的形参传入新值 D传入的实参个数比形参个数少 19.以下程序语句中,存在语法错误的是?( ) A result= lambda a:a+b B lambda a,b,c:a**0.5 C lambda a,b=10:a*b D dlt=lambda a,b,c:b**0.5-4*a*c 20.对于如下自定义的函数: def myfunc(a,b,c)   return a+b+c 以下调用该函数的语句中,能正确执行的是?( ) A myfunc(1,2) B myfunc(a=3,2,1) C myfunc(3,b=2,1) D myfunc(3,2,c=1) 21.对于以下自定义函数及程序,运行后的结果是?( ) def prts( str ):     print (str)     return str s="Py" prts(prts(s)) A 出错 B Py C Py及None D Py及Py 22.使用*args和**kwargs形参来定义函数时,正确的说法是?( ) A使用*args代表列表,使用**kwargs代表元组 B可以在调用函数时传入多个实参 C不再允许设置位置参数或关键字参数 D可以设置位置参数或关键字参数,但必须放置在*args参数前面 23.下列关于函数return语句的说法,正确的是?( ) A return语句中返回值的数据类型可以是字符串,也可以是列表 B 一个函数中只能有一个return语句 C return语句中不能有表达式 D return只能返回一个值 24.用Python绘制y=x**2+6*x+2的函数图像,需要用到的模块是?( ) A plot B pygame C matplotlib D turtle 25.陈明同学利用Python语言编写了一段“根据出生年月判断生肖属相”的程序,调试运行时,程序没有报错且顺利运行,但未能正确输出对应属相,造成这个结果的原因可能是?( ) A程序语句语法错误 B程序复杂度高,算法效率低 C Python的环境配置不对 D求解算法的逻辑错误 二、判断题(共10题, 共20分) 26.如果在函数内访问其作用域内不存在的变量,程序一定会报错。( ) 27.时间复杂度最小的是常数阶O(1)。( ) 28.某同学参加猜幸运数(幸运数范围是1-100之间)游戏:先猜50,主持人说偏大;然后猜25,主持人说偏小;然后又猜37……通过这种策略,该同学很快猜出幸运数,这体现了分治思想。( ) 29.某个问题既能用递归算法求解,又能用递推算法求解,则使用递归算法求解更容易,效率也高得多。( ) 30.执行如下代码,输出结果是95。( ) n = 100 while n > 0:     if n % 2:         break     elif n % 3 == 0:         n -= 5     else:         n -= 20 print(n) 31.编程时,必须把实现复杂功能的代码封装起来,设计成函数。( ) 32.自定义函数中可以不使用return语句,但匿名函数中要通过return语句返回运算结果。( ) 33.如果允许形参设置默认值,则函数定义时要先列出没有默认值的形参,再列出有默认值的形参。( ) 34.Numpy是Python的一个第三方库,是一个科学计算库,提供各种数学运算和科学计算的方法。( ) 35.变量作用域的使用可提高程序逻辑的局部性,增强程序的可靠性,减少名字冲突,有效提高程序运行效率。( ) 三、编程题(共3题, 共30分) 36.计算问题从1到n的数字(包含n),分别计算出能被k整除的数字之和与不能被k整除的数字之和,并输出它们差的绝对值,完成下列程序。 n = int(input("n=")) k = int(input("k=")) s1, s2 = 0, 0 for i in range(1, __①___): if (___②__ == 0): s1 = ___③____ else: s2 = ___④____ print(___⑤____) 37.劳动实践基地育才学校的劳动实践基地是一个巨大的矩形,参与劳动实践的同学们每次只能种一个正方形地块,每种一个正方形时所花的体力值是正方形的周长,本学期种过的地不可以再种,同学们想使用最少的体力值去种完这块田地,请帮助计算花费最小的体力值。输入格式 两个正整数 x,y,表示田地的长和宽。 输出格式 输出最小体力值。 输入样例1 1 10 输出样例1 40 输入样例2 2 2 输出样例2 8   def solve(x, y):     if x == y:         return        ①             if x > y:         a, b = x, y     else:         a, b =        ②             if         ③        :         return 4 * a     else:         return 4 * a + solve(        ④        , b) n, m = map(int, input().split()) print(solve(n, m)) 38、约瑟夫环2024年春节联欢晚会上,刘谦表演了一个纸牌魔术,深受观众欢迎。这个魔术的内容其实是一个经典的约瑟夫环问题,相当于n张牌形成一个环,依次循环报数,每次报到m的那一张牌扔掉,直到剩下最后一张牌。小智编写了以下程序来模拟8张牌的淘汰过程,请补充完成该程序。 def Josephus(num,gap):      location_list = [a for a in range(1,num+1)]      if num ==   1 :                 ①              else:          index = 0          for i in        ②        :             index = (index + gap - 1 )%        ③                     print("本次淘汰的牌为:",location_list[index])             del location_list[index]          print( "最后剩下的牌为:",location_list[        ④        ]) Josephus(8,2) 参考答案及解析: 一、单选题 1. 答案:A - 解析:分析函数`f(n)`,遍历 2 到`n`,判断素数且满足`i%3==1`则累加`i`。调用`f(13)`,经过计算`s`最终为 20,答案是 A。 2. 答案:D - 解析:局部变量和全局变量可以使用相同变量名,在函数内优先使用局部变量,屏蔽全局变量。 3. 答案:B - 解析:当自定义函数内某个变量与程序的全局变量使用相同的变量名时,优先调用局部变量,屏蔽全局变量。 4. 答案:D - 解析:先计算内部函数得值为 11,再计算`m = 5 * int(11) % 7 = 6`,根据索引从列表中取出“紫”,答案是 D。 5. 答案:D - 解析:`return a,b,c`将返回一个元组,而不是列表。 6. 答案:B - 解析:如果外层函数中不存在该变量,则会报错,不会继续向上寻找。 7. 答案:D - 解析:缩小枚举范围可以提高效率,107-800的范围更有针对性。 8. 答案:C - 解析:分治算法中问题所分解出的各个子问题是相互独立的,不能相互交叉。 9. 答案:D - 快速排序算法体现了分治算法思想,将问题分解为较小的子问题进行排序,然后合并。 10. 答案:B - 二分查找每次将区间缩小一半。 1. 第一次查找:区间为整个序列“166、168、169、171、172、175”,中间元素是 171,172>171,所以在右侧区间继续查找。 2. 第二次查找:区间变为“172、175”,中间元素是 172,找到了小王。 所以需要找 2 次才能够找到小王, 答案是 B。 11. 答案:C - 递归求阶乘,`n`的阶乘等于`n * (n - 1)`的阶乘,即`n * fun(n - 1)`。 12. 答案:D - 函数`fun`通过递归计算列表中所有元素的和,`[1,2,3,4,5]`的和为15。 13. 答案:B - 递归实现字符串反转,先反转后面的部分再加上第一个字符。 14. 答案:C - 函数`fun`通过递归重复拼接字符串`n`次。 15. 答案:D - 初始x = 1,循环中奇数且不是 3 的倍数被打印,打印出 1,5,7,11,13,15等奇数。 16. 答案:B - 根据循环和取余操作,打印出重复的`ABC`序列,使用`chr(ord('A') + j % 3)`可以得到正确结果。 17. 答案:C - 会多次用到的功能块适合设计成函数,提高代码复用性。 18. 答案:D - 传入的实参个数比形参个数少会导致程序运行时出错。 19. 答案:A - `result = lambda a:a+b`中`b`未定义。 20. 答案:D - 调用函数时实参和形参要对应,`myfunc(3,2,c=1)`正确地传入了三个参数。 21. 答案:D - 函数`prts`先打印传入的参数,再返回参数,调用`prts(prts(s))`会先打印`Py`,然后再打印返回的`Py`。 22. 答案:B - `*args`和`**kwargs`可以在调用函数时传入多个实参。 23. 答案:A - `return`语句中返回值的数据类型可以是字符串、列表等多种类型;一个函数中可以有多个`return`语句;`return`语句中可以有表达式;`return`可以返回多个值,返回的是元组。 24. 答案:C - 用`matplotlib`模块可以绘制函数图像。 25. 答案:D - 程序没有报错且顺利运行,但未能正确输出对应属相,可能是求解算法的逻辑错误。 二、判断题 26. 答案:错 - 如果在函数内访问其作用域内不存在的变量,会先在外部作用域查找,如果找不到才会报错。 27. 答案:对 - 时间复杂度最小的是常数阶`O(1)`,表示算法的执行时间不随输入规模的增长而增长。 28. 答案:对 - 猜幸运数的过程体现了分治思想,将问题范围不断缩小。 29. 答案:错 - 虽然递归算法代码简洁,但效率不一定比递推算法高,递归可能会有重复计算,效率可能较低。 30. 答案:错 - 程序中当`n = 100`时,不满足`n % 2`,执行`n -= 20`,变为80;接着不满足`n % 2`,又执行`n -= 20`,变为60;继续不满足`n % 2`,执行`n -= 20`,变为40;还是不满足`n % 2`,执行`n -= 20`,变为20;此时满足`n % 2 == 0`且`n % 3 == 0`,执行`n -= 5`,变为15。所以输出结果是15。 31. 答案:错 - 不是必须把实现复杂功能的代码封装起来设计成函数,要根据实际情况决定。 32. 答案:错 - 自定义函数中也可以不使用`return`语句而直接打印结果等;匿名函数中也可以不通过`return`语句,直接在表达式中返回结果。 33. 答案:对 - 如果允许形参设置默认值,函数定义时要先列出没有默认值的形参,再列出有默认值的形参。 34. 答案:对 - `Numpy`是一个科学计算库,提供各种数学运算和科学计算的方法。 35. 答案:错 - 变量作用域可提高程序逻辑局部性、增强可靠性、减少名字冲突,但不一定能有效提高程序运行效率,故答案为错误。 三、编程题 36. 参考代码: n = int(input("n=")) k = int(input("k=")) s1, s2 = 0, 0 for i in range(1, n + 1): if (i % k == 0): s1 = s1 + i else: s2 = s2 + i print(abs(s1 - s2)) 答案解析: 1. 第①是`n + 1`,因为要包含`n`这个数字,所以循环范围应该是`range(1, n + 1)`。 2. 第②是`i % k`,判断`i`是否能被`k`整除。 3. 第③空是`s1 + i`,如果能被整除,将`i`累加到`s1`。 4. 第④空是`s2 + i`,如果不能被整除,将`i`累加到`s2`。 5. 第⑤空是`abs(s1 - s2)`,输出`s1`和`s2`差的绝对值。 37.参考代码: def solve(x, y): if x == y: return 4 * x if x > y: a, b = x, y else: a, b = y, x if b == 0: return 4 * a else: return 4 * a + solve(a % b, b) n, m = map(int, input().split()) print(solve(n, m)) 答案解析: 1. 第①为“4 * x”,当矩形的长和宽相等时,即种一个边长为 x 的正方形,其周长为 4x,这是最小体力值。 2. 第②为“y, x”,如果输入的 x 小于 y,需要交换 x 和 y 的值,保证 a 是较大的边长,b 是较小的边长。 3. 第③为“b == 0”,当较小的边长 b 为 0 时,说明已经完成了分割,返回当前最大正方形的周长 4 * a。 4. 第④为“a % b, b”,每次用较大边长 a 除以较小边长 b 的余数和较小边长 b 作为新的长和宽继续递归计算。 38.参考代码: def Josephus(num, gap): location_list = [a for a in range(1, num + 1)] if num == 1: print("最后剩下的牌为:", location_list[0]) else: index = 0 for i in range(num): index = (index + gap - 1) % len(location_list) print("本次淘汰的牌为:", location_list[index]) del location_list[index] print("最后剩下的牌为:", location_list[0]) Josephus(8, 2) 答案解析: 1. ①如果只有一张牌,直接输出这张牌,即`print("最后剩下的牌为:", location_list[0])`。 2. ②循环`num`次,即`range(num)`,表示进行`num`轮淘汰。 3. ③每次计算下一个要淘汰的牌的索引时,要对当前列表长度取模,即`% len(location_list)`。 4. ④当只剩下一张牌时,索引为 0,即`location_list[0]`。 学科网(北京)股份有限公司 $$

资源预览图

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