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

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

内容正文:

青少年软件编程(Python)等级考试试卷(四级) 202303真题与解析 分数:100  题数:38 测试时长:60分钟 一、单选题(共25题,每题2分,共50分) 1. 运行下列程序,输出的结果是?( )  def wenhao(name = 'zhejiang'): print('hello' + name) wenhao()           A. hello B. hellozhejiang C. helloname D. 程序将提示运行错误 2. 运行下列程序,输出的结果是?( )         rst = lambda a,b=5:a*b           print(rst(5))          A. 5 B. 15 C. 25 D. 35 3. 运行下列程序,输出的结果是?( )        def jsarea(r, PI = 3.14): area = PI * r * r print(jsarea(1))          A. 3.14 B. 因缺失参数,不能计算 C. None D. 程序代码有错误 4. 运行下列程序,输出的结果是?( )         def js(n): s = 0 while n: s = s * 10+n % 10 n //= 10 return s print(js(20230110))         A. 20230110 B. 01103202 C. 2301102 D. 1103202 5. 在传递信息的过程中, 通常会将一些敏感信息进行加密,以下是对数据进行加密的Python程序段,若输入数据为“cie0108”,则输出的结果是?( )          def jm(t): s = "" for ch in t: if "0" <= ch <= "9": x = int(ch) + 3 if x >= 10: x = x % 10 ch = str(x) s = s + ch return s print(jm('cie0108'))          A. 1343eic B. 0108cie C. cie3431 D. 3431cie 6. 运行下列程序,输出的结果是?( )          s = 0 def f(n): global s for i in range(n): s = s + i return s print(f(f(3)))    A. 3 B. 6 C. 9 D. 0 7. 运行下列程序后,输出的结果是?( )         def jsh(n): if n == 1: return 1 else: return n + jsh(n-1) print(jsh(10))       A. 1 B. 35 C. 45 D. 55 8. 运行下列程序后,输出的结果是?( )          def fun(s): if len(s) == 1: return s else: return fun(s[1:]) + s[0] print(fun('CIE2023')) A. 3202EIC B. EIC3202 C. 3220EIC D. EIC2023 9. 下列有关递归的描述中,正确的是?( ) A. 递归函数中肯定有循环结构; B. 递归没有体现“大事化小”的思想; C. 递归有明确的结束递归的边界条件; D. 递归执行效率较高。 10. 运行下列程序,运行的结果是?( )         def leijia(x): x += 1 return x x=10 y=leijia(x) print(y)         A. 1 B. 10 C. 11 D. None 11. 关于分治算法特征的描述中,错误的是?( ) A. 当问题的规模缩小到一定的程度就可以容易地解决; B. 问题可以分解为若干个规模较小的相同问题; C. 该问题所分解出的各个子问题是可以相互独立,也可以相互交叉; D. 该问题分解出的子问题的解可以合并为该问题的解。 12. 张老师有n(范围在1到15之间)个礼物分给同学们,他请同学们猜礼物的数量,请问同学们猜几次后肯定知道礼物的数量(不算运气成分第1次或第2次就猜到)?( ) A. 15 B. 7 C. 4 D. 3 13. 下列排序算法中,时间复杂度最小的是?( ) A. 插入排序 B. 冒泡排序 C. 快速排序 D. 选择排序 14. 小方要在程序中生成[10,99]之间的随机整数,下列程序不能实现的是?( ) A. import random a = random.randint(10,99) B. import random as t a = t.randint(10,99) C. from random import randint a = randint(10,99) D. from random import randint as t a = t.randint(10,99) 15. 下列哪个关键字可用来创建自定义函数?( ) A. function; B. def; C. class; D. procedure。 16. 在 Python 语言中,求列表长度用下列哪个函数?( ) A. size B. len C. length D. Str 17. 下列关于函数返回值的描述中,正确的是?( ) A. Python函数的返回值使用很灵活,可以没有返回值,可以有一个或多个返回值。 B. 函数定义中最多含有一个return语句。 C. 在函数定义中使用return语句时,至少给一个返回值 D. 函数只能通过print语句和return语句给出运行结果 18. 下列有关自定义函数的描述,正确的是?( ) A. 函数的定义必须在程序的开头; B. 函数定义后,其中的程序可以自动执行; C. 函数定义后需要调用才会执行; D. 函数体与关键字必须左对齐。 19. 运行下列程序,输出的结果是?( ) Sum=1 for i in range (1,5): Sum=Sum*i print(Sum,i) A. 24;5 B. 120;5 C. 24;4 D. 120;4 20. 关于下列代码的描述,错误的是?( ) def fact(n): s=1 for i in range(1,n+1): s*=i return s A. s不能在函数外使用 B. range()函数是Python内置函数 C. 如果n=4,返回的值为24 D. 代码中n是可选参数 21. 某人将自己密码旅行箱的密码遗忘了。当事人记起密码是一个三位自然数,并且密码个位数是8,其它位含1但不能确定是哪一位。请将所有可能的密码遍历出来。        请完成程序并运行?( )           for x in range(100,__ ①__): #三位密码的范围           if ____ ②___ and "1" in str(x): #符合条件的密码           print(x) A. 999;x%10=8 B. 999:x%10==8 C. 1000;x%10=8 D. 1000;x%10==8 22. 甲同学第一天跳绳100下,第二天开始每天增加5下;乙同学第一天跳绳100下,每隔一天增加10下。计算30天两人的跳绳总数。        甲的跳绳数:100、105、110、115、120……        乙的跳绳数:100、100、110、110、120……         请补全程序代码?( )         a=100 #甲同学第一天跳绳次数         b=100 #乙同学第一天跳绳次数          x=a #甲同学累计跳绳次数,初始值是第一天的次数          y=b #乙同学累计跳绳次数,初始值是第一天的次数         #从第二天开始迭代计算         for i in range(2,31):         a= ① #甲同学每天增加5次        if i%2==1: #当天数为奇数时        b= ② #乙同学增加10次       x=x+a       y=y+b         print("甲同学30天跳绳",x,"下")      print("乙同学30天跳绳",y,"下")      A. a+5;b+10 B. +5;+10 C. a+10;b+5 D. +10;+5 23. 用递归算法计算10的阶乘10!的值#自定义阶乘函数。自定义函数fact(n)是求n的阶乘。         10!=1×2×3×…×10       请补全程序代码?( )           #自定义函数           def fact(n): #求阶乘           if(n==1): #终止条件           return 1 #结束递归           else: #递归条件           p=__①____ #调用递归(自身)           return p #返回乘积           #主程序           print("10!=",fact(10)) #调用递归 A. n*fact(n-1) B. n*fact(n) C. n*fact(n+1) D. n**fact(n) 24. 用分治法查找列表中是否存在指定的数字。给定的列表已升序排序。请补全程序代码?( )      #在列表cards中查找数字x,返回下标值,若未找到,返回-1      def serch(cards=list,x=int):           a=0 #定义左端点下标           b=len(cards)-1 #定义右端点下标           #逐级分割查找范围,缩小查找规模           while a<=b:           m=(a+b)//2 #定义中点下标           if x==cards[m]: #x刚好等于中点值           return m           elif ① : #x<中点值,说明x位于左段位置           b=m-1 #重新定义右端点           else:           a=m+1 #重新定义左端点           return -1 #未找到,返回-1           #主程序           #在列表d中查找用户输入的数字r           d=[1,6,16,24,44,46,79,80,81,82,87,102,134,151,156,188,196,202,212,226,228,248,272,274,286,306,321,351,363]           print(d) #显示一下列表d           r=int(input("请输入要查找的数字:"))           y=serch(d,r) #调用子函数,d,r是实参           if y>=0:           print("已找到",r,",它是列表中第",y+1,"个数字")           else:           print("未找到",r) A. x<cards[m-1] span="span"> B. x     <cards[m]< span>     </cards[m]<> C. x>cards[m-1] D. x>cards[m] 25. 下列不属于Python数据分析与可视化第三方库的是?( ) A. pandas B. matplotlib C. opencv D. numpy 二、判断题(共10题,共20分) 26. 关键字实参通过“关键字=值”的方式传值,不需要考虑函数调用过程中形参的顺序。( ) 27. 函数是将实现相同功能的代码封装在一起,实现代码复用。( ) 28. 创建自定义函数时,不需要声明函数形参的类型,形参的类型由调用自定义函数时传递的实参类型确定。( ) 29. 递推是按照一定的规律计算序列中的每一项,通常是通过计算前面的一些项来计算后一项的值。( ) 30. 某同学用天平称量的过程如下:先放置100克砝码,砝码偏重;再将砝码改为50克,砝码偏轻;又将砝码改为75克……通过这种策略,该同学很快完成物品称重工作,这体现了分治思想。( ) 31. 使用"pip install-upgrade pandas"命令能够升级pandas库。( ) 32. Python中调用close()函数可实现对文件内容的读取。( ) 33. 下面的程序会输出两个值。( ) def r(a,b): s=a+b b+=1 return s print(r(3,8)) 34. 一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。如果所有兔子都不死,那么一年以后可以繁殖多少对兔子?         经分析,从第三个月起,每个月的兔子数是上个月与上上个月兔子之和。         请判读以下程序是否正确。( )         #自定义函数         def fib(n): #斐波那契数列        if n<=2:       return 1       else:      return fib(n-1)+fib(n-2) #前两个数字之和     #主程序,显示每个月兔子数(斐波那契数列)      for i in range(1,13):       print("第",i,"个月兔子对数为:",fib(i))   35. 下列两个代码块的功能一样。( )           A.if(year%4)==0:           if(year%100)==0:           print(year)           B.if(year%4)==0 and (year%100)==0:           print(year)           三、编程题(共3题,共30分) 36. 换位密码法是将明文中的字符位置通过一定的规则重新排列从而得到密文的一种加密方法。某换位密码法加密方法如下:先把明文按照固定长度(4位一组)进行分组,然后对每一组的字符进行换位操作,从而得到密文。例如, 字符串"ceit",使用密钥1432进行加密时,首先将字符串以 4 个字符为一组进行分组,然后对每组的字符进行换位,第1个和第3个字符位置不变,把第2个字符和第4个字符交换位置,从而得到密文"ctie"。小张编写的程序如下,请完善划线处的代码:        def jiami(yw,key):           result = ''           for i in range(0, ① ,len(key)):           s1=yw[i:i+ len(key) ]           for j in range( ② ):           result = result + ③           return result           yw= input('请输入待加密的明文:')           key= input('请输入密钥:')           mw= ④           print(mw)           运行结果如下图所示:           37. 一张长方形的纸,长m米,宽n米(长宽均为整数),现在要把它刚好裁成一些正方形(边长是整数),有几种裁法,如果要使裁得的正方形面积最大,可以裁多少块。小明学习了递归后,编写程序如下,首先输入长方形的长和宽,计算出结果。请完善划线处的代码:           def tj(a,b):           c = 0           minn = ①           if a > b:           minn = b           for i in range(1,minn+1):           if a % i == 0 and b % i == 0:           c = ②           return c           def gcd(a,b):           if b == 0:           return a           return ③           chang = int(input('输入长方形的长 (单位cm)'))           kuan = int(input('输入长方形的宽 (单位cm)'))           bianchang = gcd(chang,kuan)           total = ④           num = tj(chang,kuan)           print('------------结果如下-------------')           print('有{}种裁法'.format(num))           print('裁得的正方形面积最大边长是{}cm,可以裁{}块'.format(bianchang,total))                     运行后的结果如下图所示:                              38. 商超采用会员制,客户的消费信息如会员号、姓名和积分如下表所示,小方的爸爸想编写一个客户信息管理系统,其中有一个功能是:输入会员号,查询该会员的积分。                     小方知道后,就跃跃欲试,他首先从数据库读取客户信息到列表data中,其中data[i][0]存储第i条记录的会员号,data[i][1]存储第i条记录的姓名,data[i][2]存储第i条记录的积分;他首先将数组data中数据按会员号升序排序,然后用二分查找算法查找会员号对应的积分信息。代码如下,完善划线处的代码:           def bubble_sort(d):           for i in range(len(d)-2):           for j in range(len(d)-1, ① ,-1):           if d[j][0] < d[j-1][0]:           d[j],d[j-1] = d[j-1],d[j]           def bin_ search(d, key):           i,j = 0, len(d)-1           while i <= j:           m=(i +j)//2           if ② :           return m           if key > d[m][0]:           i = m+1           else:           j = m-1           return -1           #从数据库读取会员信息存列表data中,代码略           data=[[8011,'张飞',12345],[8012,'李强',34512],[7812,'李好',45321]]           bubble_sort(data)           key = int(input('输入会员号:'))           m = ③           if m!=-1:           print (data[m][1],'先生/女士:您的积分是:',data[m][2])           else:           print('该会员号不正确') 参考答案及解析: 一、单选题 1. 答案:B - 解析:函数`wenhao`有一个默认参数`name='zhejiang'`,当没有传入参数调用时,使用默认值,输出`hellozhejiang`。 2. 答案:C - 解析:这里是一个匿名函数,当传入参数`5`时,`b`使用默认值`5`,计算`5*5=25`。 3. 答案:C - 解析:函数`jsarea`没有显示地返回值,在 Python 中,没有显示返回值的函数默认返回`None`。 4. 答案:D - 解析:函数`js`将输入的数字反转,`20230110`反转后为`1103202`。 5. 答案:C - 解析:函数`jm`将输入字符串中的数字加 3,如果大于等于 10 则取模 10,最后组成新的字符串,`cie0108`处理后为`cie3431`。 6. 答案:B - 解析:函数`f`中使用了全局变量`s`,先计算`f(3)`,`s`从 0 累加到 3,返回 3,再计算`f(3)`,`s`从 0 累加到 6,输出 6。 7. 答案:D - 解析:函数`jsh`是递归函数,计算 1 到`n`的和,`jsh(10)=10+jsh(9)=10+9+jsh(8)=...=10+9+8+7+6+5+4+3+2+jsh(1)=10+9+8+7+6+5+4+3+2+1=55`。 8. 答案:A - 解析:函数fun递归实现字符串s逆序,因此选A。 9. 答案:C - 解析:递归函数不一定有循环结构;递归体现了“大事化小”的思想;递归执行效率通常较低;递归有明确的结束递归的边界条件。 10. 答案:C - 解析:函数`leijia`将传入的参数加 1 后返回,`y=leijia(x)`,`x=10`,所以`y=11`。 11. 答案:C - 解析:分治算法要求问题所分解出的各个子问题相互独立。 12. 答案:C - 解析:在 1 到 15 之间猜数,可以使用二分查找,最多需要 4 次(2³<15<2⁴)。 13. 答案:C - 快速排序在平均情况下时间复杂度为 O(nlogn),插入排序、冒泡排序、选择排序的时间复杂度通常为 O(n²)。 14. 答案:D - `from random import randint as t`这种方式引入后,应该使用`t(10,99)`来生成随机整数,而不是`a = t.randint(10,99)`。 15. 答案:B - Python 使用`def`关键字创建自定义函数。 16. 答案:B - 在 Python 中,求列表长度使用`len()`函数。 17. 答案:A - Python 函数的返回值使用很灵活,可以没有返回值,可以有一个或多个返回值;函数可以有多个`return`语句;使用`return`语句时可以没有返回值;函数可以通过多种方式给出运行结果,不仅仅是`print`和`return`。 18. 答案:C - 函数的定义不一定在程序的开头;函数定义后不会自动执行,需要调用才会执行;函数体相对于关键字有一定的缩进。 19. 答案:C - `for`循环计算 1 到 4 的阶乘,结果为 24,循环结束后`i`的值为 4。 20. 答案:D - `n`不是可选参数,在调用函数时必须传入一个参数。 21. 答案:D - 三位密码的范围是 100 到 1000,判断条件是`x%10==8`表示个位数是 8。 22. 答案:A - 甲同学每天增加 5 次,即`a = a + 5`可以写成`a + 5`;乙同学在奇数天增加 10 次,即`b = b + 10`可以写成`b + 10`。 23. 答案:A - 递归求阶乘,`n! = n * (n - 1)!`,即`n*fact(n - 1)`。 24. 答案:B - 当`x < cards[m]`时,说明`x`位于左段位置。 25. 答案:C - `opencv`是计算机视觉库,不属于 Python 数据分析与可视化第三方库。`pandas`、`matplotlib`、`numpy`都是数据分析与可视化常用库。 二、判断题 26. 答案:对 - 关键字实参通过“关键字=值”的方式传值,不需要考虑形参的顺序。 27. 答案:对 - 函数将实现相同功能的代码封装在一起,实现代码复用。 28. 答案:对 - Python 创建自定义函数时,不需要声明函数形参的类型,形参的类型由调用时传递的实参类型确定。 29. 答案:对 - 递推是按照一定规律计算序列中的每一项,通常通过计算前面的项来计算后一项的值。 30. 答案:对 - 用天平称量物品的过程体现了分治思想,通过逐步缩小范围来确定物品的重量。 31. 答案:对 - `pip install --upgrade pandas`可以升级`pandas`库。 32. 答案:错 - 使用`open()`函数打开文件,`read()`等方法读取文件内容,`close()`函数用于关闭文件。 33. 答案:错 - 函数`r`返回`s=a+b`的值,会输出一个值,但这里说输出两个值表述不准确,应该是输出一个值。 34. 答案:对 - 程序通过递归实现了斐波那契数列,符合题目中兔子繁殖的规律。 35. 答案:对 - 两个代码块的功能一样,都是判断年份是否能被 4 和 100 整除,如果能则输出年份。 三、编程题 36.参考答案: 参考程序: def jiami(yw,key): result = '' for i in range(0,len(yw),len(key)): s1=yw[i:i+len(key)] for j in range(len(key)): result = result + s1[int(key[j])-1] return result yw= input('请输入待加密的明文:') key= input('请输入密钥:') mw= jiami(yw,key) print(mw) 评分标准: (1)len(yw);(2分) (2)len(key);(3分) (3)s1[int(key[j])-1];(4分) (4) jiami(yw,key)。(3分) 试题解析: ①处填len(yw): 在函数`jiami`中,外层循环用于遍历输入的明文`yw`。从索引 0 开始,每次移动的步长为密钥的长度`len(key)`,直到遍历完整个明文,所以这里应该是`len(yw)`,确保能够完整地处理整个明文。 ②处填len(key): 内层循环用于遍历密钥,因为密钥决定了每组字符中每个字符的新位置。密钥的长度决定了循环的次数,所以这里应该是`len(key)`。 ③处填s1[int(key[j]) - 1]: 在循环中,需要根据密钥的位置来获取新的字符添加到结果字符串中。`key[j]`表示密钥中的第`j`个字符,将其转换为整数后减 1,就可以作为索引从当前分组`s1`中取出对应的字符。 ④处填jiami(yw, key): 在程序的最后,需要调用加密函数`jiami`对输入的明文`yw`和密钥`key`进行加密,并将加密后的结果赋值给变量`mw`,然后打印出来。所以这里应该是`jiami(yw, key)`。 37.参考答案: 评分标准: (1)a;(2分) (2)c + 1;(2分) (3)gcd(b,a%b);(3分) (4)(chang // bianchang) * (kuan // bianchang)或等价答案。(3分) 试题解析: ①处填a: 在函数`tj`中,需要找到`a`和`b`中的较小值作为循环的上限。如果`a`小于等于`b`,那么`min(a, b)`就是`a`本身;如果`a`大于`b`,前面已经通过`minn = b`处理了。这里填`a`可以确保正确找到较小值,用于后续的循环判断。 ②处填c + 1: 当找到一个数`i`满足`a % i == 0 and b % i == 0`时,说明这个数是`a`和`b`的公约数。每次找到一个新的公约数,就应该更新裁法的计数`c`。因为之前的`c`是之前找到的公约数,现在找到了新的公约数,裁法数量应该增加 1,所以是`c + 1`。 ③处填gcd(b, a % b): 这是求最大公约数的递归实现。根据辗转相除法,当`b == 0`时,最大公约数就是`a`;否则,不断用较小数`b`和两数相除的余数`a % b`作为新的参数进行递归调用,直到`b == 0`为止。 ④处填(chang // bianchang) * (kuan // bianchang): 首先,`chang // bianchang`表示长的方向可以裁出多少个最大正方形边长,`kuan // bianchang`表示宽的方向可以裁出多少个最大正方形边长。两者相乘就得到总共可以裁出的最大正方形的块数。 38. 参考答案: 参考程序: def bubble_sort(d): for i in range(len(d)-2): for j in range(len(d)-1, i,-1): if d[j][0] < d[j-1][0]: d[j],d[j-1] = d[j-1],d[j] def bin_search(d, key): i,j = 0, len(d)-1 while i <= j: m=(i +j)//2 if d[m][0] == key: return m if key > d[m][0]: i = m+1 else: j = m-1 return -1 #从数据库读取会员信息存列表data中,代码略 data=[[8011,'张飞',12345],[8012,'李强',34512],[7812,'李好',45321]] bubble_sort(data) key = int(input('输入会员号:')) m = bin_search(data,key) if m!=-1: print (data[m][1],'先生/女士:您的积分是:',data[m][2]) else: print('该会员号不正确') 评分标准: (1)i;(2分) (2)d[m][0] == key;(3分) (3)bin_search(data,key)。(3分) 试题解析: ①处填i: 在冒泡排序函数中,外层循环控制排序的轮数,内层循环负责具体的比较和交换操作。内层循环从最后一个元素开始,逐步向前比较并交换,直到当前轮次的起始位置`i`。这样可以确保在每一轮中,较大的元素会逐渐“冒泡”到后面,实现升序排序。 ②处填d[m][0] == key: 在二分查找函数中,通过不断缩小查找范围来定位目标元素。当中间位置的元素的第一个值(会员号)等于要查找的会员号`key`时,说明找到了目标,此时应该返回中间位置的索引`m`。 ③处填bin_search(data, key): 在主程序中,首先对读取的会员信息列表`data`进行升序排序。然后,接收用户输入的会员号`key`,并调用二分查找函数`bin_search`来查找该会员号在列表中的位置。将返回值赋给`m`,如果`m`不等于 -1,表示找到了该会员号,进而可以输出对应的姓名和积分信息;如果`m`为 -1,则表示该会员号不正确。           学科网(北京)股份有限公司 $$

资源预览图

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