3.6
Python运算符与判断语句详解与高频考题
在Python面试中,运算符的优先级和判断语句的灵活运用是基础中的基础,却常因“看似简单”而被忽略,导致隐性失分。本文将帮你系统梳理这两大核心,直击面试高频考点。
1
运算符:不仅是计算,更是逻辑
(1)请说明 ==与 is的区别。
参考答案:
==:值比较。检查两个对象的值是否相等。
is:身份比较。检查两个变量是否指向内存中的同一个对象。
a = [1, 2, 3]b = [1, 2, 3] # 值相同,但`b`是新创建的对象c = a # `c`和`a`指向同一个列表对象print(a == b) # True,值相等print(a is b) # False,不是同一个对象print(a is c) # True,是同一个对象
a = [1, 2, 3]
b = [1, 2, 3] # 值相同,但`b`是新创建的对象
c = a # `c`和`a`指向同一个列表对象
print(a == b) # True,值相等
print(a is b) # False,不是同一个对象
print(a is c) # True,是同一个对象
面试点:对于小整数(通常是-5至256)和短字符串,因Python的驻留机制,is可能返回True,但永远不要依赖此行为做值比较,只用==。
(2)逻辑运算符 and、or、not的运算规则是什么?什么是“短路求值”?
运算规则:
x and y:若x为真,则返回y;若x为假,则直接返回x。
x or y:若x为真,则直接返回x;若x为假,则返回y。
not x:布尔取反。
短路求值:and和or在确定结果后,会立即停止运算。这是关键性能优化和条件执行技巧。
def func(): print("函数被调用了!") return Trueprint(False and func()) # 输出:False。`func()`因短路不会被调用!print(True or func()) # 输出:True。`func()`同样不会被调用。
def func():
print("函数被调用了!")
return True
print(False and func()) # 输出:False。`func()`因短路不会被调用!
print(True or func()) # 输出:True。`func()`同样不会被调用。
(3)in和 not in运算符适用于哪些场景?
用于检查一个值是否存在于一个容器中,如列表、元组、字符串、字典(检查键)、集合。
my_list = [1, 2, 3]print(2 in my_list) # Trueprint(4not in my_list) # Truemy_dict = {'a': 1}print('a' in my_dict) # True,检查键print(1 in my_dict) # False
my_list = [1, 2, 3]
print(2 in my_list) # True
print(4not in my_list) # True
my_dict = {'a': 1}
print('a' in my_dict) # True,检查键
print(1 in my_dict) # False
2
条件判断:程序的决策核心
(1)编写一个标准的 if-elif-else 结构,判断成绩等级。
score = 85if score >= 90: grade = 'A'elif score >= 80: # 隐含了 score < 90 grade = 'B'elif score >= 70: grade = 'C'elif score >= 60: grade = 'D'else: grade = 'F'print(f"成绩{score}分,等级为{grade}") # 成绩85分,等级为B
score = 85
if score >= 90:
grade = 'A'
elif score >= 80: # 隐含了 score < 90
grade = 'B'
elif score >= 70:
grade = 'C'
elif score >= 60:
grade = 'D'
else:
grade = 'F'
print(f"成绩{score}分,等级为{grade}") # 成绩85分,等级为B
(2)请解释“三元条件表达式”的语法,并举例。
语法:x if condition else y
如果条件condition为真,则表达式结果为x,否则为y。
# 传统写法if age >= 18: status = '成年'else: status = '未成年'# 三元表达式写法(更简洁,适用于简单赋值)status = '成年'if age >= 18else'未成年'
# 传统写法
if age >= 18:
status = '成年'
status = '未成年'
# 三元表达式写法(更简洁,适用于简单赋值)
status = '成年'if age >= 18else'未成年'
注意:只适用于简单的二选一场景,嵌套会降低可读性。
(3)以下代码的输出是什么?解释原因。
a = 0if a = 1: # 注意,这里是一个等号 print("a is 1")else: print("a is not 1")
a = 0
if a = 1: # 注意,这里是一个等号
print("a is 1")
print("a is not 1")
代码会报错:SyntaxError: invalid syntax
原因:在if的条件判断中,错误地使用了赋值运算符=,而不是比较运算符==。Python语法不允许在条件表达式中直接赋值,这有效避免了潜在的逻辑错误。应改为 if a == 1:。
3
常见面试陷阱与最佳实践
(1)警惕浮点数比较
不要直接用==比较浮点数(如0.1+0.2==0.3),因存在精度误差。应使用范围比较或math.isclose()。
# 正确做法abs(0.1 + 0.2 - 0.3) < 1e-9
# 正确做法
abs(0.1 + 0.2 - 0.3) < 1e-9
(2)判断是否为None
永远使用 is None或 is not None,而非==。因为None是单例对象。
(3)空值判断的简写
利用Python的“真假”特性进行简洁判断。
# 检查列表是否非空if my_list: # 等价于 iflen(my_list) > 0: pass# 检查字符串是否为空ifnot my_string: # 等价于 if my_string == "": pass
# 检查列表是否非空
if my_list: # 等价于 iflen(my_list) > 0:
pass
# 检查字符串是否为空
ifnot my_string: # 等价于 if my_string == "":
4
总结与备考建议
核心:理清is与==的本质区别,掌握逻辑运算的短路特性。
关键:熟练运用if-elif-else结构,理解三元表达式的适用场景。
避坑:在条件判断中杜绝=的误用,用is进行None判断,小心浮点数比较。
思维:面试时听到问题,先思考考官在考察哪个具体知识点(如身份与值、短路、语法细节),再组织回答。
收藏此篇,构建你牢固的Python基础防线。
你在使用运算符和判断语句时,还踩过哪些“坑”?欢迎在评论区分享交流!