Python每日一练 · 四道经典选择题(含详细解析)
Python每日一练 · 四道经典选择题(含详细解析)
本文精选自牛客网 Python 刷题记录,每道题附详细解析、知识拓展和个人思考。适合查漏补缺,夯实基础。
目录
题目1:capitalize() 的返回值
题干:
下面这段 Python3 代码运行后,a 和 b 分别输出什么?
之前我一直没注意这个细节,今天终于搞懂了。
a ='python' b = a.capitalize()print(a)print(b)选项:
A. python python
B. python Python
C. python PYTHON
D. Python Python
我的答案:A(我最初以为 capitalize() 会修改原字符串)
正确答案:B
解析:
capitalize() 方法将字符串的第一个字符转换为大写,其余字符转换为小写,并返回一个新字符串,原字符串 a 不变。所以 a 仍是 ‘python’,b 是 ‘Python’。输出结果为:
text
python
Python
因此选 B。
知识点拓展:
capitalize() 只转换首字母,且其他字母转为小写。
如果想将每个单词首字母大写,用 title()。
其他大小写转换方法:upper()、lower()、swapcase()。
字符串是不可变对象,所有修改操作都返回新字符串,原字符串不受影响。
题目2:字典的键可以是元组吗?
题干:
以下代码运行后,输出什么?
做完这道题我才发现,原来我一直误解了字典与元组的区别
dicts ={} dicts[(1,2)]=({3,(4,5)})print(dicts)选项:
A. 报错
B. {(1, 2): {(4, 5), 3}}
C. {(1, 2): [(4, 5), 3]}
D. {(1, 2): [3, 4, 5]}
我的答案:C(我以为集合会转成列表)
正确答案:B
解析:
字典的键必须是可哈希的(不可变类型)。元组 (1,2) 是不可变的,因此可以作为键。
值是一个集合 {3, (4, 5)},集合本身是可变的,但作为值没有问题。
集合是无序的,输出时元素顺序可能不同,但元素是 3 和 (4,5),所以选项 B 符合。
选项 C 是列表,不符合;D 的元素不对。
知识点拓展:
可哈希类型:不可变类型如 int、str、tuple;可变类型如 list、dict、set 不可哈希。
集合内的元素也必须是可哈希的,所以集合可以包含元组,但不能包含列表。
打印集合时,顺序可能与定义时不同,这是集合的无序性。
接下来这道题更有意思,考查的是默认参数的调用
题目3:默认参数的陷阱
题干:
依次调用 add_user(‘Alice’),再调用 add_user(‘Bob’),两次调用分别返回的列表是什么?
defadd_user(name, users=[]): users.append(name)return users 选项:
A. 第一次 [‘Alice’], 第二次 [‘Bob’]
B. 第一次 [‘Alice’], 第二次 [‘Alice’, ‘Bob’]
C. 第一次 [‘Alice’, ‘Bob’], 第二次 [‘Alice’, ‘Bob’]
D. 两次均抛出 TypeError
我的答案:A(我以为每次调用都会创建新列表)
正确答案:B
解析:
Python 函数的默认参数在定义时只计算一次,后续调用如果没传该参数,会共用同一个默认对象。因此:
第一次调用后,默认列表变为 [‘Alice’];
第二次调用时,仍使用同一个列表,追加 ‘Bob’ 后变为 [‘Alice’, ‘Bob’]。
所以第一次返回 [‘Alice’],第二次返回 [‘Alice’, ‘Bob’]。
知识点拓展:
避免使用可变对象作为默认参数,可以用 None 并在函数内部创建新列表。
defadd_user(name, users=None):if users isNone: users =[] users.append(name)return users 这个陷阱常见于初学者,也是面试常考题。
题目4:divmod() 的返回值
这道题我第一眼差点选对,因为divmod的用法
题干:
以下代码运行后输出什么?
a =100 b =14print(divmod(a, b))选项:
A. (7, 0)
B. (7, 2)
C. [7, 2]
D. None
我的答案:C(我以为返回列表)
正确答案:B
解析:
divmod(a, b) 返回一个元组 (a // b, a % b)。100 除以 14,商为 7,余数为 2,所以结果是 (7, 2)。
知识点拓展:
divmod() 适用于整数和浮点数,返回的商是向下取整。
可以用于同时获取商和余数,比分别计算更高效。
返回值是元组,因此可以用 q, r = divmod(a, b) 解包。
今日总结
今天这四道题涉及:
(1) 字符串方法(capitalize)
(2) 字典键的合法性(可哈希要求)
(3) 函数默认参数的陷阱
(4) 内置函数 divmod 的返回值
其中默认参数是我最容易出错的地方,以后要特别注意避免使用可变默认参数。你也遇到过类似的问题吗?欢迎在评论区留言讨论。
本文首发于 ZEEKLOG,题目来源:牛客网 Python 练习题。
如果觉得有帮助,请点赞、收藏、关注,你的支持是我更新的动力!