青少年软件编程(python四级)等级考试试卷(2023年3月)

2023年06月01日

一、选择题

第 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]

B. x < cards[m]

C. x > cards[m-1]

D. x > cards[m]

第 25 题 单选题

下列不属于Python数据分析与可视化第三方库的是?( )

A. pandas

B. matplotlib

C. opencv

D. numpy

二、判断题

第 26 题 判断题

关键字实参通过“关键字=值”的方式传值,不需要考虑函数调用过程中形参的顺序。( )

A. 正确

B. 错误

第 27 题 判断题

函数是将实现相同功能的代码封装在一起,实现代码复用。( )

A. 正确

B. 错误

第 28 题 判断题

创建自定义函数时,不需要声明函数形参的类型,形参的类型由调用自定义函数时传递的实参类型确定。( )

A. 正确

B. 错误

第 29 题 判断题

递推是按照一定的规律计算序列中的每一项,通常是通过计算前面的一些项来计算后一项的值。( )

A. 正确

B. 错误

第 30 题 判断题

某同学用天平称量的过程如下:先放置100克砝码,砝码偏重;再将砝码改为50克,砝码偏轻;又将砝码改为75克……通过这种策略,该同学很快完成物品称重工作,这体现了分治思想。( )

A. 正确

B. 错误

第 31 题 判断题

使用"pip install-upgrade pandas"命令能够升级pandas库。( )

A. 正确

B. 错误

第 32 题 判断题

Python中调用close()函数可实现对文件内容的读取。( )

A. 正确

B. 错误

第 33 题 判断题

下面的程序会输出两个值。( )

def r(a,b):
	 s=a+b
	 b+=1
	 return s
print(r(3,8))

A. 正确

B. 错误

第 34 题 判断题

一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。如果所有兔子都不死,那么一年以后可以繁殖多少对兔子?

经分析,从第三个月起,每个月的兔子数是上个月与上上个月兔子之和。

请判读以下程序是否正确。( )

自定义函数

def fib(n): #斐波那契数列
	if n<=2:
		return 1
	else:
	returnfib(n-1)+fib(n-2) #前两个数字之和

主程序,显示每个月兔子数(斐波那契数列)

for i in range(1,13):
	print("第",i,"个月兔子对数为:",fib(i))

A. 正确

B. 错误

第 35 题 判断题

下列两个代码块的功能一样。( )

A.

if(year%4)==0: 
	if(year%100)==0:
		print(year)

B.

if(year%4)==0 and (year%100)==0: 
	print(year)

A. 正确

B. 错误

三、编程题

第 1 题 问答题

换位密码法是将明文中的字符位置通过一定的规则重新排列从而得到密文的一种加密方法。某换位密码法加密方法如下:先把明文按照固定长度(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)

运行结果如下图所示:

第 2 题 问答题

一张长方形的纸,长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))

运行后的结果如下图所示:

第 3 题 问答题

商超采用会员制,客户的消费信息如会员号、姓名和积分如下表所示,小方的爸爸想编写一个客户信息管理系统,其中有一个功能是:输入会员号,查询该会员的积分。

小方知道后,就跃跃欲试,他首先从数据库读取客户信息到列表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('该会员号不正确')