Files
2026-08-10 17:26:38 +08:00

70 lines
2.0 KiB
Python
Raw Permalink 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-9 课完整示例:任务业务功能模块
#
# 本模块使用字典表示任务。面向对象的“类”会在第三阶段学习。
from functools import wraps
def log_call(func):
@wraps(func)
def wrapper(*args, **kwargs):
print(f"正在执行:{func.__name__}")
return func(*args, **kwargs)
return wrapper
def get_next_task_id(tasks: list[dict[str, object]]) -> int:
"""根据已有任务计算下一个可用编号。"""
if not tasks:
return 1
# 列表推导式只取出编号max() 找到其中最大的编号。
task_ids = [int(task["id"]) for task in tasks]
return max(task_ids) + 1
@log_call
def add_task(tasks, title: str, priority: str) -> dict[str, object]:
"""创建一条未完成任务,添加到列表并返回这条新任务。"""
cleaned_title = title.strip()
if not cleaned_title:
raise ValueError("任务标题不能为空。")
task = {
"id": get_next_task_id(tasks),
"title": cleaned_title,
"priority": priority,
"completed": False,
}
tasks.append(task)
return task
@log_call
def complete_task(tasks: list[dict[str, object]], task_id: int) -> bool:
"""按编号把任务标记为完成;找到任务返回 True否则返回 False。"""
for task in tasks:
if task["id"] == task_id:
task["completed"] = True
return True
return False
def generate_pending_tasks(tasks: list[dict[str, object]]):
"""逐条生成未完成任务,不预先创建新的完整列表。"""
for task in tasks:
if not task["completed"]:
yield task
def build_task_report(tasks: list[dict[str, object]]) -> dict[str, object]:
"""汇总全部、已完成和未完成任务数量。"""
completed_tasks = [task for task in tasks if task["completed"]]
return {
"total": len(tasks),
"completed": len(completed_tasks),
"pending": len(tasks) - len(completed_tasks),
}