当前位置: 首页 > news >正文

【技术面试提+HR面试题】Python中循环与循环嵌套的基础知识以及Python中循环的基础编程题

1.技术面试题

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

答:首先明确什么是单调栈:单调栈是一种特殊的栈数据结构,其核心特性是栈内元素始终保持严格的单调性(递增或递减)。这种特性使得它在解决一些与 “寻找下一个更大 / 更小元素” 相关的问题时,能显著提升效率,通常可将时间复杂度从暴力解法的 O (n²) 优化至 O (n)。

工作原理:把调用函数想成 “叠盘子”:每次用新函数,就把盘子放最上面;函数执行完,就从最上面拿走盘子,底下的接着用

应用场景:就像算数学题的步骤记录:例如做 “2 + (3 - 1)” 这样的题,先算括号里 “3 - 1”(把这一步压栈),算完得到 2 ,弹出栈,再算 “2 + 2” ,就像用栈记住分步计算的顺序,不会乱套 。

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

答:明确什么是单调队列:简单说,单调队列就是一个排好固定顺序的队伍,新来的人会把破坏顺序的人请出去,自己再站进来

工作原理:单调队列本质是一种特殊的队列结构,其核心特性是队列中的元素始终保持单调递增或递减。与普通队列不同,它在插入新元素时会动态调整队列结构,以维持单调性。

应用场景:

  1. 滑动窗口最值:快速求固定窗口内的最大 / 最小值(如 LeetCode 239 题)。

  2. 优化动态规划:将区间最值查询的时间复杂度从 O (n²) 降至 O (n)。

  3. 邻接元素查找:找每个元素左右第一个更大 / 更小的元素

2.HR面试题

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

答:明确HR提这个问题的考察点:

  1. 忠诚度与稳定性:看你会不会因短期高薪轻易 “跳槽”,判断你对现有(目标)工作的长期投入意愿。

  2. 职业价值观:想了解你更看重薪资,还是平台、成长、团队契合度等其他职场要素。

  3. 抗压与判断:考察面对诱惑时的思考逻辑,能否理性权衡利弊,而非冲动做决定。

正面回答:“首先会很感谢竞争对手对我的认可,我认为工作除了薪资,在职业发展、团队匹配度等问题上也是一个非常重要的考量点。如果现在的工作(或贵公司)工作氛围、成长空间,团队和业务方向特别吸引我,有更好的平台能让我持续学到东西、有我认同的发展方向,双倍薪资也不会让我轻易离开。”

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

答:明确HR提这个问题的考察点:

1、看你会不会因否定而情绪崩溃(抗压);

2、能否客观看待自己的不足(自我认知);

3、面对拒绝时是否依然保持礼貌、理性(职业素养)。

正面回答:“谢谢您告诉我这个结果,虽然有点小失落,但特别感谢您和团队花时间给我机会,也理解岗位有更合适的人选。如果方便的话,想请教您:我今天哪些地方没达到要求呢?比如是不是某个问题回答得不够清楚,或者哪些能力和岗位不太匹配?知道了这些,以后我也能针对性改进,特别感谢,不管结果怎样,今天的沟通让我对贵公司和这个岗位有了更多了解,以后如果有更适合我的机会,我还会努力争取的,祝您工作顺利

3.选择题

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

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

答:D,break是用于跳出循环的语句

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

for i in range(5):if i == 3:continueprint(i, end=' ')

A. 0 1 2 3 4 B. 0 1 2 4 C. 0 1 2 D. 3

答:B,原因:for i in range(5):中的(5)表示[0,4]这样一个取值范围,if 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 += ii += 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,计算1到10的和,但代码中没有取到10,因此将i < 10改为i <= 10即可

(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,首先从内层循环开始看起,for j in range(2)中(2)表示取值为0,1。for i in range(3)中(3)表取值为0,1,2。f"({i},{j})"表示将i与j的值以(i,j)形式输出。

(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 = 0b = 1,每次循环要更新 ab ,让 a 变为原来的 bb 变为原来 a + b ,即 a, b = b, a + b 便可打印出斐波那契数列的前10个数

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

i = 0
while i < 5:i += 1if i == 3:continueprint(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,i= 0是循环的初始值,将i=0代入循环,当i小于5时,进行下一步i=i+1,如果i= 3,则跳出本次循环,进入下一次的循环。注意当i=4时进入while循环,经过i+=1后变为5被输出。当i=5进入while后判断i=5结束循环输出Done。

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

for i in range(1, 5):for j in range(1, 5):if i * j > 10:breakprint(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与j 的取值范围都是1到4((1,5)的意思从1开始取值,到五结束但不包括5),i在这里表示行,j表列,便可将C,D排除。当if i * j > 10时便执行break语句结束了循环。因此输出的结构只有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,思路跟上一题差不多,i与j的取值都是1到4((1,5)的意思从1开始取值,到五结束但不包括5),然后进入if进行判断,满足if则输出“*”,不满足则执行else输出“#”。

(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

答:D,

4.问答题

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

答:for 循环

  • 遍历可迭代对象(如列表、元组、字符串、字典、文件等)。

  • 已知循环次数(如 range() 生成的数字序列)。

while循环

  • 未知循环次数,需根据条件动态判断(如用户输入验证、网络请求重试)。

  • 条件持续满足时执行(如游戏主循环、服务器监听)

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

答:1. break - 终止整个循环

作用:立即退出当前所在的循环,不再执行剩余的迭代。 适用场景:在满足某个条件时提前结束循环(如找到目标值、发生错误)

例如:

for i in range(10):if i == 5:break  # 当 i=5 时跳出循环print(i)

2.continue-跳过当前迭代

作用:跳过当前迭代的剩余代码,直接进入下一次迭代。 适用场景:过滤不需要处理的元素(如跳过偶数、无效数据)

例如:

for i in range(10):if i % 2 == 0:continue  # 跳过偶数print(i)

3,else-循环正常结束后的操作

作用:当循环正常结束(未被 break 终止)时执行 else 块。 适用场景:验证循环是否成功完成(如搜索失败时的提示)

numbers = [2, 4, 6, 8]
target = 5
​
for num in numbers:if num == target:print(f"找到 {target}")break
else:  # 循环未被 break 时执行print

(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

单参书形式

for i in range(5):print(i, end=' ')

双参数形式

for i in range(5, 10):print(i, end=' ')

三参数形式:

for i in range(0, 11, 2):print(i, end=' ')

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

答:在 Python 中,嵌套循环指的是在一个循环内部再放置另一个循环。这种结构允许你遍历多维数据结构(如矩阵、嵌套列表)或执行需要多次迭代的复杂任务

嵌套循环的工作原理:

  1. 外层循环每执行一次,内层循环会完整执行一轮。

  2. 内层循环结束后,外层循环才会进入下一次迭代。

  3. 总迭代次数 = 外层循环次数 × 内层循环次数

(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

输出:

相离

答:

x1,y1,w1,h1=map(float,input().split(" "))
x2,y2,w2,h2=map(float,input().split(" "))
​
l1 = x1 - w1 / 2
r1 = x1 + w1 / 2
t1 = x1 - h1 / 2
b1 = x1 + h1 / 2
​
l2 = x2 - w2 / 2
r2 = x2 + w2 / 2
t2 = x2 - h2 / 2
b2 = x2 + h2 / 2
​
if (l1 <= l2 and r1 >= r2 and t1 <= t2 and b1 >= b2 or l2 <=l1 and r2 >=r1 and t2 <= t1 and b2 >=b1):print("包含")
if(r1 <= l2 or l1 >= r2 or b1 <= t2 or t1 >=b2):print("重叠")
if(r1 <=l2 or l1 >= r2 or b1 <= t2 or t1 >= b2):print("相离")

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

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

答:

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

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

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

答:

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

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

题目描述

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

输入输出描述

输入两个正整数

输出最小公倍数

示例1

输入:

3 9

输出:

9

示例2

输入:

4 6

输出:

12

答:

num1, num2 = map(int, input().split())
def gcd(a, b):while b:a, b = b, a % breturn a
lcm = num1 * num2 // gcd(num1, num2)
print(lcm)
http://www.dtcms.com/a/276035.html

相关文章:

  • 【设计模式】适配器模式(包装器模式),缺省适配器模式,双向适配器模式
  • OneCode 3.0架构升级:注解驱动与开放接口生态详解
  • 1068万预算!中国足协大模型项目招标,用AI技术驱动足球革命
  • [es自动化更新] 策略体系 | 策略源(容器镜像)
  • Java_Springboot技术框架讲解部分(一)
  • 使用Java完成下面程序
  • Vue3 学习教程,从入门到精通,Vue3指令知识点及使用方法详细介绍(6)
  • 组合数学学习笔记
  • Stance Classification with Target-Specific Neural Attention Networks
  • Linux解决vim中文乱码问题
  • SE机制深度解析:从原理到实现
  • tiktok 弹幕 逆向分析
  • 缺陷特征粘贴增强流程
  • 李宏毅(Deep Learning)--(三)
  • python内置函数 —— zip
  • MyBatis实现分页查询-苍穹外卖笔记
  • 在 Android 库模块(AAR)中,BuildConfig 默认不会自动生成 VERSION_CODE 和 VERSION_NAME 字段
  • docker基础与常用命令
  • 如何让AI更高效
  • 留学真相:凌晨两点被海关拦下时,我才明白人生没有退路
  • 如何用Python编程实现一个简单的Web爬虫?
  • Echarts学习方法分享:跳过新手期,光速成为图表仙人!
  • 【Lucene/Elasticsearch】 数据类型(ES 字段类型) | 底层索引结构
  • 易混淆英语单词对比解析与记忆表
  • 股票的k线
  • BKD 树(Block KD-Tree)Lucene
  • 以太坊重放攻击
  • 特辑:Ubuntu,前世今生
  • 关于学习docker中遇到的问题
  • AI领域的黄埔军校:OpenAI是新一代的PayPal Mafia,门生故吏遍天下