image

编辑人: 浅唱

calendar2025-06-07

message8

visits355

2023月09月Python四级理论参考答案

一、单选题

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、二分

E、在定义一个函数或过程时,如果出现调用自身的成分,则称为递归。


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也需要先做类型转换后才能进行上述运算


二、判断题

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

A 正确

B 错误


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

A 正确

B 错误


28、函数的定义代码不需要在主程序调用函数之前。( )

A 正确

B 错误


29、命令pip download <第三方库>表示下载并安装指定的第三方库。( )

A 正确

B 错误


30、二分查找又称对折半查找,例如:在数列34、17、25、9、10、3中查找3,适合采用二分查找法。( )

A 正确

B 错误


31、递归算法不涉及高深的数学知识,使得很多比较复杂的问题,也可以用简洁的代码解决,代码的执行效率比较高,所以即使有其他算法可行,也应该首选递归算法解决问题。( )

A 正确

B 错误


32、递归算法中,必然存在函数体内调用自身的情况,可以在最后调用,也可以在中间调用。( )

A 正确

B 错误


33、Python程序中,自定义函数可以放在整个程序的开头,也可以放在主程序之后,比较自由。( )

A 正确

B 错误


34、通过把某些特定功能语句设计成自定义函数,可以简化主程序的编写。( )

A 正确

B 错误


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]

A 正确

B 错误


三、编程题

36、从键盘上分别输入要查找和替换的字符串,对文本文件进行查找与替换,替换后保存到新的文本文件中。

思路:输入待查找字符串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)

参考答案:

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)


37、一个列表中存在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))

参考答案:

参考程序:

求列表中小于两个元素的最小值

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))


38、未来居民社区设计有一个机器人服务中心,假如某社区有若干栋住宅楼,每栋楼的位置可以由坐标(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)

参考答案:

参考程序:

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)


喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!

创作类型:
原创

本文链接:2023月09月Python四级理论参考答案

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。
分享文章
share