Python第二次作业
1.技术面试题
(1)详细描述单调栈的工作原理和应用场景
答:
工作原理:单调栈是一种特殊的数据结构,其栈内元素保持单调递增或单调递减。以单调递增栈为例,在向栈中插入元素时,会将栈顶元素与待插入元素比较,如果栈顶元素大于待插入元素,就将栈顶元素弹出,直到栈顶元素小于等于待插入元素或者栈为空,然后将待插入元素入栈。这样始终保证栈内元素是单调递增顺序 。单调递减栈原理类似,只是比较条件相反。
应用场景:常用于求解下一个更大(或更小)元素问题。比如在一个数组中,对于每个元素,找到其右侧第一个比它大(或小)的元素。还可用于柱状图中最大矩形面积等问题,通过构建单调栈来简化计算逻辑,提高计算效率
(2)详细描述单调队列的工作原理和应用场景
答:
工作原理:单调队列也是维持队列内元素单调的一种数据结构。在队尾插入元素时,需要将队尾比新元素大(对于单调递增队列)或小(对于单调递减队列)的元素依次弹出,然后将新元素插入队尾。在队头元素不再符合问题要求(比如超出滑动窗口范围 ,如果是滑动窗口相关应用)时,将队头元素弹出。
应用场景:常见于滑动窗口类问题,例如在一个数组的滑动窗口内求最大值、最小值等。在窗口滑动过程中,利用单调队列能快速获取窗口内的最值,而不需要每次都遍历窗口内的所有元素,大大降低时间复杂度。
2.HR面试题
(1)如果竞争对手用双倍薪资挖你,你会怎么选择?
答:
分析:可从对当前公司的忠诚度、职业发展规划、工作氛围等多方面阐述。避免直接表现出对高薪的强烈倾向,要突出自己职业规划和价值观方面的考量 。
回答:面试官,您好,虽然双倍薪资对我十分有吸引力,但是自己更加注重当前公司提供的发展平台,工作时的团队协作氛围,以及我在公司未来的晋升空间等,如果公司符合我的以上需求,我会坚定地留在公司,与公司共同成长,共同进步。
(2)我们觉得你今天表现一般,不符合岗位要求,你有什么想说的?
答:
分析:首先要保持礼貌和谦逊,感谢面试官的反馈。接着可以简要说明自己可能因为紧张等原因没有充分展示自己的能力,然后针对性地强调自己与岗位相关的优势、经验或学习能力,表明自己有信心通过后续努力胜任岗位工作 。
回答:面试官,您好,十分感谢您能够提出我的问题,可能今天面试时我有些紧张,没能够把自己在相关项目中的经验和能力更好地展现出来。其实我在[具体相关技能或项目]方面有一定的经验,并且学习能力较强,相信如果能给我机会,我一定能快速适应岗位并做出贡献,希望您能够给我一次机会
3.选择题
(1)在Python中,以下哪个不是循环控制语句?
A. break
B. continue
C. pass
D. return
答:C
(2)以下代码的输出结果是什么?
for i in range(5): if i == 3: continue print(i, end=\' \')
A. 0 1 2 3 4
B. 0 1 2 4
C. 0 1 2
D. 3
答:B
(3)完成以下代码,使其能够打印出1到100之间所有的偶数:
for i in range(1, 101): if ______: print(i, end=\' \')
A. i % 2 == 0
B. i % 2 == 1
C. i / 2 == 0
D. i // 2 == 0
答:A
(4)以下代码有一个错误,导致它无法正确计算1到10的和。请选择正确的修改方案:
sum = 0i = 1while i < 10: sum += i i += 1print(sum)
A. 将i < 10
改为i <= 10
B. 将i += 1
改为i += 2
C. 将sum += i
改为sum = sum + i + 1
D. 将i = 1
改为i = 0
答:A
(5)以下代码的输出结果是什么?
for i in range(3): for j in range(2): print(f\"({i},{j})\", end=\' \')
A. (0,0) (0,1) (1,0) (1,1) (2,0) (2,1)
B. (0,0) (1,0) (2,0) (0,1) (1,1) (2,1)
C. (0,0) (0,1) (0,2) (1,0) (1,1) (1,2)
D. (0,0) (1,1) (2,2)
答:A
(6)完成以下代码,使其能够打印出斐波那契数列的前10个数:
a, b = 0, 1for _ in range(10): print(a, end=\' \') ______
A. a, b = b, a + b
B. a, b = a + b, b
C. a, b = b, a
D. a, b = a + 1, b + 1
答:A
(7)以下代码的输出结果是什么?
i = 0while i < 5: i += 1 if i == 3: continue print(i, end=\' \')else: print(\"Done\")
A. 1 2 3 4 5 Done
B. 1 2 4 5 Done
C. 1 2 4 5
D. 1 2 Done
答:B
(8)以下代码的输出结果是什么?
for i in range(1, 5): for j in range(1, 5): if i * j > 10: break print(f\"{i}*{j}={i*j}\", end=\" \") print()
A.
1*1=1 1*2=2 1*3=3 1*4=4 2*1=2 2*2=4 2*3=6 2*4=8 3*1=3 3*2=6 3*3=9 3*4=12 4*1=4 4*2=8 4*3=12 4*4=16
B.
1*1=1 1*2=2 1*3=3 1*4=4 2*1=2 2*2=4 2*3=6 2*4=8 3*1=3 3*2=6 3*3=9 4*1=4 4*2=8
C.
1*1=1 1*2=2 1*3=3 1*4=4 2*1=2 2*2=4 2*3=6 2*4=8 3*1=3 3*2=6 3*3=9
D.
1*1=1 1*2=2 1*3=3 1*4=4 2*1=2 2*2=4 2*3=6 2*4=8
答:B
(9)以下代码的输出结果是什么?
for i in range(4): for j in range(4): if (i + j) % 2 == 0: print(\"*\", end=\"\") else: print(\"#\", end=\"\") print()
A.
****####****####
B.
*#*##*#**#*##*#*
C.
*#*#*#*#*#*#*#*#
D.
****************
答:B
(10)以下代码的输出结果是什么?
count = 0for i in range(1, 5): for j in range(1, 5): for k in range(1, 5): if i != j and j != k and i != k: count += 1print(count)
A. 24
B. 36
C. 60
D. 64
答:A
4.问答题
(1)Python中有哪几种基本的循环结构?请简要说明它们的语法和适用场景。
答:
for 循环:
语法:基本形式为 for 变量 in 对象: 循环体。
例如
for i in range(1, 11): print(i)
适用场景:Python中for循环,一般由于迭代序列,通常for结合 range()函数去使用的,range(a,b,c):用于产生一个[a, b)之间且步长为 c的序列(默认为1)
a:循环的初始化
b:循环的继续条件
print(i):循环体
c:控制变量是 i ,c 用于改变 i(将i向后跳转,而不是所谓的 i += 1)
while 循环:
语法: 基本形式:
1.循环初始化
while 2.循环的继续条件:
3.循环体
4.循环的控制变量件。
例如:
num = 1while num <= 10: print(num)num += 1
适用场景:和for循环很像,在Python中,只不过相对而言while循环要比for循环更加灵活一些,所之前写的for代码都可以被while实现,但是while写的代码for不一定能实现
(2)Python中有哪些循环控制语句?它们各自的作用是什么?请给出示例说明。
答:
break 语句:
作用:用于跳出当前所在的循环体( for 循环或 while 循环),不再执行循环体中 break 之后的代码。
示例:
for i in range(10): if i == 5: break; print(i) #当 i 等于5时, break 语句触发,循环结束,所以只会打印出 0 到 4 。
continue 语句:
作用:用于跳过当前循环体中 continue 之后的代码,直接开始下一次循环。
示例:
for i in range(10): if i % 2 == 0: continue; print(i) #这里当 i 是偶数时, continue 语句触发,跳过 print(i) , #直接进入下一次循环,所以只会打印出 1 、 3 、 5 、 7 、 9 这些奇数。
else 语句(与循环搭配使用):
作用:在 for 循环或 while 循环正常结束(即没有被 break 语句中断)时,会执行 else 块中的代码。
示例:
for i in range(5): print(i); else: print(\"循环正常结束\") #这里循环会正常打印 0 到 4 ,然后因为循环正常结束, #会接着打印 \"循环正常结束\" 。如果循环中存在 break 语句提前结束循环, #则 else 块中的代码不会执行
(3)在Python的for循环中,range()函数扮演着重要角色。请详细说明range()函数的语法、参数含义和使用方法,并给出至少3个不同用法的示例。
答:
语法: range(start, stop[, step]) ,其中 start 、 step 为可选参数。
参数含义:
start :表示起始值(包含),如果不指定,默认从0开始。
stop :表示结束值(不包含),这个参数必须指定。
step :表示步长,即每次循环变量的增量,不指定时默认步长为1。
示例1:只有一个参数:
for i in range(5): print(i) #这里 range(5) 等价于 range(0, 5, 1) , start 默认为0, #step 默认为1,循环会从0开始,到4结束(不包含5), #依次打印出 0 、 1 、 2 、 3 、 4 。
示例2:两个参数:
for i in range(2, 7): print(i) #这里 start 为2, stop 为7, step 默认为1,循环会从2开始, #到6结束(不包含7),依次打印出 2 、 3 、 4 、 5 、 6 。
示例3:三个参数:
for i in range(1, 10, 2): print(i) #这里 start 为1, stop 为10, step 为2,循环会从1开始,每次增加2,#到9结束(不包含10),依次打印出 1 、 3 、 5 、 7 、 9 。
示例4:反向循环:
for i in range(10, 0, -1): print(i) #这里 start 为10, stop 为0, step 为 - 1,循环会从10开始,每次减少1, #到1结束(不包含0), #依次打印出 10 、 9 、 8 、 7 、 6 、 5 、 4 、 3 、 2 、 1 。
(4)什么是嵌套循环?请解释嵌套循环的工作原理。
答:
定义:嵌套循环是指在一个循环体内部又包含另一个完整的循环结构。常见的有 for - for 嵌套、 while - while 嵌套、 for - while 嵌套等形式。
例如在 for 循环中嵌套 for 循环:
for i in range(3): for j in range(2): print(f\"i = {i}, j = {j}\")
工作原理:外层循环每执行一次,内层循环会完整地执行一遍。以上面代码为例,外层循环 for i in range(3) 会让 i 依次取值为 0 、 1 、 2 。当 i = 0 时,内层循环 for j in range(2) 会让 j 依次取值为 0 、 1 ,并执行 print(f\"i = {i}, j = {j}\") 语句两次;当 i 变为 1 时,内层循环又会重新从 j = 0 开始执行到 j = 1 ;当 i 变为 2 时,内层循环同样会完整执行一遍。总的来说,内层循环会被执行的次数是外层循环次数与内层循环次数的乘积,这里外层循环3次,内层循环2次,内层循环总共执行 3 * 2 = 6 次。
(5)编写代码,判断两个矩形的关系
题目描述
判断两个矩形之间的关系:包含,重叠,相离
输入输出描述
输入两行,每行四个数据,分别是矩形的中心坐标x、y和矩形的宽、高
输出两者的关系
示例1
输入:
2.5 4 2.5 43
1.5 5 0.5 3
输出:
包含
示例2
输入:
1 2 3 5.5
3 4 4.5 5
输出:
重叠
示例3
输入:
1 2 3 3
40 45 3 2
输出:
相离
答:
x1,y1,w1,h1 = map(float,input().split(\" \"))x2,y2,w2,h2 = map(float,input().split(\" \"))if abs(x1 - x2) > (w1 + w2) / 2 or abs(y1 - y2) > (h1 + h2) / 2: print(\"相离\")elif abs(x1 - x2) <= (w1 - w2) / 2 and abs(y1 - y2) <= (h1 - h2) / 2: print(\"包含\")elif abs(x2 - x1) <= (w2 - w1) / 2 and abs(y2 - y1) <= (h2 - h1) / 2: print(\"包含\")else: print(\"重叠\")
(6)编写代码,打印如下数字图案
1 121 12421 1 248421 1248168421 12481632168421124816326432168421
答:
for i in range(7): print(\' \'*(6 - i), end=\' \') for j in range(i + 1): print(2 ** j, end=\' \') for k in range(i): print(2 ** (i - k - 1), end=\' \') print()
(7)编写代码,打印如下星星图案
* *** ***** **************** ******* ***** *** *
答:
for i in range(5): for j in range(4 - i): print(\" \", end=\"\") for k in range(2 * i + 1): print(\"*\", end=\"\") print()for i in range(4, 0, -1): for j in range(5 - i): print(\" \", end=\"\") for k in range(2 * i - 1): print(\"*\", end=\"\") print()
(8)编写代码,求最小公倍数
题目描述
输入两个正整数,计算其最小公倍数,例如4和2的最小公倍数是4,3和5的最小公倍数是15
输入输出描述
输入两个正整数
输出最小公倍数
示例1
输入:
3 9
输出:
9
示例2
输入:
4 6
输出:
12
答:
a, b = map(int, input().split())x = max(a, b)while True: if x % a == 0 and x % b == 0: print(x) break x += 1