학습 목표
이번 강의에서는 지금까지 배운 내용들을 종합하여 중급 수준의 프로젝트를 진행해 보겠습니다. 이 프로젝트를 통해 파이썬의 다양한 기능을 실제로 활용하고, 소프트웨어 개발의 전체적인 흐름을 이해할 수 있는 기회를 제공합니다.
프로젝트 개요
이번 프로젝트에서는 간단한 할 일 목록 관리 프로그램을 구현합니다. 이 프로그램은 사용자로부터 할 일을 입력받아 목록에 추가하고, 목록을 표시하며, 항목을 삭제하는 기능을 갖출 것입니다. 데이터를 파일에 저장하여 프로그램이 종료된 후에도 할 일을 유지할 수 있도록 합니다.
필요한 기능
- 할 일 추가하기
- 할 일 목록 표시하기
- 할 일 삭제하기
- 프로그램 종료 시 데이터 파일에 저장하기
- 프로그램 시작 시 저장된 데이터 불러오기
예제 코드
import json
# 할 일 목록 관리 클래스
class TodoList:
def __init__(self, filename='todo_list.json'):
self.filename = filename
self.tasks = self.load_tasks()
def load_tasks(self):
"""파일에서 할 일 목록을 로드"""
try:
with open(self.filename, 'r') as file:
return json.load(file)
except (FileNotFoundError, json.JSONDecodeError):
return [] # 파일이 없거나 비어있으면 빈 리스트 반환
def save_tasks(self):
"""할 일 목록을 파일에 저장"""
with open(self.filename, 'w') as file:
json.dump(self.tasks, file)
def add_task(self, task):
"""할 일 추가"""
self.tasks.append(task)
self.save_tasks()
def display_tasks(self):
"""할 일 목록 출력"""
print("\n할 일 목록:")
for i, task in enumerate(self.tasks, 1):
print(f"{i}. {task}")
def remove_task(self, index):
"""할 일 삭제"""
if 0 <= index < len(self.tasks):
removed_task = self.tasks.pop(index)
print(f"'{removed_task}'이(가) 삭제되었습니다.")
self.save_tasks()
else:
print("유효하지 않은 번호입니다.")
# 메인 프로그램
def main():
todo_list = TodoList() # TodoList 객체 생성
while True:
print("\n1. 할 일 추가")
print("2. 할 일 목록 보기")
print("3. 할 일 삭제")
print("4. 종료")
choice = input("원하는 작업을 선택하세요 (1-4): ")
if choice == '1':
task = input("추가할 할 일을 입력하세요: ")
todo_list.add_task(task)
elif choice == '2':
todo_list.display_tasks()
elif choice == '3':
todo_list.display_tasks()
try:
index = int(input("삭제할 할 일의 번호를 입력하세요: ")) - 1
todo_list.remove_task(index)
except ValueError:
print("숫자를 입력해야 합니다.")
elif choice == '4':
print("프로그램을 종료합니다.")
break
else:
print("잘못된 선택입니다. 다시 시도하세요.")
if __name__ == "__main__":
main() # 프로그램 시작
코드 설명
- TodoList 클래스: 할 일을 관리하는 클래스로, JSON 파일을 통해 데이터를 저장하고 로드합니다.
- 메서드:
load_tasks
: 저장된 할 일 목록을 로드합니다.save_tasks
: 현재 할 일 목록을 파일에 저장합니다.add_task
: 새로운 할 일을 추가하고 저장합니다.display_tasks
: 현재 할 일 목록을 출력합니다.remove_task
: 선택한 할 일을 삭제합니다.
- 메인 프로그램: 사용자로부터 입력을 받아 할 일을 추가, 표시 및 삭제하는 기능을 구현합니다.
연습 문제
1. 사용자가 할 일에 기한을 추가할 수 있도록 기능을 확장해 보세요. 기한이 지난 할 일은 별도로 표시하세요.
2. 사용자가 할 일을 우선순위에 따라 추가할 수 있도록 기능을 추가하고, 우선순위에 따라 리스트를 정렬하여 표시하세요.
연습 문제 해답
# 1번 문제: 기한 추가 기능 확대
class TodoListWithDeadline(TodoList):
def add_task(self, task, deadline=None):
"""기한이 포함된 할 일 추가"""
if deadline:
task = f"{task} (기한: {deadline})"
super().add_task(task)
def display_tasks(self):
"""할 일 목록 출력 (기한 포함)"""
print("\n할 일 목록:")
for i, task in enumerate(self.tasks, 1):
print(f"{i}. {task}")
print("\n기한이 지난 할 일:")
for task in self.tasks:
if "기한:" in task:
parts = task.split(" (기한: ")
task_name = parts[0]
task_deadline = parts[1][:-1] # ')' 지우기
if task_deadline < '2023-12-31': # 예시 날짜 비교
print(f"{task_name} (기한: {task_deadline})")
# 우선순위 기능 추가 가능
# 2번 문제를 위한 수정 사항 추가
### 설명
- **중급 프로젝트**로 할 일 목록 관리 프로그램을 구현하여 실제 응용 프로그램에서 필요한 다양한 기능을 익힐 수 있도록 합니다.
- **JSON 파일**을 사용하여 데이터를 영구적으로 저장함으로써 구현의 실제적인 사용 사례를 보여줍니다.
- **연습 문제**를 통해 사용자가 프로젝트의 기능을 확장하는 과정에서 코드의 이해도를 높이고, 실제 기능을 구현하는 능력을 기를 수 있도록 하였습니다.
- 프로그램을 확장하는 방법을 학습하는 것은 실무에서 발생할 수 있는 다양한 요구 사항을 처리하는 데 도움이 됩니다.
0 댓글