39 Commits

Author SHA1 Message Date
lele555 1bf654f44d 更新 q2/main.py 2026-10-06 16:40:09 +08:00
lele555 600f297e9f 更新 q2/main.py 2026-10-06 16:39:21 +08:00
lele555 87372e3d08 删除 project-a/articleapp/templates/index.html 2026-10-06 16:06:05 +08:00
lele555 228334dc4f 删除 project-a/requirements.txt 2026-10-06 16:05:58 +08:00
lele555 5fadc70eaf 删除 project-a/manage.py 2026-10-06 16:05:54 +08:00
lele555 8fd12709f7 删除 project-a/project/urls.py 2026-10-06 16:05:50 +08:00
lele555 07e4689bfe 删除 project-a/project/wsgi.py 2026-10-06 16:05:46 +08:00
lele555 24d34e3a4f 删除 project-a/project/settings.py 2026-10-06 16:05:43 +08:00
lele555 b824c2f055 删除 project-a/project/asgi.py 2026-10-06 16:05:39 +08:00
lele555 b75906f2ba 删除 project-a/project/__init__.py 2026-10-06 16:05:35 +08:00
lele555 68d2b6eb67 删除 project-a/articleapp/tests.py 2026-10-06 16:05:28 +08:00
lele555 87358e636c 删除 project-a/articleapp/__init__.py 2026-10-06 16:05:17 +08:00
lele555 2ec3637ee5 删除 project-a/articleapp/views.py 2026-10-06 16:05:13 +08:00
lele555 38b26ffe9f 删除 project-a/articleapp/urls.py 2026-10-06 16:05:09 +08:00
lele555 94c33bec87 删除 project-a/articleapp/models.py 2026-10-06 16:05:04 +08:00
lele555 f9aedd930a 删除 project-a/articleapp/admin.py 2026-10-06 16:05:00 +08:00
lele555 50a2a71a03 删除 project-a/articleapp/apps.py 2026-10-06 16:04:55 +08:00
lele555 955662b4ef 添加 q1/test.py 2026-10-06 16:02:49 +08:00
lele555 723e2940c7 更新 project-a/articleapp/apps.py 2026-10-03 14:11:32 +08:00
lele555 61d24e3547 更新 project-a/articleapp/admin.py 2026-10-03 14:10:39 +08:00
lele555 e5f6a2b113 更新 project-a/articleapp/models.py 2026-10-03 14:07:57 +08:00
lele555 d322c3b377 添加 project-a/articleapp/templates/index.html 2026-10-03 11:36:31 +08:00
lele555 aa0bfac172 添加 project-a/articleapp/tests.py 2026-10-03 11:36:01 +08:00
lele555 6d00d64714 添加 project-a/articleapp/urls.py 2026-10-03 11:35:46 +08:00
lele555 33dd9bf6e8 添加 project-a/articleapp/views.py 2026-10-03 11:35:28 +08:00
lele555 a7dbcbd931 添加 project-a/articleapp/models.py 2026-10-03 11:35:06 +08:00
lele555 87984722b9 添加 project-a/articleapp/apps.py 2026-10-03 11:34:47 +08:00
lele555 c62c937189 添加 project-a/articleapp/admin.py 2026-10-03 11:34:29 +08:00
lele555 903b94b281 添加 project-a/articleapp/__init__.py
add articleapp/__init__.py
2026-10-03 11:33:52 +08:00
lele555 fe990504bd 添加 project-a/project/wsgi.py 2026-10-03 11:32:41 +08:00
lele555 be86ac639a 添加 project-a/project/asgi.py 2026-10-03 11:32:26 +08:00
lele555 ef3ba77469 添加 project-a/project/urls.py 2026-10-03 11:32:10 +08:00
lele555 37bc70ee93 添加 project-a/project/settings.py 2026-10-03 11:31:18 +08:00
lele555 03df0f50a4 添加 project-a/project/__init__.py 2026-10-03 11:30:39 +08:00
lele555 eca1711b28 添加 project-a/requirements.txt 2026-10-03 11:28:04 +08:00
lele555 a0cbacf209 添加 project-a/manage.py 2026-10-03 11:27:29 +08:00
lele555 48121d64c7 添加 q2/main.py 2026-10-03 11:22:44 +08:00
lele555 45ab84dda2 添加 q1/main.py 2026-10-03 11:20:13 +08:00
lele555 c404fd251c 更新 written.md 2026-10-03 11:11:33 +08:00
4 changed files with 110 additions and 28 deletions
+34 -26
View File
@@ -1,38 +1,46 @@
import json import json
import os
def analyze_log(filepath: str) -> dict: def analyze_log(filepath: str) -> dict:
result = { if not os.path.exists(filepath):
"total": 0, return {}
"by_level": {},
"by_user": {}, total = 0
"last_error": None by_level = {}
} by_user = {}
last_error = None
try: try:
with open(filepath, 'r', encoding='utf-8') as f: with open(filepath, 'r', encoding="utf-8") as f:
first_line = f.readline()
if not first_line.strip():
return {}
f.seek(0)
for line in f: for line in f:
line = line.strip() line = line.strip()
if not line: if not line:
continue continue
try: try:
log_data = json.loads(line) log_entry = json.loads(line)
except json.JSONDecodeError: level = log_entry["level"]
user = log_entry["user"]
message = log_entry["message"]
except (json.JSONDecodeError, TypeError, KeyError):
continue continue
result["total"] += 1
level = log_data.get("level") total += 1
if level: by_level[level] = by_level.get(level, 0) + 1
result["by_level"][level] = result["by_level"].get(level, 0) + 1 by_user[user] = by_user.get(user, 0) + 1
user = log_data.get("user")
if user:
result["by_user"][user] = result["by_user"].get(user, 0) + 1
if level == "ERROR": if level == "ERROR":
result["last_error"] = log_data.get("message") last_error = message
except FileNotFoundError: except OSError:
pass return {}
return result
return {
if __name__ == "__main__": "total": total,
"by_level": by_level,
res = analyze_log("app.jsonl") "by_user": by_user,
print(res) "last_error": last_error
print("成功") }
+5
View File
@@ -0,0 +1,5 @@
{"timestamp":"2026-10-01 10:23:45","level":"INFO","message":"用户登录成功","user":"老三"}
{"timestamp":"2026-10-02 10:24:01","level":"ERROR","message":"数据库连接失败","user":"老四"}
{"timestamp":"2026-10-03 10:25:12","level":"INFO","message":"用户登出","user":"老八"}
{"timestamp":"2026-10-04 10:26:30","level":"ERROR","message":"超时","user":"老六"}
{"timestamp":"2026-10-05 10:27:00","level":"INFO","message":"任务完成","user":"老王"}
+55
View File
@@ -0,0 +1,55 @@
import json
class UserManager:
def __init__(self):
self.users = []
self.next_id = 1
def add_user(self, name: str, age: int) -> dict:
user = {
"id": self.next_id,
"name": name,
"age": age
}
self.users.append(user)
self.next_id += 1
return user
def get_user(self, user_id: int):
for u in self.users:
if u["id"] == user_id:
return u
return None
def update_age(self, user_id: int, new_age: int) -> bool:
user = self.get_user(user_id)
if user is None:
return False
user["age"] = new_age
return True
def remove_user(self, user_id: int) -> bool:
for idx, u in enumerate(self.users):
if u["id"] == user_id:
self.users.pop(idx)
return True
return False
def list_users(self):
return self.users.copy()
def save_to_json(self, file_path: str):
with open(file_path, "w", encoding="utf-8") as f:
json.dump(self.users, f, ensure_ascii=False, indent=2)
def load_from_json(self, file_path: str):
with open(file_path, "r", encoding="utf-8") as f:
loaded_users = json.load(f)
self.users = loaded_users
if self.users:
max_id = max(u["id"] for u in self.users)
self.next_id = max_id + 1
else:
self.next_id = 1
+16 -2
View File
@@ -163,7 +163,7 @@
### 答案 ### 答案
(在此填写,格式:`1. A 2. B 3. C 4. D 5. A 6. B 7. C 8. D 9. A 10. B`) (在此填写,格式:`1. B 2.B 3. B 4. B 5. A 6. B 7. B 8. B 9. B 10. B )
--- ---
@@ -182,7 +182,8 @@ import copy
c = copy.deepcopy(a) c = copy.deepcopy(a)
``` ```
(在此作答) (在此作答)b是a的浅层copy,而c则是a的深层copy,c相对而言更独立(不受a的影响),所以最后b是[[1, 2, 99], [3, 4]]
而c没变
### 第 2 题:字典与列表的综合应用 ### 第 2 题:字典与列表的综合应用
@@ -203,6 +204,9 @@ logs = [
3. 解释为什么第 2 问不能直接用 `len(logs)` 得到结果,需要什么遍历结构? 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 题:异常处理设计 ### 第 3 题:异常处理设计
@@ -218,3 +222,13 @@ Day_10 中你写过 `safe_int(s)` 函数:能转就返回整数,不能转就
请写出函数代码,并说明:为什么这里用 `try/except` 比先用 `if` 判断再计算更好? 请写出函数代码,并说明:为什么这里用 `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可以让代码更简洁