Files
ProgrammeHomework/written.md
T
2026-10-03 11:11:33 +08:00

235 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 选择题 + 简答题
> 本文件包含所有选择题与简答题,请在你的仓库中于本文件作答。
> **硬性要求:本文件所有题目均必须完成,未完成的题目不进入部门筛选流程。**
## 一、选择题(每题 2 分,共 10 题,满分 20 分)
> 说明:单选,将答案写在本节末尾的「答案」行中,格式如 `1. A 2. B 3. C ...`。
1. 依次执行以下代码,输出是什么?
```python
def f(x, lst=[]):
lst.append(x)
return lst
a = f(1)
b = f(2)
print(b)
```
- A. `[2]`
- B. `[1, 2]`
- C. `[1]`
- D. `TypeError: 'list' object is not callable`
2. 依次执行以下代码,输出是什么?
```python
a = [1, 2, 3]
b = a
c = a.copy()
a.append(4)
print(b, c)
```
- A. `[1, 2, 3, 4] [1, 2, 3, 4]`
- B. `[1, 2, 3, 4] [1, 2, 3]`
- C. `[1, 2, 3] [1, 2, 3, 4]`
- D. `[1, 2, 3] [1, 2, 3]`
3. 依次执行以下代码,输出是什么?
```python
try:
x = 1 / 0
except ZeroDivisionError:
print("A")
else:
print("B")
finally:
print("C")
```
- A. 只输出 `C`
- B. 输出 `A` 和 `C`
- C. 输出 `B` 和 `C`
- D. 输出 `A`、`B` 和 `C`
4. 依次执行以下代码,输出是什么?
```python
s = " hello "
print(len(s))
print(len(s.strip()))
```
- A. `7 7`
- B. `7 5`
- C. `5 5`
- D. `5 7`
5. 以下代码的执行结果是?
```python
for i in range(5):
if i == 3:
break
else:
print("done")
print("end")
```
- A. 输出 `done` 和 `end`
- B. 只输出 `end`
- C. 只输出 `done`
- D. 什么都不输出
6. 依次执行以下代码,输出是什么?
```python
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
print("...")
class Dog(Animal):
def speak(self):
print(f"{self.name}: woof")
d = Dog("Rex")
d.speak()
```
- A. `...`
- B. `Rex: woof`
- C. 输出两行:`...` 和 `Rex: woof`
- D. `AttributeError: 'Dog' object has no attribute '__init__'`
7. 以下代码中,`d` 的值是什么?
```python
d = {"a": 1, "b": 2}
d = {k: v for k, v in d.items() if v > 1}
print(d)
```
- A. `{'a': 1, 'b': 2}`
- B. `{'b': 2}`
- C. `{1: 'a', 2: 'b'}`
- D. `SyntaxError: invalid syntax`
8. 依次执行以下代码,输出是什么?
```python
import json
s = json.dumps({"name": "张三", "age": 18})
print(type(s))
```
- A. `<class 'dict'>`
- B. `<class 'str'>`
- C. `<class 'bytes'>`
- D. `TypeError: dump() missing 1 required positional argument: 'fp'`
9. 依次执行以下代码,输出是什么?
```python
def f(x):
return x + 1
f(5)
print(f(5))
```
- A. 输出两行:`None` 和 `6`
- B. 只输出 `6`
- C. 只输出 `None`
- D. 输出 `6` 两次
10. 以下代码中,`user.get("city")` 和 `user["city"]` 的区别是什么?
```python
user = {"name": "张三", "age": 18}
```
- A. 没有区别,两者行为完全一致
- B. `get()` 返回默认值 `None`,`[]` 抛出 `KeyError`
- C. `get()` 抛出 `KeyError`,`[]` 返回 `None`
- D. `get()` 只能用于字符串键,`[]` 可以用于任意键
### 答案
(在此填写,格式:`1. B 2.B 3. B 4. B 5. A 6. B 7. B 8. B 9. B 10. B )
---
## 二、简答题(每题 10 分,共 3 题,满分 30 分)
> 说明:直接在本文件对应题目下方作答,支持代码块。
### 第 1 题:浅拷贝与深拷贝
以下代码中,`a`、`b`、`c` 三者之间的关系是什么?执行 `a[0].append(99)` 后,`b` 和 `c` 分别变成什么?请解释原因。
```python
a = [[1, 2], [3, 4]]
b = a.copy()
import copy
c = copy.deepcopy(a)
```
(在此作答)b是a的浅层copy,而c则是a的深层copy,c相对而言更独立(不受a的影响),所以最后b是[[1, 2, 99], [3, 4]]
而c没变
### 第 2 题:字典与列表的综合应用
以下代码模拟"从日志中提取用户信息",请回答:
```python
logs = [
{"user": "张三", "action": "login", "level": "INFO"},
{"user": "李四", "action": "logout", "level": "INFO"},
{"user": "张三", "action": "error", "level": "ERROR"},
{"user": "王五", "action": "login", "level": "INFO"},
{"user": "李四", "action": "error", "level": "ERROR"},
]
```
1. 写出表达式,找出所有 `level` 为 `"ERROR"` 的日志(返回字典列表)。
2. 写出表达式,统计每个用户出现了几次(返回字典,键为用户名,值为次数)。
3. 解释为什么第 2 问不能直接用 `len(logs)` 得到结果,需要什么遍历结构?
(在此作答)
1.[log for log in logs if log["level"] == "ERROR"]
2.{user: sum(1 for log in logs if log["user"] == user) for user in set(log["user"] for log in logs)}
3.因为len(logs)是在计算元素数量(5),应该先for遍历提取user的值(先创建空字典),没则计
### 第 3 题:异常处理设计
Day_10 中你写过 `safe_int(s)` 函数:能转就返回整数,不能转就返回 `None`。
现在请你设计一个 `safe_divide(a, b)` 函数:
- 输入两个字符串 `a` 和 `b`
- 尝试将它们转为数字并计算 `a / b`
- 如果转换失败(`ValueError`)或除数为零(`ZeroDivisionError`),返回 `None`
- 否则返回商(`float`)
请写出函数代码,并说明:为什么这里用 `try/except` 比先用 `if` 判断再计算更好?
(在此作答)
def safe_divide(a, b):
try:
num_a = float(a)
num_b = float(b)
result = num_a / num_b
return result
except (ValueError, ZeroDivisionError):
return None
因为if干的活try/except也可以干,不用if可以让代码更简洁