导航菜单

Python 编程/项目实战
课程进度 95% · 第11/11章11/11章 · 标签 1/2
1

项目:命令行待办事项

实现一个命令行待办事项管理工具,综合运用文件操作、异常处理和面向对象编程。

python
1
import json
2
import os
3
from datetime import datetime
4
 
5
class TodoItem:
6
def __init__(self, title, desc="", priority="中"):
7
self.id = id(self)
8
self.title = title
9
self.description = desc
10
self.priority = priority
11
self.completed = False
12
self.created_at = datetime.now()
13
 
14
def toggle(self):
15
self.completed = not self.completed
16
 
17
def __str__(self):
18
status = "✓" if self.completed else "○"
19
return f"[{status}] {self.title} ({self.priority})"
20
 
21
class TodoList:
22
def __init__(self, filename="todos.json"):
23
self.filename = filename
24
self.items = []
25
self.load()
26
 
27
def add(self, title, desc="", priority="中"):
28
item = TodoItem(title, desc, priority)
29
self.items.append(item)
30
self.save()
2

项目功能实现

python
1
def list_all(self):
2
if not self.items:
3
print("暂无待办事项")
4
return
5
for i, item in enumerate(self.items, 1):
6
print(f"{i}. {item}")
7
 
8
def complete(self, index):
9
if 0 <= index < len(self.items):
10
self.items[index].toggle()
11
self.save()
12
 
13
def delete(self, index):
14
if 0 <= index < len(self.items):
15
self.items.pop(index)
16
self.save()
17
 
18
def save(self):
19
data = [{
20
"title": item.title,
21
"desc": item.description,
22
"priority": item.priority,
23
"completed": item.completed
24
} for item in self.items]
25
with open(self.filename, "w") as f:
26
json.dump(data, f, ensure_ascii=False)
27
 
28
def load(self):
29
if os.path.exists(self.filename):
30
with open(self.filename, "r") as f:
31
data = json.load(f)
32
for item_data in data:
33
item = TodoItem(
34
item_data["title"],
35
item_data.get("desc", ""),
36
item_data.get("priority", "中")
37
)
38
item.completed = item_data.get("completed", False)
39
self.items.append(item)