15分钟学Python 第8天 :小项目-简单日历

Day 8 小项目:简单日历

项目概述

简单日历项目旨在使用Python创建一个命令行应用程序,它可以显示指定月份的日历,并允许用户输入特定日期的事件。该项目将涉及日期处理、用户输入、数据存储等基本知识。

学习目标

  1. 使用内置库处理日期和时间。
  2. 处理用户输入并进行基本验证。
  3. 使用数据结构存储事件。
  4. 理解控制流和循环。

项目功能

  1. 显示指定年月的日历。
  2. 添加、查看、删除某一日期的事件信息。
  3. 数据持久化(一般通过文本文件存储事件)。

技术栈

  • Python标准库
  • 使用calendar模块显示日历。
  • 使用datetime模块处理日期。
  • 操作文件进行数据持久化。

项目结构

simple_calendar/
│
├── calendar.py          # 主程序文件
└── events.txt           # 事件数据存储文件

详细内容

1. 引入必要的库

首先,我们需要引入Python的内置库:calendardatetime

import calendar
from datetime import datetime
2. 显示日历

我们可以使用calendar模块中的month函数来显示指定月份的日历。代码如下:

def display_calendar(year, month):
    print(calendar.month(year, month))
3. 事件管理

我们使用字典来存储事件,字典的键为日期,值为事件列表。

events = {}

def add_event(date, event):
    if date in events:
        events[date].append(event)
    else:
        events[date] = [event]

def view_events(date):
    return events.get(date, [])

def delete_event(date, event):
    if date in events and event in events[date]:
        events[date].remove(event)
4. 数据持久化

我们将事件信息存储到文本文件中,以便下次运行程序可以加载这些事件。

def save_events_to_file(filename='events.txt'):
    with open(filename, 'w') as file:
        for date, event_list in events.items():
            for event in event_list:
                file.write(f"{date}: {event}\n")

def load_events_from_file(filename='events.txt'):
    try:
        with open(filename, 'r') as file:
            for line in file:
                date, event = line.strip().split(": ")
                add_event(date, event)
    except FileNotFoundError:
        pass
5. 主程序逻辑

主程序将处理用户输入,并根据指令进行相应的操作。

def main():
    load_events_from_file()
    while True:
        print("\n--- 简单日历 ---")
        year = int(input("请输入年份: "))
        month = int(input("请输入月份: "))
        
        display_calendar(year, month)

        action = input("选择操作: [1] 添加事件 [2] 查看事件 [3] 删除事件 [4] 退出: ")
        
        if action == '1':
            date = input("请输入日期 (YYYY-MM-DD): ")
            event = input("请输入事件: ")
            add_event(date, event)
            save_events_to_file()
        elif action == '2':
            date = input("请输入日期 (YYYY-MM-DD): ")
            events_today = view_events(date)
            if events_today:
                print(f"{date} 的事件: {', '.join(events_today)}")
            else:
                print("没有事件。")
        elif action == '3':
            date = input("请输入日期 (YYYY-MM-DD): ")
            event = input("请输入要删除的事件: ")
            delete_event(date, event)
            save_events_to_file()
        elif action == '4':
            break
6. 代码运行流程图

以下是该程序的基本运行流程图:

+--------------+
|   启动程序   |
+--------------+
        |
        v
+--------------+
|   读取事件   |
+--------------+
        |
        v
+-------------------+
|   显示日历       |
+-------------------+
        |
        v
+--------------------------+
|   选择操作 (1-添加, 2-查看, 3-删除, 4-退出) |
+--------------------------+
       /|\
      / | \
     /  |  \
    v   v   v
   添加 查看 删除
    |     |     |
    v     v     v
 保存事件  输出事件 删除事件
    |     |     |
    +-----+-----+
          |
          v
      重新选择操作

示例输出

运行程序时,用户的命令行交互示例如下:

--- 简单日历 ---
请输入年份: 2024
请输入月份: 9
   September 2024
Mo Tu We Th Fr Sa Su
                   1
 2  3  4  5  6  7  8
 9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30

选择操作: [1] 添加事件 [2] 查看事件 [3] 删除事件 [4] 退出: 1
请输入日期 (YYYY-MM-DD): 2024-09-15
请输入事件: 生日聚会

代码完整性与测试

确保在实施该代码时,进行充分的测试,特别是对用户输入的验证(例如,日期格式、月份范围等)。另外,建议添加对非法输入的处理,以提高用户体验。

结论与反思

通过这一项目,学生不仅能掌握Python基础语法,还能学习如何使用Python处理日期,管理简单的数据结构。此外,学生还会理解如何将数据持久化,这是开发实际应用程序的核心能力。


在这里插入图片描述

怎么样今天的内容还满意吗?再次感谢观众老爷的观看。
最后,祝您早日实现财务自由,还请给个赞,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值