Python项目31:待办事项列表应用1.0(命令行界面+Json+类+初学者必做)

------------★Python练手项目源码★------------

Python项目27:用Tkinter写日志管理系统(中下等难度)

Python项目26:设计学生成绩管理系统(简易版)

Python项目25:带滚动效果的商场抽奖系统(安排!!!)

Python项目24:基于Tkinter图形化界面,实现的学生课堂点名系统

Python项目23:(简易版)年会员工抽奖程序

Python项目22:一个简单的记账系统(收入+支出+查询)

Python项目21:双色球历史数据爬虫+数据分析小工具

Python项目源码20:银行管理系统(开户、查询、取款、存款、转账、锁定、解锁、退出)

Python项目19:学员信息管理系统(简易版)

Python项目18:使用Pillow模块,随机生成4位数的图片验证码

Python项目17:教你制作一副帅气的春联

Python项目16:教你使用pillow把女神的图片,添加表白文字。

Python项目15:Pygame制作,新年动态烟花

Python项目14:使用random,模拟扑克牌发牌+猜单词游戏

Python项目12:破解zip压缩包的密码

Python项目10:使用Tkinter批量新建文件夹

Python项目09:使用filestools模块,批量添加图片水印

Python小项目05:使用pywifi模块,暴力破解WIFI密码 !!亲测有效

Python经典小游戏02:字母数字代码雨
在这里插入图片描述

1.这个待办事项列表应用具以下功能:
添加任务:用户可以输入任务内容并添加到列表中。
查看任务:显示所有任务,用复选框显示完成状态。
标记完成:可以通过序号将任务标记为已完成。
删除任务:可以通过序号删除任意任务。
持久化存储:所有任务会自动保存到JSON文件中。
错误处理:包含基本的输入验证和错误处理。
在这里插入图片描述
2.使用方法:运行程序后会显示功能菜单,输入数字选择相应操作,数据会自动保存到同目录下的tasks.json文件,退出时会自动保存当前任务列表。软件运行后的效果,我还有3个任务没有完成!
图片
3.代码类思想优势:更好的代码组织:相关功能集中在一个类中,状态管理:通过实例变量维护任务列表状态,封装性:隐藏内部实现细节,暴露清晰接口。可扩展性:更容易添加新功能(如任务分类/优先级等)。可重用性:可以创建多个独立的待办列表实例。

0.封装为类:

将数据和操作封装在TodoList类中

任务数据存储为实例变量self.tasks

文件名存储为实例变量self.filename

访问控制:

使用下划线前缀表示私有方法(_load_tasks, _save_tasks, _show_menu)

公共方法保持原有功能接口

消除全局变量:

所有数据都存储在实例属性中

不再需要传递tasks参数

提高可维护性:

相关功能集中在一个类中

方法按功能模块化组织

更容易扩展和重用

改进数据存储:

文件路径可配置(通过构造函数参数)

存储逻辑与业务逻辑分离

# -*- coding: utf-8 -*-
# @Author : 小红牛
# 微信公众号:WdPython
import json
import os

class TodoList:
    def __init__(self, filename="tasks.json"):
        self.filename = filename
        self.tasks = self._load_tasks()

    def _load_tasks(self):
        """加载任务列表"""
        if os.path.exists(self.filename):
            with open(self.filename, "r") as f:
                return json.load(f)
        return []

    def _save_tasks(self):
        """保存任务列表"""
        with open(self.filename, "w") as f:
            # indent=2的作用是指定缩进级别为2个空格,数据可读性
            json.dump(self.tasks, f, indent=2)
    # 静态方法
    @staticmethod
    def _show_menu():
        """显示菜单"""
        print("\n---待办事项功能列表---")
        print("1. 添加新任务")
        print("2. 查看所有任务")
        print("3. 标记任务为已完成")
        print("4. 删除任务")
        print("5. 保存并退出")

    def add_task(self):
        """添加新任务"""
        task_name = input("请输入任务内容: ").strip()
        if task_name:
            self.tasks.append({"name": task_name, "completed": False})
            print(f"已添加任务: {task_name}")

        else:
            print("任务内容不能为空!")

    def show_tasks(self):
        """显示所有任务"""
        if not self.tasks:
            print("当前没有任务!")
            return

        print("\n任务列表:")
        for i, task in enumerate(self.tasks, 1):
            status = "已完成" if task["completed"] else " "
            print(f"{i}. [{status}] {task['name']}")

    def complete_task(self):
        """标记任务为已完成"""
        self.show_tasks()
        try:
            task_num = int(input("请输入要标记完成的任务序号: "))
            if 1 <= task_num <= len(self.tasks):
                self.tasks[task_num - 1]["completed"] = True
                print("任务标记为已完成!")
            else:
                print("无效的任务序号!")
        except ValueError:
            print("请输入有效的数字!")

    def delete_task(self):
        """删除任务"""
        self.show_tasks()
        try:
            task_num = int(input("请输入要删除的任务序号: "))
            if 1 <= task_num <= len(self.tasks):
                removed = self.tasks.pop(task_num - 1)
                print(f"已删除任务: {removed['name']}")
            else:
                print("无效的任务序号!")
        except ValueError:
            print("请输入有效的数字!")

    def run(self):
        """运行主程序"""
        while True:
            self._show_menu()
            choice = input("请选择操作 (1-5): ").strip()
            if choice == "1":
                self.add_task()
            elif choice == "2":
                self.show_tasks()
            elif choice == "3":
                self.complete_task()
            elif choice == "4":
                self.delete_task()
            elif choice == "5":
                self._save_tasks()
                print("已保存任务,再见!")
                break
            else:
                print("无效的输入,请选择1-5之间的数字!")

if __name__ == "__main__":
    app = TodoList()
    app.run()

完毕!!感谢您的收看

----------★★跳转到历史博文集合★★----------

我的零基础Python教程,Python入门篇 进阶篇 视频教程 Py安装py项目 Python模块 Python爬虫 Json Xpath 正则表达式 Selenium Etree CssGui程序开发 Tkinter Pyqt5 列表元组字典数据可视化 matplotlib 词云图 Pyecharts 海龟画图 Pandas Bug处理 电脑小知识office自动化办公 编程工具 NumPy Pygame

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值