安力群创新实验室Python组第二次面试笔试题:原题+解析 快来查收吧~

前言:

本次二面命题参与人员主要由我和李阳大佬以及刘同学命制,试题呢已经由我们班同学和实验室学哥做过了,做完后都有一个总体的感觉:太细了!你会发现这套题其实很基础,但做完后分数却很低,我们也听取了他们的意见,将试题又完善了一遍。自我感觉这套试题出的真的很有质量。方方面面都有考察,做的不理想的同学也不要灰心,借此机会好好完善一下自己的漏洞,毕竟我们追求的不是眼前的苟且,而是心中的诗和远方!总体评价:10分的满分,我给我们打9分,哈哈哈!你打几分呢?评论区告诉我吧❤️❤️❤️
话不多说,进入正题!

原题+解析

一、命制过程中的一些心得

1.试卷结构

首先是本次试卷的结构:选择题6道,填空题6道,大题4道,满分:100分 考试时间:8:30-10:30。时间上而言是充分的,也会有很多同学可能不用一个小时就完成了。

2.试卷流程

本试卷分为两卷:做完第一卷上交后可以要第二卷。
为什么会想到这个流程呢…其实这是因为去年我二面的时候就是这个流程,这就要保证你做过的题目要保证绝对正确,毕竟第一卷有60分呢,去年我就没咋着急,先把第一卷做好了,因为第二卷编程大题不会也就不会了,简单题先保证做对!正好也可以锻炼心态,看到别人交卷也不要紧张,稳住才是最重要的!
还有一个原因就是方便我俩看卷,因为毕竟需要手写编程大题,看卷会比较麻烦,所以我们打算先把选择题和填空题看完!

3.出题思路

选择题:首先那这个题来说

a=[1,6,5,8,9,1],求:print(sorted((a)))和print(a.sort())的值:()

sort是排序必不可少的,但你知道sort和sorted的用法吗,值得考虑一下。

填空题:

a = 1
b = 2
def func():
    a = 2
    b = 1
    a = a * (b + 1) 
func()
print(a)

编程大题:这个题更是考虑大家读题能力,函数到底真的会调用吗,这也是需要去思考的。

求50!+49!+48!+...+2!+1的值。

这个编程大题简单吗,说实话很简单,双重循环可能会写,单重循环可以写吗,这也是一个问题。
那让我们来细细看一下吧:

二、选择题

1.第一题

1.a=[1,6,5,8,9,1],求:print(sorted((a)))和print(a.sort())的值:()
A.[1, 1, 5, 6, 8, 9]、[1, 1, 5, 6, 8, 9]
B.[1, 5, 6, 8, 9]、[1, 5, 6, 8, 9]
C.None、[1、1、5, 6, 8, 9]
D.[1, 1, 5, 6, 8, 9]、None

答案:D

考点:sort函数和sorted函数用法的区别

解析:sort()函数:list.sort(),是在列表list的基础上进行的操作,不产生新的列表,故没有返回值,即None
sorted()函数:sorted(list),产生一个新列表,返回新列表的值。
列表中的元素是可以重复的,所以说排序后不用进行去重操作!

2.第二题

2.执行以下语句:
		name, age = “Christian Seram”, 19
		print(“I am {name}, I am {age} years old.”, name, age)
其输出结果为:(	)

A.I am {name}, I am {age} years old. Christian Seram 19
B.I am Christian Seram, I am 19 years old. 
C.I am name, I am age years old. 
D.I am {name}, I am {age} years old. 

答案:A

考点:对格式化字符串的掌握情况,不要看到{}就认为是格式化,引号前有没有f是一个重要的参考标志!

解析:没有f存在,必定并不是格式化,只需要正常打印就可以了,将后面的变量换成相应的值,故答案是A选项。

3.第三题

3.下列哪些语句非法:(	) (可能不止一个答案)
A.x = ( y = z = 1 )
B.print(‘I love Python!’)
C.print([i for i in range(1, 10)])
D.lambda = 50
print(lambda)

答案:AD

考点:Python语法基础,判断是否为合法语句。

解析:x = y = z = 1 是合法的,但x被赋值 " y = z = 1 ",但这个所谓的 "y = z = 1 "并不返回任何值,所以这是一个错误的赋值语句,这是非法的。
lambda 是匿名函数,固定名称,不能用来当作变量,上课的时候重点讲过。

4.第四题

4.补全下面的程序使其可以计算1+1+2+3+5+8+13+21+34+55的值:
		def fin(n):
    		if n==1:
       	 	return 1
    		elif n==2:
        		return 1
    		else:
        		return       ?      
		print(fin(10))

A.fin(n-2)+fin(n-1)   B.fin(n-1)   C.fin(n-2)   D.fin(n)+fin(n-1)

答案:A

考点:递归函数的基本用法,返回值一定要搞懂。

解析:仔细观察这几个数,很明显第三个数是前两个数的和,那必然也是返回fin(n-2)+fin(n-1)可以结合上课时候的例子来理解,选择题还是很好做的,如果放到大题的话,可能就不会那么的容易。

5.第五题

5.写出下列语句会输出什么结果?(	)
	a = 0
	if a and print(456):
    	print(123)

	A:123       B:456     C:456 123     D:无输出

答案:D

考点:短路求值

解析:a=0:False,故什么也不输出。

6.第六题

6.下面程序的正确运行结果: (	  )	
def listsum(numlist):
    	if len(numlist)==1:
        	return 1
    	else:
        	return numlist[0]+listsum(numlist[1:])
	print(listsum([1,3,5,7,9]))

	A.报错    B.17     C.25    D.26

答案:B

考点:函数与列表切片结合,你对函数真的理解吗

解析:每次循环都是返回当前列表的第一个元素的值加上其之后的切片列表。当列表长度为1时,即此时列表中只剩下一个9元素时,此时列表中的值返回1,最后的值便是:1+3+5+7+1=17

三、填空题

1.第七题

1. 下面程序的运行结果为:                          

	a = [2,5,6,1,2,4,3,4,6]
	a.pop()
	a.remove(4)
	print(a)

答案:[2,5,6,1,2,3,4]

考点:列表切片中的pop()remove()方法。

解析:pop()没给定序列的话,默认删除第一个元素。
remove(4)删除第一个列表中出现的4,只会删除一个,不会都删除的。

2.第八题

2. 仔细阅读下面这段代码,
  并在下面的黑色框内填写代码输出:
area_left = 65
def left(name):
    global area_left
    name_area = {
        1: 10,
        3: 20,
        4: 25,
        5: 30, }
    for i in name:
        area = name_area.get(i)
        print(f"name = {i}, area = {area}")
        area_left = area_left - area
        if area_left < 0:
            print(f"Don't enough,exceed:{abs(area_left)}")
            break
		print(left([1, 3, 5, 4, 5])

答案:
name = 1, area = 10
name = 3, area = 20
name = 5, area = 30
name = 4, area = 25
Don’t enough,exceed:20
None

考点:函数用法,格式化输出及函数返回值

解析:正常运行函数,每次减去字典中键对应的值,输出每次打印出来的句子。最后注意函数没有 return 故返回None。

3.第九题

请仔细阅读以下代码:
m = [3, 4, 5, 6, 2, 1]
m.reverse()
output = []
for i in range(1, len(m) + 1):
    output.append(m[i - 1])
print(output)
其输出为:                           . 

答案:[1, 2, 6, 5, 4, 3]

考点:reverse()函数用法

解析:reverse()函数将列表倒序,然后进行一个毫无意义的排序,把自己再重新排一遍。

4.第十题

请仔细阅读以下代码:
number = 5
a = int("%s" % number)
b = int("%s%s" % (number, number))
c = int("%s%s%s" % (number, number, number))
d = int("%s%s%s%s" % (number, number, number, number))
    print(a + b + c + d)
其输出为:                           . 

答案:6170

考点:一种字符串格式化的语法, 基本用法是将值插入到%s占位符的字符串中。

解析:5+55+555+5555

5.第十一题

5.求结果:
1 < (2 == 2)             其结果为:                (1.5分)
55 >> 2                其结果为:                (1.5分)
i = ['4', 2, '5', 1, '5']
i = tuple(map(int, i))
print(i)                其结果为:                (2 分)

答案:
False
13
(4, 2, 5, 1, 5)

考点:基本表达式应用,>>和map函数的使用方法

解析:
True>1:返回False
55 >> 2 :55//(2**2)=13
tuple(map(int, i)):将元素变为整数,然后便为元组。

6.第十二题

6.下面这段程序运行后,输出的值为_______

a = 1
b = 2
def func():
	a = 2
	b = 1
	a = a * (b + 1) 
func()
print(a)

答案:1

考点:函数的调用,全局变量与局部变量(函数内部直接对已有的同名全局变量赋值,python会认为这是一个同名的局部变量)至于func函数内部的一系列操作可能会让部分同学以为是考计算-.-

解析:print(a)中并没有调用函数,故返回a的值1。

四、编程大题

1.第十三题

1. 求50!+49!+48!+...+2!+1的值.

答案:


 n=50
 sum = 0 
 result = 0 for i in range(1,n+1):
    for j in range(1,i+1):
        if j == 1:
            result = 1
        else:
            result *= j
    sum += result print('S:',sum)

或者:

n=50 
sum = 0 
result = 0 for i in range(1,n+1):
    if i==1:
        result=1
    else:
        result *= i
    sum += result print('S:',sum) 

考点:循环结构的应用

2.第十四题

  1. 试编写一个程序,解决以下问题:
    一球从100米高度*落下,每次落地后反跳回原高度的一半;再落下,求它在第n次落地时,共经过多少米?第n次反弹多高?(使用递归,且要求最后可以输出次数,第n次落地时的总距离与第n次反弹的高度)

答案:

class Solution:
    def __init__(self, times):
        self.times = times
        self.height = 100

    def ball_pop(self, n):
        if n == 1:
            return self.height
        return self.ball_pop(n-1) + self.height / 2 ** (n-2)

    def pop_times(self):
        return self.height / 2 ** (self.times - 2)

    def __call__(self):
        print(f"{self.times}, {self.ball_pop(self.times)}, {self.pop_times()}")
s=Solution(8)
print(s.__call__())

3.第十五题

  1. 试编写一个程序,给定以下功能:
    可以输入(在控制台中)一个具体的矩形的面积(面积为int整数);
    设计一个长度为 L (int)和宽度为 W(int) 且满足以下要求的矩形。
    要求:
    1.你设计的矩形页面必须等于给定的目标面积;
    2.宽度 W 不应大于长度 L,换言之,要求 L >= W ;
    3.长度 L 和宽度 W 之间的差距应当尽可能小;
    你需要按顺序输出你设计的矩形的长度 L 和宽度 W.

答案:

a = input(“矩形的面积为:”)
a = int(sqrt(area))
while area % a:
   a -= 1
print( [area // a, a])

4.第十六题

  1. 根据题意要求完成以下程序:
    Christians正在学习一门神奇的语言,这门语言中的单词都是由小写的英文字母组成,其中的有些单词很长,远超正常英文单词的长度。Christian学了很长时间也记不住一些单词,他准备不再完全记忆这些单词,而是根据单词中字母出现出现的频率来分辨单词。现在,请你帮助Christian,在给定了一个单词后,帮助他找到这个单词中出现最多的字母和该字母出现的次数。
    输入描述:
    输入包含一个单词(长度小于10⁹),且输入仅由小写英文字母组成;
    输出描述:
    输出为两行:
    第一行应为单词中出现得最多的那个英文字母,如果有2个或以上的出现次 数相同的字母,则输出字典序最小的那个;
    第二行应当包含一个整数,为出现最多的那个字母在单词中出现的次数。

答案:

a = input()
b = []
n = 0
for i in a:
  c = a.count(i)
  if c>=n:
    n=c
for j in a:
  if a.count(j)==n:
    b.append(j)
b.sort()
print(b[0])
print(n)

五、题后总结

总结一下自己的不足,道阻且长,继续加油!
Good Luck for you!!!
安力群创新实验室Python组第二次面试笔试题:原题+解析 快来查收吧~

上一篇:利用 css grid 页面常规布局


下一篇:OSPF的过滤