Python作业2

Python面试题及循环知识解答

1.技术面试题

(1)详细描述单调栈的工作原理和应用场景

答:单调栈即需要保证入栈的元素是保持递增或者递减的。如果有违反递增或者递减的原则,那么就需要通过弹出栈的方式来保持单调栈的性质。
单调栈常被用来解决滑动窗口中元素最大值和最小值的问题。

(2)详细描述单调队列的工作原理和应用场景

答:单调队列是一种特殊的数据结构,能够在常数时间内获取队列中的最大值或最小值。
单调队列通常基于双端队列实现,允许在队首和队尾进行元素的插入和删除操作。当新元素要入队时,从队尾开始检查,如果队尾元素不满足单调性要求,则将队尾元素出队,直到满足单调性要求后,将新元素加入队尾。当队首元素不在当前窗口范围内时,将队首元素出队。
单调队列常被用来解决滑动窗口中元素最大值和最小值、优化动态规划、区间最值等问题。

2.HR面试题

(1)如果竞争对手用双倍薪资挖你,你会怎么选择?

答:我在选择工作时,薪资虽然是重要考虑因素,但并非唯一标准。对我而言,更看重公司的发展平台、团队的技术氛围以及岗位与我职业规划的匹配度。目前我,正处于积累实战经验、提升专业能力的关键阶段,如果能加入贵团队,我相信能在实际项目中快速成长,这比短期高薪更有长远价值。

(2)我们觉得你今天表现一般,不符合岗位要求,你有什么想说的?

答:首先非常感谢您和团队给我这次面试机会,能参与面试本身已经让我学到了很多。对于今天的表现未达预期,我感到有些遗憾,也很希望能了解具体哪些方面存在不足,比如是专业知识、问题解决思路,还是表达能力。我非常希望有机会能够弥补,基于岗位要求的理解我仍认为我具备为这个岗位创造价值的基础。如果是因为我在面试中某个环节未能充分展示,或者您愿意再给我一次机会,我非常希望能有机会进一步证明自己。

3.选择题

(1)在Python中,以下哪个不是循环控制语句?

A. break
B. continue
C. pass
D. return

答:D
return:用于函数返回值并退出函数

(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
当i==3时执行continue,i=0,1,2,4时正常打印,i=3时被跳过。

(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 = 0
i = 1
while i < 10:
    sum += i
    i += 1
print(sum)

A. 将i < 10改为i <= 10
B. 将i += 1改为i += 2
C. 将sum += i改为sum = sum + i + 1
D. 将i = 1改为i = 0

答:A
原代码中while i < 10的循环条件会导致i最大为 9

(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, 1
for _ 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
初始a=0, b=1,打印a后,需更新a为b,b为a+b,才能保证后续数值正确。

(7)以下代码的输出结果是什么?

i = 0
while 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
外层i取1-4,内层j取1-4,当ij > 10时break
i=1:j=1-4均满足1
j<=10,打印 4 项。
i=2:j=1-4均满足2j<=10,打印 4 项。
i=3:j=3时3
3=9<=10,但j=4时34=12>10,因此打印j=1-3。
i=4:j=3时4
3=12>10,因此打印j=1-2。

(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 = 0
for 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 += 1
print(count)

A. 24
B. 36
C. 60
D. 64

答:A

4.问答题

(1)Python中有哪几种基本的循环结构?请简要说明它们的语法和适用场景。

答:Python 中有两种基本循环结构:
1、for 循环语法:
for 变量 in 可迭代对象:
循环体代码
适用场景:当已知循环次数或需要遍历序列时使用。例如遍历列表元素、计算固定次数的迭代等。
2、while 循环语法:
while 条件:
循环体代码
适用场景:当循环次数不确定,需根据条件判断是否继续执行时使用。例如等待用户输入特定值、处理动态生成的数据直到满足退出条件等。

(2)Python中有哪些循环控制语句?它们各自的作用是什么?请给出示例说明。

答:两种循环控制语句
break循环控制语句:立即终止当前循环,跳出循环体,执行循环外的后续代码。
示例:是否连续递增

for i in range(n):
    num = int(input())
    if i == 0:
        pre = num
    else:
        if num >= pre:
            pre = num
        else:
            print("No")
            break
else:
    print("Yes")

continue循环控制语句:跳过当前循环的剩余语句,直接进入下一次循环。
示例:100以内不能被3或5整除的数

for num in range(1, 101):
    if num % 3 == 0 or num % 5 == 0:
        continue
    print(num)

for num in range(1, 101):
    if num % 3 != 0 and num % 5 != 0:
        print(num)

(3)在Python的for循环中,range()函数扮演着重要角色。请详细说明range()函数的语法、参数含义和使用方法,并给出至少3个不同用法的示例。

答:
range () 函数用于生成一个整数序列,语法有三种形式:
range(b):从0到b,步长1
range(a,b):从a到b,步长1
range(a,b,c):从a到b,步长c
参数含义:
a:起始值(默认 0)
b:stop:终止值(必须指定,序列不包含此值)c:step:步长(默认 1,不能为 0)

# a = 0, b = 10, c = 1
for i in range(10):
    print(i)
# a = 10, b = 2, c = 1
for i in range(10, 2):
    print(i)

for i in range(10, 2, -2):
    print(i)

(4)什么是嵌套循环?请解释嵌套循环的工作原理。

答:嵌套循环是指在一个循环(外层循环)的循环体内包含另一个循(内层循环)的结构。
工作原理为:外层循环每执行一次,内层循环会完整执行所有迭代。即外层循环控制 “轮次”,内层循环在每一轮中重复执行。

(5)编写代码,判断两个矩形的关系

题目描述

判断两个矩形之间的关系:包含,重叠,相离

image-20250304171517426

输入输出描述

输入两行,每行四个数据,分别是矩形的中心坐标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

输出:

相离

答:

# def rectangles(a1, a2):
    x1, y1, w1, h1 = a1
    x2, y2, w2, h2 = a2

    left1, right1 = x1 - w1 / 2, x1 + w1 / 2
    top1, bottom1 = y1 - h1 / 2, y1 + h1 / 2

    left2, right2 = x2 - w2 / 2, x2 + w2 / 2
    top2, bottom2 = y2 - h2 / 2, y2 + h2 / 2

    if right1 < left2 or left1 > right2 or bottom1 < top2 or top1 > bottom2:
        return "相离"
    if (left1 <= left2 and right1 >= right2 and top1 <= top2 and bottom1 >= bottom2) or \
       (left2 <= left1 and right2 >= right1 and top2 <= top1 and bottom2 >= bottom1):
        return "包含"
    return "重叠"

# 示例输入
a1 = list(map(float, input("请输入第一个矩形的中心坐标x、y和宽、高:").split()))
a2 = list(map(float, input("请输入第二个矩形的中心坐标x、y和宽、高:").split()))

# 输出结果
print(rectangles(a1, a2))

(6)编写代码,打印如下数字图案

                        1
                    1	2	1
                1	2	4	2	1
            1 	2	4	8	4	2	1
        1	2	4	8	16	8	4	2	1
    1	2	4	8	16	32	16	8	4	2	1
1	2	4	8	16	32	64	32	16	8	4	2	1

答:

# for i in range(1, 8): 
    for k in range(7 - i):  
        print(" ", end=" ")  
    for x in range(i): 
        print(2 ** x, end=" ")  
    for x in range(i - 2, -1, -1):  
        print(2 ** x, end=" ")  
    print()  

(7)编写代码,打印如下星星图案

    *
   ***
  *****
 *******
*********
 *******
  *****
   ***
    *

答:

# n = 9
for i in range(1, n + 1):
    for k in range(abs(i - n // 2 - 1)):
        print(" ", end="")
    j = 1
    while j <= i and j <= n + 1 - i:
        print("*", end=" ")
        j += 1
    print()

(8)编写代码,求最小公倍数

题目描述

输入两个正整数,计算其最小公倍数,例如4和2的最小公倍数是4,3和5的最小公倍数是15

输入输出描述

输入两个正整数

输出最小公倍数

示例1

输入:

3 9

输出:

9

示例2

输入:

4 6

输出:

12

答:

# num1, num2 = map(int, input().split(" "))
min_num = min(num1, num2)
for i in range(min_num, 0, -1):
    if num1 % i == 0 and num2 % i == 0:
        n = i
        break

min_num = (num1 * num2) // n
print(min_num)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值