2022年12月电子学会Python等级考试试卷(四级)答案解析
青少年软件编程(Python)等级考试试卷(四级)
一、单选题(共25题,共50分)
1. | 有n个按名称排序的商品,使用对分查找法搜索任何一商品, 最多查找次数为5次,则n的值可能为?( ) | ||||||||
| |||||||||
试题编号:20220428-fcl-017 | |||||||||
试题类型:单选题 | |||||||||
标准答案:C | |||||||||
试题难度:一般 | |||||||||
试题解析:对分查找最多查找次数m与个数之间n的关系是:n对2的对数的取整后加1, 现在最多查找次数是5次,因此n的取值范围在[2^4+1,2^5]即[16,31]之间,因此选C。 | |||||||||
考生答案:C | |||||||||
考生得分:2 | |||||||||
是否评分:已评分 | |||||||||
评价描述: |
2. | 下列有关分治算法思想的描述不正确的是?( ) | ||||||||
| |||||||||
试题编号:20220428-fcl-020 | |||||||||
试题类型:单选题 | |||||||||
标准答案:D | |||||||||
试题难度:一般 | |||||||||
试题解析:将问题分解出的各个子问题是相互独立的,即子问题之间不包含公共子子问题 | |||||||||
考生答案:D | |||||||||
考生得分:2 | |||||||||
是否评分:已评分 | |||||||||
评价描述: |
3. | 下列问题使用分治算法思想的是?( ) | ||||||||
| |||||||||
试题编号:20220428-fcl-022 | |||||||||
试题类型:单选题 | |||||||||
标准答案:D | |||||||||
试题难度:一般 | |||||||||
试题解析:快速排序算法使用了分治算法。因此选D。 | |||||||||
考生答案:C | |||||||||
考生得分:0 | |||||||||
是否评分:已评分 | |||||||||
评价描述: |
4. | 李宇同学利用Python语言编写了一段“根据出生年月判断生肖属相”的程序,调试运行时, 程序没有报错且顺利运行,但未能正确输出对应属相,造成这个结果的原因可能是?( ) | ||||||||
| |||||||||
试题编号:20220501-tr-031 | |||||||||
试题类型:单选题 | |||||||||
标准答案:C | |||||||||
试题难度:一般 | |||||||||
试题解析:程序能正常运行,排除了其他三个可能。 | |||||||||
考生答案:C | |||||||||
考生得分:2 | |||||||||
是否评分:已评分 | |||||||||
评价描述: |
5. | 一般来说,递归需要有边界条件、递归前进段和递归返回段。当不满足边界条件时,( ); 当满足边界条件时,( )。 | ||||||||
| |||||||||
试题编号:20220501-zwy-003 | |||||||||
试题类型:单选题 | |||||||||
标准答案:C | |||||||||
试题难度:容易 | |||||||||
试题解析:递归运行的条件,不满足边界条件前进,满足返回。 | |||||||||
考生答案:C | |||||||||
考生得分:2 | |||||||||
是否评分:已评分 | |||||||||
评价描述: |
6. | 以下哪一项不是递归算法的特征?( ) | ||||||||
| |||||||||
试题编号:20220501-zwy-016 | |||||||||
试题类型:单选题 | |||||||||
标准答案:D | |||||||||
试题难度:一般 | |||||||||
试题解析:未到达判断条件时,可以返回该函数,也可以不返回。 | |||||||||
考生答案:D | |||||||||
考生得分:2 | |||||||||
是否评分:已评分 | |||||||||
评价描述: |
7. | 关于斐波那契数列,下列空白处的代码填写正确的是?( ) def func(num): if num==1: return 1 elif num==2: return 1 else:
lst=[] b=input('请输入选择的数字:') b1=int(b) for a in range(1,b1+1): print(func(a)) lst.append(func(a)) a+=1 print(lst) | ||||||||
| |||||||||
试题编号:20220501-zwy-017 | |||||||||
试题类型:单选题 | |||||||||
标准答案:C | |||||||||
试题难度:较难 | |||||||||
试题解析:斐波那契数列,从第三项开始,每一项都等于前两项之和。 | |||||||||
考生答案:C | |||||||||
考生得分:2 | |||||||||
是否评分:已评分 | |||||||||
评价描述: |
8. | 在有序列表[2,3,10,15,20,25,28,29,30,35,40]中,使用二分法查找20, 需要查找多少次能找到?( ) | ||||||||
| |||||||||
试题编号:20220501-zwy-019 | |||||||||
试题类型:单选题 | |||||||||
标准答案:B | |||||||||
试题难度:容易 | |||||||||
试题解析:可以模拟二分法的执行过程分析得出。 | |||||||||
考生答案:B | |||||||||
考生得分:2 | |||||||||
是否评分:已评分 | |||||||||
评价描述: |
9. | 下列程序输出正确的是?( ) def ac(n): if n < 0: return else: ac(n-1) print(n) ac(4) | ||||||||
| |||||||||
试题编号:20220501-zwy-020 | |||||||||
试题类型:单选题 | |||||||||
标准答案:C | |||||||||
试题难度:一般 | |||||||||
试题解析:依次输出0-4,print()默认换行。 | |||||||||
考生答案:C | |||||||||
考生得分:2 | |||||||||
是否评分:已评分 | |||||||||
评价描述: |
10. | 阅读下列程序,运行结果正确的是?( ) def power(x,y): if y==0: return 1 else: return x * power(x,y-1) print(power(4,5)) | ||||||||
| |||||||||
试题编号:20220501-zwy-023 | |||||||||
试题类型:单选题 | |||||||||
标准答案:D | |||||||||
试题难度:较难 | |||||||||
试题解析:power(a,b)表示a的b次幂,当y不等于0,返回x*power(x,y-1)。 据题,x=4,y=5,因此4*power(4,4),即4*(4的4次幂),结果为1024。 | |||||||||
考生答案:D | |||||||||
考生得分:2 | |||||||||
是否评分:已评分 | |||||||||
评价描述: |
11. | 下载但不安装一个第三方库的命令格式是?( ) | ||||||||
| |||||||||
试题编号:20220502-cj-001 | |||||||||
试题类型:单选题 | |||||||||
标准答案:D | |||||||||
试题难度:容易 | |||||||||
试题解析: pip search为搜索三方包 pip install为安装三方包 pip uninstall为卸载三方包 | |||||||||
考生答案:D | |||||||||
考生得分:2 | |||||||||
是否评分:已评分 | |||||||||
评价描述: |
12. | 不需要使用Python的pip工具安装的是?( ) | ||||||||
| |||||||||
试题编号:20220502-cj-002 | |||||||||
试题类型:单选题 | |||||||||
标准答案:A | |||||||||
试题难度:容易 | |||||||||
试题解析:其它要安装 | |||||||||
考生答案:A | |||||||||
考生得分:2 | |||||||||
是否评分:已评分 | |||||||||
评价描述: |
13. | 使用lambda定义匿名函数如下:f=lambda x:x+1,则f(f(1))代码运行结果是?( ) | ||||||||
| |||||||||
试题编号:20220502-cj-005 | |||||||||
试题类型:单选题 | |||||||||
标准答案:C | |||||||||
试题难度:较难 | |||||||||
试题解析:f(1)=2,f(2)=3 | |||||||||
考生答案:C | |||||||||
考生得分:2 | |||||||||
是否评分:已评分 | |||||||||
评价描述: |
14. | 关于函数,以下选项中描述错误的是?( ) | ||||||||
| |||||||||
试题编号:20220502-cj-008 | |||||||||
试题类型:单选题 | |||||||||
标准答案:D | |||||||||
试题难度:一般 | |||||||||
试题解析:Python 使用“def”保留字定义一个函数。 | |||||||||
考生答案:D | |||||||||
考生得分:2 | |||||||||
是否评分:已评分 | |||||||||
评价描述: |
15. | 某自定义函数有两个参数,并且这两个参数都指定了默认值。我们在调用这个函数时,最少需要提供几个实参?( ) | ||||||||
| |||||||||
试题编号:20220502-cj-010 | |||||||||
试题类型:单选题 | |||||||||
标准答案:A | |||||||||
试题难度:容易 | |||||||||
试题解析:只要有默认值就可以省略。 | |||||||||
考生答案:A | |||||||||
考生得分:2 | |||||||||
是否评分:已评分 | |||||||||
评价描述: |
16. | 以下关于Python中使用函数的描述,错误的是?( ) | ||||||||
| |||||||||
试题编号:20220502-cj-013 | |||||||||
试题类型:单选题 | |||||||||
标准答案:A | |||||||||
试题难度:一般 | |||||||||
试题解析:Python程序不必一定要有main函数。 | |||||||||
考生答案:A | |||||||||
考生得分:2 | |||||||||
是否评分:已评分 | |||||||||
评价描述: |
17. | 在Python中,函数通过可变参数*args传入的参数,在函数内以哪种数据类型存储?( ) | ||||||||
| |||||||||
试题编号:20220502-cj-014 | |||||||||
试题类型:单选题 | |||||||||
标准答案:A | |||||||||
试题难度:一般 | |||||||||
试题解析:可变参数在函数内以元组方式存储。 | |||||||||
考生答案:B | |||||||||
考生得分:0 | |||||||||
是否评分:已评分 | |||||||||
评价描述: |
18. | 下列关于函数调用的说法正确的是?( ) | ||||||||
| |||||||||
试题编号:20220516-cqf-11 | |||||||||
试题类型:单选题 | |||||||||
标准答案:C | |||||||||
试题难度:容易 | |||||||||
试题解析:调用函数时不一定是必须要给参数赋值的;先导入第三方库, 再调用第三方库里的函数;有默认值的参数也可以赋新值。 | |||||||||
考生答案:C | |||||||||
考生得分:2 | |||||||||
是否评分:已评分 | |||||||||
评价描述: |
19. | 自定义函数的关键字是?( ) | ||||||||
| |||||||||
试题编号:20220516-cqf-12 | |||||||||
试题类型:单选题 | |||||||||
标准答案:C | |||||||||
试题难度:容易 | |||||||||
试题解析:自定义函数的关键字是def。 | |||||||||
考生答案:C | |||||||||
考生得分:2 | |||||||||
是否评分:已评分 | |||||||||
评价描述: |
20. | 下列选项中不能作为自定义函数名的是?( ) | ||||||||
| |||||||||
试题编号:20220516-cqf-13 | |||||||||
试题类型:单选题 | |||||||||
标准答案:D | |||||||||
试题难度:容易 | |||||||||
试题解析:函数名不能以数字开头。 | |||||||||
考生答案:D | |||||||||
考生得分:2 | |||||||||
是否评分:已评分 | |||||||||
评价描述: |
21. | 函数定义如下: def func(a,b=0,c=0): pass 下列选项调用错误的是?( ) | ||||||||
| |||||||||
试题编号:20220516-cqf-16 | |||||||||
试题类型:单选题 | |||||||||
标准答案:C | |||||||||
试题难度:容易 | |||||||||
试题解析:C选项中连续输入了两个逗号,解释器会报语法错误。 | |||||||||
考生答案:C | |||||||||
考生得分:2 | |||||||||
是否评分:已评分 | |||||||||
评价描述: |
22. | 下列选项中,函数定义错误的是?( ) | ||||||||
| |||||||||
试题编号:20220516-cqf-17 | |||||||||
试题类型:单选题 | |||||||||
标准答案:D | |||||||||
试题难度:一般 | |||||||||
试题解析:可变参数必须在不可变参数的后面。 | |||||||||
考生答案:C | |||||||||
考生得分:0 | |||||||||
是否评分:已评分 | |||||||||
评价描述: |
23. | 运行下列代码,输出结果为?( ) def func(a,b,*args): print(a) print(b) print(args) func(1,2,3,4,5,6) | ||||||||
| |||||||||
试题编号:20220516-cqf-18 | |||||||||
试题类型:单选题 | |||||||||
标准答案:B | |||||||||
试题难度:较难 | |||||||||
试题解析:a,b是位置参数,所以a=1,b=2,其余的参数会被*args收集打包放进一个元组中, 即(3,4,5,6)。 | |||||||||
考生答案:B | |||||||||
考生得分:2 | |||||||||
是否评分:已评分 | |||||||||
评价描述: |
24. | 下列关于函数的说法正确的是?( ) | ||||||||
| |||||||||
试题编号:20220516-cqf-2 | |||||||||
试题类型:单选题 | |||||||||
标准答案:C | |||||||||
试题难度:容易 | |||||||||
试题解析:函数的调用次数没有限制,A错误;函数的返回值可以赋值给变量, B错误;调用没有参数的函数时,函数名后面也要跟一对圆括号,D错误。 | |||||||||
考生答案:C | |||||||||
考生得分:2 | |||||||||
是否评分:已评分 | |||||||||
评价描述: |
25. | 下列选项中,不是函数的是?( ) | ||||||||
| |||||||||
试题编号:20220516-cqf-6 | |||||||||
试题类型:单选题 | |||||||||
标准答案:C | |||||||||
试题难度:容易 | |||||||||
试题解析:Python中string为模块 | |||||||||
考生答案:C | |||||||||
考生得分:2 | |||||||||
是否评分:已评分 | |||||||||
评价描述: |
二、判断题(共10题,共20分)
26. | 计算下面这段程序的时间复杂度为平方阶:O(n^2)。( ) sum1=0 for i in range(101): sum1+=i | |||
| ||||
试题编号:20220501-tr-032 | ||||
试题类型:判断题 | ||||
标准答案:错误 | ||||
试题难度:一般 | ||||
试题解析:时间复杂度为线性阶,计O(n)。 | ||||
考生答案:错误 | ||||
考生得分:2 | ||||
是否评分:已评分 | ||||
评价描述: |
27. | 汉诺塔游戏是递归调用的经典案例。( ) | |||
| ||||
试题编号:20220501-zwy-029 | ||||
试题类型:判断题 | ||||
标准答案:正确 | ||||
试题难度:容易 | ||||
试题解析:汉诺塔是学习递归算法最为常见的例子。 | ||||
考生答案:正确 | ||||
考生得分:2 | ||||
是否评分:已评分 | ||||
评价描述: |
28. | 递推关系是递归的重要组成。( ) | |||
| ||||
试题编号:20220501-zwy-030 | ||||
试题类型:判断题 | ||||
标准答案:正确 | ||||
试题难度:一般 | ||||
试题解析:对于递归而言,递推与回归,二者缺一不可。 | ||||
考生答案:正确 | ||||
考生得分:2 | ||||
是否评分:已评分 | ||||
评价描述: |
29. | 以下命令: pip get pandas 用于下载第三方库pandas,但不马上安装。( ) | |||
| ||||
试题编号:20220502-cj-003 | ||||
试题类型:判断题 | ||||
标准答案:错误 | ||||
试题难度:容易 | ||||
试题解析:没有get这个命令。 | ||||
考生答案:正确 | ||||
考生得分:0 | ||||
是否评分:已评分 | ||||
评价描述: |
30. | 使用Python语言编程,可以定义一个名叫pass的函数。( ) | |||
| ||||
试题编号:20220502-cj-011 | ||||
试题类型:判断题 | ||||
标准答案:错误 | ||||
试题难度:容易 | ||||
试题解析:pass是保留字。 | ||||
考生答案:错误 | ||||
考生得分:2 | ||||
是否评分:已评分 | ||||
评价描述: |
31. | 函数中没有return语句或者return语句不带任何返回值,那么该函数的返回值为True。( ) | |||
| ||||
试题编号:20220502-cj-012 | ||||
试题类型:判断题 | ||||
标准答案:错误 | ||||
试题难度:容易 | ||||
试题解析:返回值为None | ||||
考生答案:错误 | ||||
考生得分:2 | ||||
是否评分:已评分 | ||||
评价描述: |
32. | 在Python中调用函数的时候,必须将每个实参都关联到函数定义中的每一个形参, 最简单的关联方式就是基于实参的顺序。但也可以通过关键字实参的“关键字-值”方式关联形参, 这时就不必考虑函数调用过程中实参的顺序。( ) | |||
| ||||
试题编号:20220503-cj-002 | ||||
试题类型:判断题 | ||||
标准答案:正确 | ||||
试题难度:容易 | ||||
试题解析: | ||||
考生答案:错误 | ||||
考生得分:0 | ||||
是否评分:已评分 | ||||
评价描述: |
33. | 在Python中,全局变量名和局部变量名一定不能重名。( ) | |||
| ||||
试题编号:20220516-cqf-14 | ||||
试题类型:判断题 | ||||
标准答案:错误 | ||||
试题难度:一般 | ||||
试题解析:全局变量名和局部变量名可以是相同的变量名。 | ||||
考生答案:错误 | ||||
考生得分:2 | ||||
是否评分:已评分 | ||||
评价描述: |
34. | 调用函数时,Python将形式参数传递给实际参数。( ) | |||
| ||||
试题编号:20220516-cqf-15 | ||||
试题类型:判断题 | ||||
标准答案:错误 | ||||
试题难度:容易 | ||||
试题解析:调用函数时,Python将实际参数传递给形式参数。 | ||||
考生答案:错误 | ||||
考生得分:2 | ||||
是否评分:已评分 | ||||
评价描述: |
35. | 分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题, 这些子问题相互独立且与原问题性质相同。( ) | |||
| ||||
试题编号:20220428-fcl-030 | ||||
试题类型:判断题 | ||||
标准答案:正确 | ||||
试题难度:容易 | ||||
试题解析:分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题, 这些子问题相互独立且与原问题性质相同。 | ||||
考生答案:正确 | ||||
考生得分:2 | ||||
是否评分:已评分 | ||||
评价描述: |
三、编程题(共3题,共30分)
36. | 从键盘接收一组不重复整数,并将这组整数按从小到大的顺序排列。 以下程序采取快速排序法对这组整数进行排序。 快速排序法的原理是: (1)取这组数据中间那个数为锚定值mid; (2)从这组数据开头往右找,遇到比mid大的数则停下,位置记为i; (3)从这组数据末尾往左找,遇到比mid小的数则停下,位置记为j; (4)如果此时i仍在j左边,即i<=j,则交换这两个数; (5)重复(2)~(4)直到i、j重合; (6)对i左边的数进行快速排序; (7)对右边的数进行快速排序。 输入示例: 请输入需要排序的一组整数,数与数之间用空格隔开:6 10 11 8 4 1 9 7 输出示例: 排序结果:1 4 6 7 8 9 10 11 程序模板: def QuickSort(left,right): if ① : return mid=Numbers[left+(right-left)//2] i=left j=right while i<j: while Numbers[i]<mid: i+=1 while Numbers[j]>mid: j-=1 if i<=j: ② QuickSort(left,j-1) QuickSort(i+1,right) Numbers=list(map(int,input("请输入需要排序的一组整数,数与数之间用空格隔开:"). ③ )) QuickSort(0, ④ ) print("排序结果:",end="") for i in Numbers: print(i,end=" ") |
试题编号:202212-P4-36 | |
试题类型:编程题 | |
标准答案: 参考程序: def QuickSort(left,right): if left>=right: return mid=Numbers[left+(right-left)//2] i=left j=right while i<j: while Numbers[i]<mid: i+=1 while Numbers[j]>mid: j-=1 if i<=j: Numbers[i],Numbers[j]=Numbers[j],Numbers[i] QuickSort(left,j-1) QuickSort(i+1,right) Numbers=list(map(int,input("请输入需要排序的一组整数,数与数之间用空格隔开:").split())) QuickSort(0,len(Numbers)-1) print("排序结果:",end="") for i in Numbers: print(i,end=" ") | |
试题难度:较难 | |
试题解析: 评分标准: (1)left>=right;(2分) (2)Numbers[i],Numbers[j]=Numbers[j],Numbers[i];(2分) (3)split();(2分) (4)len(Numbers)-1。(2分) | |
考生答案:(此题已作答) | |
考生得分:6 | |
是否评分:已评分 | |
评价描述: |
37. | 鸡兔同笼是中国古代的数学名题之一。大约在1500年前,《孙子算经》中就记载了这个有趣的问题。 书中是这样叙述的: 今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何? 意思是:有若干只鸡兔同在一个笼子里(笼中最少有一只鸡和一只兔), 从上面数,有35个头,从下面数,有94只脚。问笼中各有多少只鸡和兔? 今天我们用编程的方法来求解一下这道数学命题吧。 def ji_tu(head,leg): j=0 t=0 while j<head: j += 1 t = ① if (leg== ② ): print('有鸡{}只,有兔子{}只。'.format( ③ )) return (j,t) while True: try: sum_head=int(input('请输入总头数:')) sum_leg=int(input('请输入总脚数:')) if ④ : print('输入鸡和兔子的总头数或总脚数错误,请重新输入!') else: ji_tu( ⑤ ) except: print('能不能正常输入数据?') |
试题编号:202212-P4-37 | |
试题类型:编程题 | |
标准答案: 参考程序: def ji_tu(head,leg): j=0 t=0 while j<head: j += 1 t = head-j if (leg==(j*2+t*4)): print('有鸡{}只,有兔子{}只。'.format(j,t)) return (j,t) while True: try: sum_head=int(input('请输入总头数:')) sum_leg=int(input('请输入总脚数:')) if sum_head<2 or sum_leg<6: print('输入鸡和兔子的总头数或总脚数错误,请重新输入!') else: ji_tu(sum_head,sum_leg) except: print('能不能正常输入数据?') | |
试题难度:一般 | |
试题解析: 评分标准: (1)head-j ; (2分) (2)(j*2+t*4); (3分) (3)j,t; (2分) (4)sum_head<2 or sum_leg<6 ; (3分) (5)sum_head,sum_leg。 (2分) | |
考生答案:(此题已作答) | |
考生得分:4 | |
是否评分:已评分 | |
评价描述: |
38. | 有一个游戏:有两个人,第一个人先从1和2中挑一个数字, 第二个人可以在对方的基础上选择加1或者加2,然后又轮到第一个人,他也可以选择加1或者加2, 之后再把选择权交给对方,就这样双方交替地选择加1或者加2,谁先加到20,谁就赢了。 在不考虑谁输谁赢的情况下,从一开始(以1或2为起点)加到20, 有多少种不同的递加过程?比如1,4,7,10,12,15,18,20算一种; 2,5,8,11,14,17,20又是一种。那么一共会有多少种这样的过程呢? 我们可以用递归算法来解决这个问题,请补全代码。 def guo_cheng(n): if ① : return 1 return ② # 输出所有过程的个数 print (guo_cheng( ③ )) |
试题编号:202212-P4-38 | |
试题类型:编程题 | |
标准答案: 参考程序: def guo_cheng(n): if n==1 or n==2: return 1 return guo_cheng(n-1)+guo_cheng(n-2) # 输出所有过程的个数 print (guo_cheng(20)) | |
试题难度:一般 | |
试题解析: 评分标准: (1)n==1 or n==2; (3分) (2)guo_cheng(n-1)+guo_cheng(n-2) ; (4分) (3)20 。 (3分) | |
考生答案:(此题已作答) | |
考生得分:0 | |
是否评分:已评分 | |
评价描述: |