一、单选题
1、以下程序的运行结果是?( )
def f(x,y,z): print(x,y,z)
f(z=3,x=2,y=1)
A 3 2 1
B 1 2 3
C 2 1 3
D 3 1 2
解析:【喵呜刷题小喵解析】:在Python中,当使用关键字参数调用函数时,参数的顺序并不重要,重要的是参数的名称。在函数`f(x,y,z)`中,参数`x`,`y`,`z`的位置并不决定它们的值。在调用函数`f(z=3,x=2,y=1)`时,参数`z`被赋值为3,`x`被赋值为2,`y`被赋值为1。因此,函数的输出结果为2 1 3。
2、关于以下程序,下列表述中错误的一项是?( )
c=1 def fun(n): a=1 for b in range(1,n): a*=b return a n=int(input('Enter n=')) print(fun(n),c)
A c是全局变量,a是局部变量
B n是形式参数,当n=5时,程序输出120 1
C 程序实现求阶乘
D range()函数是python内置函数
解析:【喵呜刷题小喵解析】:
首先,我们分析给定的程序。
程序首先定义了一个全局变量`c`,其值为1。
然后,定义了一个函数`fun(n)`,其中定义了一个局部变量`a`,其初始值为1。函数`fun(n)`的循环是从1到n-1,循环体内,局部变量`a`乘以当前的循环变量`b`。
循环结束后,函数返回局部变量`a`的值。
程序还从用户输入获取一个值赋给`n`,然后调用函数`fun(n)`并打印其返回值和全局变量`c`的值。
现在,我们分析选项:
A. `c是全局变量,a是局部变量`:这是正确的,`c`是在函数外部定义的,所以是全局变量,而`a`是在函数内部定义的,所以是局部变量。
B. `n是形式参数,当n=5时,程序输出120 1`:这是错误的。`n`确实是形式参数,但程序并没有输出120 1。实际上,由于循环体内的`a*=b`应该是`a*=b`,程序会报错,因为`*=`不是有效的Python操作符。如果修正这个错误,程序会计算阶乘,但输出不会是120 1。
C. `程序实现求阶乘`:这是正确的,如果修正循环体内的错误,程序确实会计算阶乘。
D. `range()函数是python内置函数`:这是正确的,`range()`是Python的内置函数。
因此,错误的选项是B。
3、以下关于全局变量和局部变量的表述正确的是?( )
A 如果在函数中定义的局部变量与全局变量同名,则全局变量屏蔽局部变量
B 可以通过global关键字,通过全局变量修改局部变量
C nonlocal关键字用来在函数或局部作用域使用内层(非全局)变量
D 全局变量的作用域一定比局部变量的作用域大
解析:【喵呜刷题小喵解析】:全局变量和局部变量是Python中变量的两种类型。全局变量是在函数外部定义的,可以在整个程序中访问。局部变量是在函数内部定义的,只能在函数内部访问。
选项A错误,如果在函数中定义的局部变量与全局变量同名,那么在该函数内部,局部变量会覆盖全局变量,而不是全局变量屏蔽局部变量。
选项B错误,global关键字是用来在函数内部引用全局变量的,而不是用来修改局部变量的。
选项D错误,全局变量的作用域不一定比局部变量的作用域大。全局变量的作用域是整个程序,而局部变量的作用域是其所在的函数或代码块。
选项C正确,nonlocal关键字用来在函数或局部作用域使用内层(非全局)变量,这是Python 3.x引入的新特性。当在嵌套函数内部需要修改外层函数的变量时,可以使用nonlocal关键字来声明这个变量,这样修改的就是外层函数的变量,而不是全局变量。
因此,正确答案是C。
4、有如下Python程序段,执行该程序后,结果是?( )
def fun(*p): return sum(p) print(fun(1,3,5))
A 4
B 6
C 8
D 9
解析:【喵呜刷题小喵解析】:Python中的`*p`表示接收任意数量的位置参数,并将它们作为一个元组传入。在这个程序中,`fun`函数接收了3个参数`1, 3, 5`,并计算它们的和。所以,`sum(p)`就是`sum((1, 3, 5))`,也就是`1+3+5=9`。因此,`fun(1,3,5)`的结果是9。所以正确答案是D。
5、在一个平面中,有n个圆两两相交,但任二个圆不相切,任三个圆无公共点,以下函数能计算出n个圆把平面分成的区域个数,空格处填写的语句是?( )
def c(n):
if n=1:
return 2
else:
return
A c(n-1)+2*(n-1)
B、
c(n-1)+ c(n-2)
C、
c(n-1)+2*n
D、
c(n-1)+2*(n+1)
解析:【喵呜刷题小喵解析】:这是一个递归问题,n个圆两两相交,但任二个圆不相切,任三个圆无公共点,n个圆把平面分成的区域个数可以通过递归公式c(n)=c(n-1)+2*(n-1)计算得出。当n=1时,平面被分成2个区域;当n>1时,第n个圆与前面的n-1个圆相交,将每个圆分成2个部分,因此新增了2*(n-1)个区域,再加上原有的c(n-1)个区域,总共是c(n-1)+2*(n-1)个区域。所以选项A正确。
6、观察此题示例代码,以下表述中错误的是?( )
nums = range(2,20) for i in nums: nums=list( filter(lambda x:x==i or x % i,nums)) print(nums)
A filter()函数输出后是一个数组而不是列表
B 示例代码中的关键字lambda表示匿名函数
C lambda x:x==i or x % i,nums中冒号:之前的x是这个函数的参数
D 匿名函数需要return来返回值,表达式本身结果就是返回值
解析:【喵呜刷题小喵解析】:对于给出的示例代码,我们来分析各个选项:
A选项提到"filter()函数输出后是一个数组而不是列表"。实际上,`filter()`函数返回的是一个迭代器,而不是数组或列表。但这里说"数组"可能是指"列表",所以此选项是错误的。
B选项说"示例代码中的关键字lambda表示匿名函数",这是正确的。`lambda`关键字在Python中用于定义匿名函数。
C选项说"lambda x:x==i or x % i,nums中冒号:之前的x是这个函数的参数",这也是正确的。在`lambda`函数中,冒号前的`x`是函数的参数。
D选项说"匿名函数需要return来返回值,表达式本身结果就是返回值",这也是正确的。在Python中,如果`lambda`函数中没有显式地返回任何值,那么它默认返回最后一个表达式的值。
因此,选项A是错误的,其他选项都是正确的。
7、下面关于递归函数说法正确的是?( )
A 一般来说,递归函数的执行效率高于非递归函数
B 边界条件和递归关系是递归函数编写的关键
C 递归函数的嵌套调用次数没有限制
D 递归函数不可以改写为非递归函数
解析:【喵呜刷题小喵解析】:
A选项:一般来说,递归函数的执行效率高于非递归函数。这是错误的,因为递归函数在调用自身时会产生额外的开销,这可能导致其执行效率低于非递归函数。
B选项:边界条件和递归关系是递归函数编写的关键。这是正确的,因为递归函数需要有一个明确的边界条件来停止递归,并且需要有一个递归关系来定义函数如何调用自身。
C选项:递归函数的嵌套调用次数没有限制。这是错误的,因为递归函数的嵌套调用次数受到栈空间大小的限制,如果递归深度过大,可能会导致栈溢出。
D选项:递归函数不可以改写为非递归函数。这也是错误的,很多递归函数都可以通过改写为循环结构来避免递归,从而提高执行效率。
因此,正确答案是B选项。
8、下面哪种算法使用了分治的方法?( )
A 插入排序
B 快速排序
C 选择排序
D 冒泡排序
解析:【喵呜刷题小喵解析】:分治算法是一种将问题分解为规模更小的同类问题,然后递归地解决这些子问题,最后将子问题的解组合起来得到原问题的解的算法。快速排序是一种典型的分治算法,它通过将待排序的数组分成两个子数组,然后对子数组进行排序,最后将子数组的排序结果合并起来得到原数组的排序结果。而插入排序、选择排序和冒泡排序都是基于比较的排序算法,它们并没有采用分治的思想。因此,正确答案是B,即快速排序。
9、运行以下程序输出的结果是?( )
y=2 def fun(): global y y=1 print(y) fun() print(y)
A 2
1
B 2
2
C 1
2
D 1
1
解析:【喵呜刷题小喵解析】:首先,变量y被赋值为2。然后,函数fun被定义,在这个函数中,变量y被声明为全局变量,并赋值为1,然后打印出这个值。当函数fun被调用时,会打印出1。接着,程序继续执行,打印出全局变量y的值,即1。所以,整个程序会打印出两个1。因此,答案是D选项,即“1 1”。
10、下列选项中,关于如何安装第三方库的说法正确的是?( )
A 如果电脑没有联网,仍然可以使用pip工具安装本地的whl文件
B 必须使用命令行工具安装第三方库
C 第三方库只要可以用pip完整的下载下来,就可以成功安装
D 安装上Anaconda就安装了所有的第三方库
解析:【喵呜刷题小喵解析】:
A选项提到,如果电脑没有联网,仍然可以使用pip工具安装本地的whl文件。这是正确的,pip工具支持离线安装,只需要将第三方库的whl文件下载到本地,然后使用pip的本地安装命令即可。
B选项说必须使用命令行工具安装第三方库,这是不准确的。虽然命令行工具如pip和conda是常见的安装第三方库的方式,但并不是唯一的方式。例如,一些集成开发环境(IDE)如PyCharm也提供了图形化界面来安装第三方库。
C选项提到第三方库只要可以用pip完整的下载下来,就可以成功安装。这个说法并不准确。下载第三方库的whl文件只是安装过程中的一个步骤,还需要确保下载的文件与当前环境兼容,以及确保安装过程中的依赖关系得到正确解决。
D选项说安装上Anaconda就安装了所有的第三方库,这也是不准确的。Anaconda是一个数据科学平台,它包含了大量的科学计算库,但并不是所有的第三方库。安装Anaconda只是提供了一些常用的库,如果需要其他库,仍然需要通过pip或conda进行安装。
11、下列程序段的运行结果为?( )
def f(n): if n<=1: return 1 else: return f(n-1)*3 print(f(5))
A 9
B 27
C 81
D 243
解析:【喵呜刷题小喵解析】:这是一个递归函数,函数f(n)的作用是当n小于等于1时返回1,否则返回f(n-1)*3。所以,当n=5时,f(5) = f(4)*3 = f(3)*9 = f(2)*27 = f(1)*81 = 1*243 = 243。因此,程序段的运行结果为243,选项D正确。
12、下面的程序输出1~100之间能被7整除但不能同时被5整除的所有整数。
k=1
while k<101:
if k%7==0 and k%5 !=0:
print(k)
k += 1
根据下面哪个选项的方法优化后,程序的运行效率最高?( )
A 将k=1改为k=7
B 将k
C 将k += 1改为k += 7
D 将k=1改为k=7,同时将k += 1改为k += 7
解析:【喵呜刷题小喵解析】:
原程序从1开始,逐个检查1~100之间的整数,看它们是否能被7整除且不能被5整除。这样的方法效率较低,因为有很多数字不需要检查(例如,所有能被5整除的数)。
A选项:将k=1改为k=7。这个优化可以减少检查的次数,但效果有限,因为还是有很多数需要检查。
B选项:没有提供完整的修改方案,所以无法评估其效果。
C选项:将k += 1改为k += 7。这个优化可以大大提高程序的运行效率。因为每次增加7而不是1,程序会跳过很多不需要检查的数字,只检查能被7整除但不能被5整除的数字。
D选项:将k=1改为k=7,同时将k += 1改为k += 7。这个方案结合了A和C两个选项,确实能进一步提高效率,但效率提升的程度并没有C选项那么大。
因此,C选项(将k += 1改为k += 7)是这些选项中使程序运行效率最高的。
13、有如下Python程序,执行该程序后,结果是?( )
g = lambda x,y=3,z=5:x+y+z print(g(2))
A 2
B 5
C 7
D 10
解析:【喵呜刷题小喵解析】:在Python中,lambda函数是一种匿名函数,它允许你定义一个简单的函数,但不需要使用def关键字。在这个lambda函数中,x是必需的参数,y和z是默认参数,它们的默认值分别是3和5。当你调用函数g(2)时,x被赋值为2,y和z保持它们的默认值不变。因此,函数的结果是2 + 3 + 5 = 10。但是,题目要求的是执行该程序后的结果,而程序只调用了函数g(2),并没有输出10,而是输出了函数返回的结果。根据Python的print函数,它会输出函数返回值,所以输出的结果应该是2 + 3 + 5 = 10,但是10不是选项中的任何一个,可能是题目或选项出错了。如果按照题目和选项来看,应该选择"C. 7",因为函数g(2)返回的是7,而不是10,然后print函数打印了这个返回值7。
14、有一球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下,求它在第10次落地前,反弹多高?用递归函数解决,下面选项正确的是?( )
A、
def height(n): if n == 1: return 100 else: return n*2 print(height(10))
B、def height(n):
if n == 1:
return 100
else:
return height(n-1)/2
print(height(10))
C、
def height(n): if n == 1: return 100 else: return height(n+1)/2 print(height(10))
D、
def height(n): if n == 1: return 100 else: return height(n-1)*2 print(height(10))
解析:【喵呜刷题小喵解析】:题目描述了一个球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下。我们需要找出第10次落地前,球反弹的高度。
递归函数应该模拟这个过程。当反弹次数n为1时,球的高度就是初始的100米。当n大于1时,球的高度应该是前一次反弹高度的一半。
选项A的递归函数计算的是n乘以2,这明显不符合题目要求。
选项B的递归函数在n大于1时,返回的是height(n-1)/2,这符合题目要求的每次反弹高度为前一次的一半。
选项C的递归函数在n大于1时,返回的是height(n+1)/2,这显然是错误的,因为n+1已经超出了反弹次数的范围。
选项D的递归函数在n大于1时,返回的是height(n-1)*2,这也不符合题目要求。
因此,正确答案是选项B。
15、应用分治算法的前提是?( )
A 问题的可分性和解的可归并性
B 问题的复杂性和解的简单性
C 问题的可分性和解的存在性
D 问题的复杂性和解的可归并性
解析:【喵呜刷题小喵解析】:分治算法是一种将问题分解为规模更小的同类问题,然后递归地解决这些子问题,最后将子问题的解合并起来得到原问题的解的算法。因此,应用分治算法的前提是问题的可分性和解的可归并性。所以,正确答案是A选项,即“问题的可分性和解的可归并性”。
16、有如下Python程序,执行该程序后,结果是?( )
x = 3 def calc(): x = 5 print(calc())
A 3
B 5
C 无输出
D None
解析:【喵呜刷题小喵解析】:在Python中,函数内部定义的变量(如`calc`函数中的`x`)是局部变量,它只在函数内部有效。当函数执行完毕后,这些局部变量就会被销毁。在函数外部定义的变量(如全局变量`x`)在函数内部无法直接修改,需要通过特定的方式(如`global`关键字)才能修改。在这个程序中,`calc`函数内部定义了一个局部变量`x`并赋值为5,但这个修改只在函数内部有效,不影响全局变量`x`的值。因此,`print(calc())`打印的是`calc`函数的返回值,由于`calc`函数没有明确的返回值(即没有`return`语句),所以返回`None`。所以最终输出结果为"无输出"。
17、有如下Python的自定义函数,执行该程序后,结果是?( )
def calc(x,y,op): return eval(str(x)+op+str(y)) print(calc(3,5,'+'))
A 8
B 35
C None
D -2
解析:【喵呜刷题小喵解析】:在Python中,`eval()`函数用于执行一个字符串表达式,并返回表达式的结果。在这个例子中,`eval(str(x)+op+str(y))`会将字符串`"3+5"`作为Python表达式来执行,其结果为8。因此,`print(calc(3,5,'+'))`的输出为8,对应选项A。
注意:在实际编程中,使用`eval()`函数存在一定的安全风险,因为它可以执行任意的字符串表达式,如果表达式是用户输入的,那么可能存在被注入恶意代码的风险。因此,除非你能确保输入是安全的,否则不建议使用`eval()`函数。在这个例子中,虽然代码本身没有安全风险,但使用`eval()`并不是一个好的实践。
18、阅读下列程序段,数列的第6项值为多少?( )
def fibona(x): if x==1 or x==2: f=1 for i in range(3,x+1): f=fibona(x-1)+fibona(x-2) return f n=int(input("请输入数列第几项:")) m=fibona(n) print("数列的第"+str(n)+"项的值为"+str(m))
A 1
B 8
C 21
D 34
解析:【喵呜刷题小喵解析】:
程序中的函数 fibona 是一个递归函数,用于计算斐波那契数列。然而,由于这个函数的递归调用方式,它会进行大量的重复计算,导致效率非常低。对于输入6,程序会进行大量的重复计算,而不是直接计算第6项的值。
斐波那契数列的定义是:F(1) = 1, F(2) = 1, F(n) = F(n-1) + F(n-2)。因此,斐波那契数列的前几项是:1, 1, 2, 3, 5, 8, 13, 21, 34, ...。
虽然程序会进行大量的重复计算,但由于斐波那契数列的性质,第6项的值是 34。因此,正确答案是 D,即 34。
19、如下代码运行后下面选项中描述错误的是?( )
def pph(a,b): c=a**2+b b=a return c a=10 b=100 c=pph(a,b)+a print(a,' ',b,' ',c)
A 执行该函数后,变量a的值为10
B 执行该函数后,变量b的值为100
C 执行该函数后,变量c的值为200
D 该函数名称为pph
解析:【喵呜刷题小喵解析】:在提供的代码中,首先定义了一个函数pph,该函数接收两个参数a和b,然后计算a的平方和,将结果赋值给变量c,然后将a的值赋给b,最后返回c的值。
接下来,代码将变量a和b分别赋值为10和100,然后调用pph函数,将a和b作为参数传入,并将返回的结果与a相加,赋值给变量c。
最后,代码打印出变量a、b和c的值。
根据代码逻辑,变量a的值在函数调用前后都没有改变,所以变量a的值仍然是10。
变量b在函数调用前是100,但在函数调用后,其值被修改为a的值,即10。
变量c的值是pph函数的返回值与a的和,pph函数的返回值是a的平方和,即100,所以变量c的值是100+10=110。
因此,选项C的描述是错误的,执行该函数后,变量c的值为200,实际值是110。其他选项的描述都是正确的。
20、以下有关Python函数的定义表述中错误的是?( )
A 函数的定义必须在主程序调用语句之前出现
B 在形参列表中必须先列出有默认值的形参,再列出没有默认值的形参
C 实参是实际占用内存地址的,而形参不占用
D def关键字后面加函数名定义函数,定义必须以冒号结尾
解析:【喵呜刷题小喵解析】:在Python中,函数的定义并不要求必须在主程序调用语句之前出现,只要在使用函数之前定义即可。因此,选项A是正确的。在形参列表中,参数的顺序和是否有默认值无关,所以选项B是错误的。实参和形参都是变量,它们都会占用内存地址,只是生命周期不同,因此选项C也是错误的。在Python中,定义函数使用def关键字,后面是函数名,最后以冒号结尾,所以选项D是正确的。因此,选项B是表述错误的。
21、下列有关循环和递归的描述正确的是?( )
A 递归思想代码清晰简洁,可读性强
B 递归代码中不能有循环结构的语句
C 递归是从问题的起点出发,逐渐将复杂问题化为简单问题,最终求得问题
D 能用递归实现的,一定能用循环代码实现
解析:【喵呜刷题小喵解析】
A选项,虽然递归的代码可能看起来简洁,但它也可能导致代码难以理解,特别是在递归深度较大的情况下。因此,A选项不正确。
B选项,递归代码中是可以包含循环结构的。递归和循环是两种不同的问题解决策略,它们可以相互补充,而不是相互排斥。因此,B选项不正确。
C选项,递归是从问题的起点出发,逐渐将复杂问题化为简单问题,最终求得问题的解决方案。这是递归的基本思想,所以C选项是正确的。
D选项,虽然很多递归的问题可以用循环来解决,但并不是所有递归的问题都可以用循环来解决。有些问题更适合用递归的方式来处理。因此,D选项不正确。
所以,正确答案是C选项。
22、执行如下Python代码后,结果是?( )
def inverse(s,n=0): while s: n = n * 10 + s % 10 s = s // 10 return n print(inverse(456,123))
A 654123
B 123456
C 123654
D 654321
解析:【喵呜刷题小喵解析】:给定代码中的`inverse`函数试图将一个数字(这里是`s`)的每一位数字逆序,并且累加到一个新的数字(这里是`n`)上。但是,该函数实际上并没有逆序数字,而是将数字每一位的值累加到了`n`上。例如,对于输入`456`,`n`会变为`4*100 + 5*10 + 6*1 = 456`。
对于`print(inverse(456,123))`,`s`是`456`,`n`是`123`。在函数内部,`n`的值会被更新为`1230 + 4 = 1234`,然后`s`变为`456 // 10 = 45`。接下来,`n`更新为`12340 + 5 = 12345`,`s`变为`45 // 10 = 4`。最后,`n`更新为`123450 + 6 = 123456`,`s`变为`4 // 10 = 0`,循环结束,函数返回`123456`。
然而,这不是题目想要的结果。题目可能想要的是将`456`逆序,然后与`123`相加。如果是这样的话,正确的函数应该是这样的:
```python
def inverse(s, n=0):
while s:
n = n * 10 + s % 10
s = s // 10
return str(n)[::-1] # 将数字逆序
print(int(inverse(456)) + 123)
```
这将会输出`654 + 123 = 777`,但题目中的代码并不是这样。
因此,对于题目中的代码,输出将是`123456`,选项A是正确的。
23、有如下Python语句,执行该语句后,结果是?( )
f=lambda x:5 print(f(3))
A 3
B 没有输出
C 5
D、 None
解析:【喵呜刷题小喵解析】:在这个Python语句中,定义了一个名为f的lambda函数,该函数接收一个参数x,并返回5。然后,使用print函数调用了这个函数,并传入了参数3。由于lambda函数没有显式地返回任何值,Python会默认返回None。因此,print函数会打印出None,而不是5。所以,执行该语句后的结果是None。
24、下面哪一项不是pip指令?( )
A pip install Scipy
B pip uninstall Jieba
C pip clear
D pip list
解析:【喵呜刷题小喵解析】:在Python的包管理工具pip中,并没有"pip clear"这个指令。常见的pip指令包括安装(install)、卸载(uninstall)、列出已安装(list)等。因此,选项C "pip clear"不是pip指令。选项A "pip install Scipy"用于安装Scipy包,选项B "pip uninstall Jieba"用于卸载Jieba包,选项D "pip list"用于列出已安装的包,都是pip的常用指令。
25、对于数列3,8,11,15,17,19,25,30,44,采用“二分查找”法查找8,需要查找多少次?( )
A 5
B 4
C 3
D 2
解析:【喵呜刷题小喵解析】二分查找法是一种在有序数组中查找某一特定元素的搜索算法。查找过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。对于数列3,8,11,15,17,19,25,30,44,首先比较中间的数15,发现15大于8,所以在数列的前半部分查找,即3,8,11中查找,继续比较中间的数,直到找到为止。因此,需要查找4次。
喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!