python系列之綜合項目:智能個人任務管理系統

不為失敗找理由,只為成功找方法。所有的不甘,因為還心存夢想,所以在你放棄之前,好好拼一把,只怕心老,不怕路長。

python系列之文件操作:讓程序擁有"記憶"的超能力!

    • 一、項目概述:智能個人任務管理系統
    • 二、項目結構
    • 三、完整代碼實現
      • 1. models.py - 數據模型
      • 2. storage.py - 數據存儲
      • 3. utils.py - 工具函數
      • 4. main.py - 主程序
    • 四、運行效果
    • 五、項目功能說明
    • 如何運行
    • 學習要點
    • 六、擴展建議

python系列前期章節

  1. python系列之注釋與變量
  2. python系列之輸入輸出語句與數據類型
  3. python系列之運算符
  4. python系列之控制流程語句
  5. python系列之字符串
  6. python系列之列表
  7. python系列之元組
  8. python系列之字典
  9. python系列之集合
  10. python系列之函數基礎
  11. python系列之函數進階
  12. python系統之綜合案例1:用python打造智能詩詞生成助手
  13. python系列之綜合案例2:用python開發《魔法學院入學考試》文字冒險游戲
  14. python系列之類與對象:面向對象編程(用造人計劃秒懂面向對象)
  15. python系列之類與對象:python系列之詳解面向對象的屬性)
  16. python系列之詳解面向對象的函數
  17. python系列之面向對象的三大特性
  18. python系列之異常處理:給代碼穿上“防彈衣”
  19. python系列之文件操作:讓程序擁有“記憶“的超能力!”

在前面的章節中,我們已經學習了很多關于python的知識點,所以本章將在我們所學的知識里做一個小項目。此項目它結合了面向對象編程、異常處理、文件操作等知識點,幫助你鞏固所學內容并深入理解技術應用。

一、項目概述:智能個人任務管理系統

這是一個命令行界面的任務管理應用,可以幫助用戶創建、組織、跟蹤和完成任務。項目將展示以下Python特性:

  • 面向對象編程(類、繼承、封裝)
  • 異常處理
  • 文件操作(JSON格式存儲)
  • 日期時間處理
  • 命令行界面設計

二、項目結構

task_manager/
├── main.py          # 主程序入口
├── models.py        # 數據模型(任務、項目等類)
├── storage.py       # 數據存儲處理
├── utils.py         # 工具函數
└── tasks.json       # 任務數據文件(自動生成)

三、完整代碼實現

1. models.py - 數據模型

from datetime import datetime, timedelta
import reclass Task:"""任務類"""def __init__(self, title, description="", due_date=None, priority=1, project=None, tags=None):self.title = titleself.description = descriptionself.due_date = due_dateself.priority = priority  # 1-5,5為最高優先級self.project = projectself.tags = tags or []self.completed = Falseself.created_at = datetime.now()self.completed_at = Noneself.id = self._generate_id()def _generate_id(self):"""生成唯一ID"""timestamp = int(datetime.now().timestamp() * 1000)return f"task_{timestamp}"def mark_complete(self):"""標記任務為完成"""self.completed = Trueself.completed_at = datetime.now()def mark_incomplete(self):"""標記任務為未完成"""self.completed = Falseself.completed_at = Nonedef is_overdue(self):"""檢查任務是否過期"""if not self.due_date or self.completed:return Falsereturn datetime.now() > self.due_datedef days_until_due(self):"""返回距離截止日期的天數"""if not self.due_date or self.completed:return Nonedelta = self.due_date - datetime.now()return delta.daysdef to_dict(self):"""將任務轉換為字典(用于JSON序列化)"""return {"id": self.id,"title": self.title,"description": self.description,"due_date": self.due_date.isoformat() if self.due_date else None,"priority": self.priority,"project": self.project,"tags": self.tags,"completed": self.completed,"created_at": self.created_at.isoformat(),"completed_at": self.completed_at.isoformat() if self.completed_at else None}@classmethoddef from_dict(cls, data):"""從字典創建任務(用于JSON反序列化)"""task = cls(title=data["title"],description=data.get("description", ""),priority=data.get("priority", 1),project=data.get("project"),tags=data.get("tags", []))task.id = data["id"]task.completed = data["completed"]task.created_at = datetime.fromisoformat(data["created_at"])if data["due_date"]:task.due_date = datetime.fromisoformat(data["due_date"])if data["completed_at"]:task.completed_at = datetime.fromisoformat(data["completed_at"])return taskdef __str__(self):status = "?" if self.completed else "?"priority_str = "!" * self.priorityoverdue = " (過期)" if self.is_overdue() else ""due_info = ""if self.due_date:days = self.days_until_due()if days is not None:if days < 0:due_info = f" | {abs(days)}天前到期"else:due_info = f" | 還有{days}天到期"return f"{status} {priority_str} {self.title}{overdue}{due_info}"class Project:"""項目類(包含多個任務)"""def __init__(self, name, description=""):self.name = nameself.description = descriptionself.tasks = []self.created_at = datetime.now()def add_task(self, task):"""向項目添加任務"""task.project = self.nameself.tasks.append(task)def remove_task(self, task_id):"""從項目移除任務"""self.tasks = [task for task in self.tasks if task.id != task_id]def get_completed_tasks(self):"""獲取已完成的任務"""return [task for task in self.tasks if task.completed]def get_incomplete_tasks(self):"""獲取未完成的任務"""return [task for task in self.tasks if not task.completed]def completion_percentage(self):"""計算項目完成百分比"""if not self.tasks:return 0return len(self.get_completed_tasks()) / len(self.tasks) * 100def to_dict(self):"""將項目轉換為字典"""return {"name": self.name,"description": self.description,"tasks": [task.id for task in self.tasks],"created_at": self.created_at.isoformat()}@classmethoddef from_dict(cls, data, all_tasks):"""從字典創建項目"""project = cls(name=data["name"],description=data.get("description", ""))project.created_at = datetime.fromisoformat(data["created_at"])# 通過任務ID找到對應的任務對象task_id_map = {task.id: task for task in all_tasks}for task_id in data["tasks"]:if task_id in task_id_map:project.tasks.append(task_id_map[task_id])return projectdef __str__(self):complete = len(self.get_completed_tasks())total = len(self.tasks)percent = self.completion_percentage()return f"{self.name} ({complete}/{total} 完成, {percent:.1f}%)"

2. storage.py - 數據存儲

import json
import os
from datetime import datetime
from models import Task, Projectclass Storage:"""數據存儲類"""def __init__(self, filename="tasks.json"):self.filename = filenameself.tasks = []self.projects = []def load_data(self):"""從文件加載數據"""if not os.path.exists(self.filename):return Falsetry:with open(self.filename, 'r', encoding='utf-8') as file:data = json.load(file)# 加載任務self.tasks = [Task.from_dict(task_data) for task_data in data.get("tasks", [])]# 加載項目self.projects = [Project.from_dict(project_data, self.tasks) for project_data in data.get("projects", [])]print(f"數據已從 {self.filename} 加載")return Trueexcept (FileNotFoundError, json.JSONDecodeError) as e:print(f"加載數據失敗: {e}")return Falseexcept Exception as e:print(f"加載數據時發生未知錯誤: {e}")return Falsedef save_data(self):"""保存數據到文件"""data = {"tasks": [task.to_dict() for task in self.tasks],"projects": [project.to_dict() for project in self.projects],"last_saved": datetime.now().isoformat()}try:with open(self.filename, 'w', encoding='utf-8') as file:json.dump(data, file, ensure_ascii=False, indent=2)print(f"數據已保存到 {self.filename}")return Trueexcept Exception as e:print(f"保存數據失敗: {e}")return Falsedef add_task(self, task):"""添加任務"""self.tasks.append(task)return self.save_data()def update_task(self, task_id, **kwargs):"""更新任務屬性"""for task in self.tasks:if task.id == task_id:for key, value in kwargs.items():if hasattr(task, key):setattr(task, key, value)return self.save_data()return Falsedef delete_task(self, task_id):"""刪除任務"""# 從任務列表中刪除self.tasks = [task for task in self.tasks if task.id != task_id]# 從所有項目中刪除該任務for project in self.projects:project.remove_task(task_id)return self.save_data()def add_project(self, project):"""添加項目"""self.projects.append(project)return self.save_data()def get_task_by_id(self, task_id):"""根據ID獲取任務"""for task in self.tasks:if task.id == task_id:return taskreturn Nonedef get_project_by_name(self, project_name):"""根據名稱獲取項目"""for project in self.projects:if project.name == project_name:return projectreturn Nonedef get_tasks_by_project(self, project_name):"""獲取屬于指定項目的所有任務"""return [task for task in self.tasks if task.project == project_name]def get_tasks_by_tag(self, tag):"""獲取具有指定標簽的所有任務"""return [task for task in self.tasks if tag in task.tags]

3. utils.py - 工具函數

from datetime import datetime, timedelta
import redef parse_due_date(due_str):"""解析用戶輸入的截止日期字符串支持格式: - YYYY-MM-DD- 今天、明天、后天- 1天后、2周后、3個月后"""if not due_str:return Nonedue_str = due_str.lower().strip()# 處理相對日期if due_str == "今天":return datetime.now().replace(hour=23, minute=59, second=59)elif due_str == "明天":return (datetime.now() + timedelta(days=1)).replace(hour=23, minute=59, second=59)elif due_str == "后天":return (datetime.now() + timedelta(days=2)).replace(hour=23, minute=59, second=59)# 處理相對時間表達式 (如: 2天后, 1周后, 3個月后)match = re.match(r"(\d+)\s*(天|周|月|年)(后)?", due_str)if match:num = int(match.group(1))unit = match.group(2)if unit == "天":delta = timedelta(days=num)elif unit == "周":delta = timedelta(weeks=num)elif unit == "月":# 近似處理,一個月按30天計算delta = timedelta(days=30 * num)elif unit == "年":delta = timedelta(days=365 * num)return (datetime.now() + delta).replace(hour=23, minute=59, second=59)# 處理絕對日期 (YYYY-MM-DD)try:return datetime.strptime(due_str, "%Y-%m-%d").replace(hour=23, minute=59, second=59)except ValueError:pass# 如果無法解析,返回Nonereturn Nonedef format_date(date):"""格式化日期顯示"""if not date:return "無"now = datetime.now()today = now.date()tomorrow = (now + timedelta(days=1)).date()yesterday = (now - timedelta(days=1)).date()if date.date() == today:return "今天"elif date.date() == tomorrow:return "明天"elif date.date() == yesterday:return "昨天"else:return date.strftime("%Y-%m-%d")def display_tasks(tasks, title="任務列表"):"""顯示任務列表"""if not tasks:print("沒有任務")returnprint(f"\n=== {title} ===")for i, task in enumerate(tasks, 1):print(f"{i}. {task}")# 顯示統計信息complete = sum(1 for t in tasks if t.completed)overdue = sum(1 for t in tasks if t.is_overdue())print(f"\n總計: {len(tasks)} 任務 | 完成: {complete} | 未完成: {len(tasks)-complete} | 過期: {overdue}")def display_projects(projects):"""顯示項目列表"""if not projects:print("沒有項目")returnprint("\n=== 項目列表 ===")for i, project in enumerate(projects, 1):print(f"{i}. {project}")def get_user_choice(options, prompt="請選擇"):"""獲取用戶選擇"""for i, option in enumerate(options, 1):print(f"{i}. {option}")while True:try:choice = input(f"\n{prompt} (1-{len(options)}): ")if not choice:return Nonechoice_idx = int(choice) - 1if 0 <= choice_idx < len(options):return choice_idxelse:print(f"請輸入 1-{len(options)} 之間的數字")except ValueError:print("請輸入有效的數字")

4. main.py - 主程序

from storage import Storage
from models import Task, Project
from utils import parse_due_date, format_date, display_tasks, display_projects, get_user_choice
from datetime import datetime
import sysclass TaskManager:"""任務管理器主類"""def __init__(self):self.storage = Storage()self.storage.load_data()def run(self):"""運行主程序"""print("歡迎使用智能任務管理系統!")print("輸入 'help' 查看可用命令")while True:try:command = input("\n> ").strip().lower()if command in ["quit", "exit", "q"]:if self.storage.save_data():print("數據已保存,再見!")breakelif command in ["help", "h", "?"]:self.show_help()elif command in ["list", "l", "ls"]:self.list_tasks()elif command in ["add", "a", "new"]:self.add_task()elif command in ["complete", "done", "c"]:self.complete_task()elif command in ["delete", "del", "rm"]:self.delete_task()elif command in ["projects", "p"]:self.list_projects()elif command in ["add-project", "ap"]:self.add_project()elif command in ["view-project", "vp"]:self.view_project()elif command in ["search", "s"]:self.search_tasks()elif command in ["today", "t"]:self.show_today_tasks()elif command in ["overdue", "o"]:self.show_overdue_tasks()else:print("未知命令,輸入 'help' 查看可用命令")except KeyboardInterrupt:print("\n程序被中斷")if self.storage.save_data():print("數據已保存")breakexcept Exception as e:print(f"發生錯誤: {e}")def show_help(self):"""顯示幫助信息"""help_text = """
可用命令:list (l)      - 顯示所有任務add (a)       - 添加新任務complete (c)  - 標記任務為完成delete (del)  - 刪除任務projects (p)  - 顯示所有項目add-project (ap) - 添加新項目view-project (vp) - 查看項目詳情search (s)    - 搜索任務today (t)     - 顯示今天的任務overdue (o)   - 顯示過期任務help (h)      - 顯示此幫助quit (q)      - 退出程序
"""print(help_text)def list_tasks(self):"""顯示所有任務"""display_tasks(self.storage.tasks, "所有任務")def add_task(self):"""添加新任務"""print("\n=== 添加新任務 ===")title = input("任務標題: ").strip()if not title:print("任務標題不能為空")returndescription = input("任務描述 (可選): ").strip()# 獲取截止日期due_input = input("截止日期 (YYYY-MM-DD, 今天, 明天, 2天后等): ").strip()due_date = parse_due_date(due_input)if due_date and due_date < datetime.now():print("警告: 截止日期已經過去!")# 獲取優先級priority = 1try:priority_input = input("優先級 (1-5, 默認為1): ").strip()if priority_input:priority = int(priority_input)if not 1 <= priority <= 5:print("優先級必須在1-5之間,使用默認值1")priority = 1except ValueError:print("輸入無效,使用默認優先級1")# 獲取項目project = Noneif self.storage.projects:project_choice = input("分配到項目? (y/n): ").strip().lower()if project_choice in ["y", "yes"]:print("可用項目:")display_projects(self.storage.projects)choice = get_user_choice([p.name for p in self.storage.projects], "選擇項目")if choice is not None:project = self.storage.projects[choice].name# 獲取標簽tags_input = input("標簽 (多個標簽用逗號分隔): ").strip()tags = [tag.strip() for tag in tags_input.split(",")] if tags_input else []# 創建任務task = Task(title=title,description=description,due_date=due_date,priority=priority,project=project,tags=tags)# 添加到項目(如果指定了項目)if project:project_obj = self.storage.get_project_by_name(project)if project_obj:project_obj.add_task(task)# 保存任務if self.storage.add_task(task):print(f"任務已添加: {task.title}")def complete_task(self):"""標記任務為完成"""incomplete_tasks = [t for t in self.storage.tasks if not t.completed]if not incomplete_tasks:print("沒有未完成的任務")returndisplay_tasks(incomplete_tasks, "未完成任務")choice = get_user_choice([t.title for t in incomplete_tasks], "選擇要標記為完成的任務")if choice is not None:task = incomplete_tasks[choice]task.mark_complete()if self.storage.save_data():print(f"任務已完成: {task.title}")def delete_task(self):"""刪除任務"""if not self.storage.tasks:print("沒有任務可刪除")returndisplay_tasks(self.storage.tasks)choice = get_user_choice([t.title for t in self.storage.tasks], "選擇要刪除的任務")if choice is not None:task = self.storage.tasks[choice]if self.storage.delete_task(task.id):print(f"任務已刪除: {task.title}")def list_projects(self):"""顯示所有項目"""display_projects(self.storage.projects)def add_project(self):"""添加新項目"""print("\n=== 添加新項目 ===")name = input("項目名稱: ").strip()if not name:print("項目名稱不能為空")return# 檢查項目是否已存在if self.storage.get_project_by_name(name):print(f"項目 '{name}' 已存在")returndescription = input("項目描述 (可選): ").strip()project = Project(name=name, description=description)if self.storage.add_project(project):print(f"項目已創建: {name}")def view_project(self):"""查看項目詳情"""if not self.storage.projects:print("沒有項目")returndisplay_projects(self.storage.projects)choice = get_user_choice([p.name for p in self.storage.projects], "選擇要查看的項目")if choice is not None:project = self.storage.projects[choice]print(f"\n=== 項目: {project.name} ===")print(f"描述: {project.description}")print(f"創建時間: {format_date(project.created_at)}")print(f"完成進度: {project.completion_percentage():.1f}%")if project.tasks:display_tasks(project.tasks, "項目任務")else:print("該項目還沒有任務")def search_tasks(self):"""搜索任務"""print("\n=== 搜索任務 ===")keyword = input("搜索關鍵詞: ").strip()if not keyword:print("請輸入搜索關鍵詞")return# 搜索標題和描述中包含關鍵詞的任務results = []for task in self.storage.tasks:if (keyword.lower() in task.title.lower() or keyword.lower() in task.description.lower()):results.append(task)display_tasks(results, f"搜索結果: '{keyword}'")def show_today_tasks(self):"""顯示今天的任務"""today = datetime.now().date()today_tasks = []for task in self.storage.tasks:if task.due_date and task.due_date.date() == today:today_tasks.append(task)display_tasks(today_tasks, "今天的任務")def show_overdue_tasks(self):"""顯示過期任務"""overdue_tasks = [task for task in self.storage.tasks if task.is_overdue()]display_tasks(overdue_tasks, "過期任務")if __name__ == "__main__":manager = TaskManager()manager.run()

四、運行效果

運行效果1
運行效果2
json數據

五、項目功能說明

這個任務管理系統具有以下功能:

  1. 任務管理

    • 創建、查看、完成和刪除任務
    • 設置任務優先級、截止日期和標簽
    • 將任務組織到項目中
  2. 項目管理

    • 創建和管理項目
    • 查看項目進度統計
  3. 數據持久化

    • 使用JSON文件存儲所有數據
    • 自動加載和保存數據
  4. 搜索和過濾

    • 按關鍵詞搜索任務
    • 查看今天到期的任務
    • 查看已過期的任務
  5. 用戶友好的界面

    • 簡單的命令行界面
    • 智能的日期解析(支持"今天"、“明天”、"2天后"等)
    • 清晰的任務顯示格式

如何運行

  1. 將上述代碼保存到相應的文件中
  2. 運行主程序:
    python main.py
    
  3. 按照提示使用各種命令管理任務

學習要點

通過這個項目,你可以學習和鞏固以下Python知識點:

  1. 面向對象編程

    • 類的定義和使用(Task、Project、Storage類)
    • 繼承(雖然沒有顯式使用,但可以擴展)
    • 封裝(私有方法、屬性訪問控制)
    • 類方法和靜態方法
  2. 異常處理

    • 使用try-except處理可能出現的錯誤
    • 自定義異常(可以擴展)
  3. 文件操作

    • JSON文件的讀寫
    • 數據序列化和反序列化
    • 文件路徑處理
  4. 日期時間處理

    • datetime模塊的使用
    • 日期格式化和解析
    • 日期計算和比較
  5. 字符串處理

    • 正則表達式用于解析日期
    • 字符串格式化和操作
  6. 數據結構

    • 列表、字典的復雜操作
    • 列表推導式
    • 數據過濾和搜索

六、擴展建議

完成基礎版本后,你可以嘗試以下擴展:

  1. 添加用戶認證系統
  2. 實現數據加密存儲
  3. 添加Web界面(使用Flask或Django)
  4. 實現任務提醒功能(郵件或桌面通知)
  5. 添加數據統計和可視化
  6. 支持任務導入/導出(CSV、iCalendar格式)

這個項目不僅幫助你鞏固Python基礎知識,還展示了如何將這些知識組合起來創建一個實用的應用程序。通過實際編碼和擴展功能,你會對Python編程有更深入的理解。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/95718.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/95718.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/95718.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

鴻蒙UI開發實戰:解決布局錯亂與響應異常

文章目錄鴻蒙UI開發實戰指南&#xff1a;解決ArkUI聲明式布局錯亂、組件不顯示與事件響應異常引言ArkUI聲明式開發的技術優勢開發痛點與本文價值布局錯亂問題常見原因固定像素單位使用不當布局嵌套層級過深Flex布局屬性配置錯誤響應式布局缺失解決方案彈性單位適配&#xff1a;…

B.50.10.09-RPC核心原理與電商應用

RPC核心原理與電商應用實戰 第1章&#xff1a;RPC核心概念與價值 1.1. 什么是 RPC&#xff1f; RPC (Remote Procedure Call)&#xff0c;即遠程過程調用&#xff0c;是一種允許一臺計算機&#xff08;客戶端&#xff09;上的程序&#xff0c;調用另一臺計算機&#xff08;服務…

【完整源碼+數據集+部署教程】室內場景分割系統源碼和數據集:改進yolo11-DWR

背景意義 研究背景與意義 隨著智能家居和自動化技術的快速發展&#xff0c;室內場景理解在計算機視覺領域中變得愈發重要。室內場景分割不僅是計算機視覺的基礎任務之一&#xff0c;也是實現智能家居、機器人導航、增強現實等應用的關鍵技術。傳統的圖像分割方法在處理復雜的室…

python入門常用知識

一、創建和快捷鍵 創建項目&#xff1a; New project創建模版&#xff1a;項目&代碼的一種默認標記信息創建包(放代碼的地方-方便整理分類更清晰) --- python package創建文本文件(配置文件)&#xff1a;File創建文件夾(測試數據、測試報告、測試截圖)&#xff1a;Director…

原創未發表!POD-PINN本征正交分解結合物理信息神經網絡多變量回歸預測模型,Matlab實現

該代碼實現了一個基于POD降維與物理信息神經網絡&#xff08;PINN&#xff09;結合的回歸預測模型&#xff0c;用于從高維數據中提取關鍵特征并進行物理約束下的數據驅動預測。一、主要功能 數據降維&#xff1a;使用POD&#xff08;Proper Orthogonal Decomposition&#xff0…

對接gemini-2.5-flash-image-preview教程

對接gemini-2.5-flash-image-preview教程 一、前置準備 1. 明確模型要求 本次對接的gemini-2.5-flash-image-preview模型&#xff0c;繼承Gemini系列多模態特性&#xff0c;支持文本生成圖片、文本結合圖片編輯等功能。需注意該模型不支持僅輸出圖片&#xff0c;必須配置["…

如何制造一個AI Agent:從“人工智障”到“人工智能”的奇幻漂流

開篇&#xff1a;什么是AI Agent&#xff1f;它和我的“人工智障”音箱有啥區別&#xff1f;&#x1f3a4;朋友們&#xff0c;先想象一下&#xff1a;你的智能音箱 &#x1f5e3;? -> &#x1f916; -> ?&#xff1a;“Hey Siri&#xff0c;幫我訂一份披薩&#xff0c;…

別錯過!一杯奶茶錢開啟企業微信 Power BI 之旅

隨著微軟的Power BI在數據分析和商業智能領域的廣泛應用&#xff0c;人們對于Power BI使用的便捷性和高效性提出了更高的要求。 為了滿足這些需求&#xff0c;PBI Plus應運而生&#xff0c;它巧妙地將即時通訊軟件的強大功能與Power BI的分析能力相結合。接下來&#xff0c;我們…

MotionSound-簡單易用的文本轉語音工具

本文轉載自&#xff1a;MotionSound-簡單易用的文本轉語音工具 - Hello123工具導航 ** 一、&#x1f3af; MotionSound&#xff1a;一鍵讓文字 “開口說話” 的 AI 配音神器 做視頻沒時間配音&#xff1f;PPT 演示想加逼真語音&#xff1f;試試MotionSound吧&#xff01;它是…

Zynq設備與電腦相連方式

一、Zynq設備通過串口與電腦直接相連 “Zynq設備通過串口與電腦直接相連”是開發和調試Zynq系列SOC(如Zynq-7000或Zynq UltraScale+ MPSoC)時最基礎、最重要的步驟。這個串口連接主要用于: 系統啟動信息輸出:查看Uboot、Linux內核的啟動過程。 系統調試:輸出調試信息(p…

python 邏輯運算練習題

圖書館入館條件檢查題目描述 編寫程序判斷一個人是否能進入圖書館。圖書館有以下入館規則&#xff1a;年齡大于等于 18 歲&#xff0c;或者有家長陪同&#xff08;無論年齡&#xff09;輸入示例圖書館入館檢查 請輸入你的年齡&#xff1a;18 是否有家長陪同&#xff1f;(是/否)…

《Java Stream 流從入門到精通:一行代碼搞定集合操作,效率提升 10 倍》

封面圖上流動的「Stream」字樣&#xff0c;正是 Java 8 以來最革命性的特性之一&#xff01;你是否還在寫冗長的 for 循環遍歷集合&#xff1f;是否為過濾、排序、聚合數據寫一堆重復代碼&#xff1f;Stream 流的出現&#xff0c;以聲明式編程風格將復雜的集合操作濃縮為一行代…

前端筆記2025

前端 與后端交互 下載后端接口的文件時&#xff0c;若是二進制&#xff0c;需要在請求中添加responseType: ‘blob’ 例如 axios.get(‘http://127.0.0.1:8612/api/daily/report/tdjzxz?selectedMonth2022-06’, { headers: { ‘Accesstoken’: ‘f033b94655f84386a0c112b41…

【LeetCode每日一題】226. 翻轉二叉樹 101. 對稱二叉樹

每日一題226. 翻轉二叉樹題目總體思路代碼101. 對稱二叉樹題目總體思路代碼知識點2025.9.5226. 翻轉二叉樹 題目 給你一棵二叉樹的根節點 root &#xff0c;翻轉這棵二叉樹&#xff0c;并返回其根節點。 示例 1&#xff1a; 輸入&#xff1a;root [4,2,7,1,3,6,9] 輸出&am…

【RNN-LSTM-GRU】第三篇 LSTM門控機制詳解:告別梯度消失,讓神經網絡擁有長期記憶

深入剖析LSTM的三大門控機制&#xff1a;遺忘門、輸入門、輸出門&#xff0c;通過直觀比喻、數學原理和代碼實現&#xff0c;徹底理解如何解決長期依賴問題。1. 引言&#xff1a;為什么需要LSTM&#xff1f;在上一篇講解RNN的文章中&#xff0c;我們了解到??循環神經網絡&…

殘差去噪擴散模型

論文題目:Residual Denoising Diffusion Models(殘差去噪擴散模型) 會議:CVPR2024 摘要:殘差去噪擴散模型(RDDM)是一種新的雙重擴散過程,它將傳統的單一去噪擴散過程解耦為殘差擴散和噪聲擴散。這種雙重擴散框架通過引入殘差,將基于去噪的擴散模型擴展為一種統一的、可…

MySQL與ES索引區別

MySQL與ES索引區別 MySQL索引像字典目錄&#xff0c;ES索引更像整個圖書館的書籍分類系統。 關鍵限制&#xff1a;MySQL單表索引大小影響寫性能&#xff0c;ES的分片數創建后不能改。 比如MySQL的“行”對應ES的“文檔”&#xff0c;MySQL的“表”類似ES的“索引”概念。 MySQL…

vue3圖標終極方案【npm包推薦】vue3-icon-sui(含源碼詳解)

簡介 為徹底實現 vue3 項目圖標自由&#xff0c;特開發此 npm包 vue3-icon-sui&#xff0c;全品類圖標&#xff0c;通通支持&#xff01; iconify 圖標svg 圖標font-class 圖標 安裝 npm i vue3-icon-sui -S使用 按需導入 任意頁面中 import myIcon from "vue3-icon-su…

redis----持久化

Redis 提供了兩種主要的持久化機制&#xff0c;用于將內存中的數據保存到磁盤&#xff0c;以防止服務器重啟或故障導致數據丟失。這兩種機制分別是 RDB&#xff08;Redis Database&#xff09;和 AOF&#xff08;Append Only File&#xff09;。1. RDB 持久化RDB 是 Redis 默認…

Docker快速部署Mongodb主副本集實踐

系列文章目錄 第一章 Mongodb的主副本集 文章目錄系列文章目錄前言一、Mongodb基礎介紹數據庫&#xff08;Database&#xff09;集合&#xff08;Collection&#xff09;文檔&#xff08;Document&#xff09;BSON&#xff08;Binary JSON&#xff09;_id&#xff08;主鍵&…