网站首页 > 基础教程 正文
学姐教你:用Python设计一个贴心的生日提醒小助手,永远不会忘记重要的日子啦~
亲爱的小伙伴们,今天学姐要跟大家分享一个超实用的Python小项目哦!作为一个经常忘记重要日子的迷糊鬼,我特地写了一个生日提醒小助手,再也不用担心错过亲朋好友的生日啦!这个项目会用到文件操作、日期处理和基本的函数编写,超级适合Python初学者练手呢~
1. 项目准备工作
首先我们需要安装一个处理日期的模块datetime,不过这个是Python内置的呢,不用额外安装啦!我们还要准备一个存储生日信息的文本文件,就叫birthdays.txt吧~
from datetime import datetime, timedelta
import os
# 检查文件是否存在,不存在就创建一个空文件
if not os.path.exists('birthdays.txt'):
open('birthdays.txt', 'w').close()
2. 添加生日信息
首先我们来写一个添加生日信息的函数,可以把好友的名字和生日记录下来呢~
def add_birthday():
name = input('请输入好友的名字:')
while True:
try:
date_str = input('请输入生日(格式:YYYY-MM-DD):')
# 验证日期格式是否正确
birthday = datetime.strptime(date_str, '%Y-%m-%d')
break
except ValueError:
print('哎呀,日期格式不对呢,请用YYYY-MM-DD格式重新输入啦~')
with open('birthdays.txt', 'a', encoding='utf-8') as f:
f.write(f'{name},{date_str}\n')
print(f'已经记下{name}的生日啦!')
小贴士:这里用了try-except来处理日期格式错误,这样程序就不会因为用户输入错误的日期而崩溃啦!
3. 检查最近的生日
接下来写一个查看最近生日的功能,这个可以帮我们提前做准备呢!
def check_upcoming_birthdays(days=30):
today = datetime.now()
upcoming = []
with open('birthdays.txt', 'r', encoding='utf-8') as f:
for line in f:
name, date_str = line.strip().split(',')
birthday = datetime.strptime(date_str, '%Y-%m-%d')
# 计算今年的生日日期
this_year_birthday = birthday.replace(year=today.year)
if this_year_birthday < today:
this_year_birthday = birthday.replace(year=today.year + 1)
days_until = (this_year_birthday - today).days
if 0 <= days_until <= days:
upcoming.append((name, this_year_birthday.strftime('%Y-%m-%d'), days_until))
return sorted(upcoming, key=lambda x: x[2])
4. 制作一个简单的交互界面
来做一个可爱的菜单,方便大家使用这个小助手呢~
def main():
while True:
print('\n? 欢迎使用生日提醒小助手 ?')
print('1. 添加新的生日信息')
print('2. 查看最近的生日')
print('3. 退出程序')
choice = input('请选择功能(输入数字1-3):')
if choice == '1':
add_birthday()
elif choice == '2':
upcoming = check_upcoming_birthdays()
if not upcoming:
print('最近30天内没有好友过生日呢~')
else:
print('\n最近30天要过生日的小伙伴:')
for name, date, days in upcoming:
print(f'→ {name}的生日是{date},还有{days}天就到啦!')
elif choice == '3':
print('下次见啦!记得常来看看哦~')
break
else:
print('输入有误啦,请重新选择~')
5. 运行我们的小助手
最后,只需要调用主函数就可以啦!
if __name__ == '__main__':
main()
注意事项:
- 记得把生日信息文件birthdays.txt保存在程序同一目录下哦~
- 日期格式一定要按照YYYY-MM-DD来输入,比如2024-12-25这样子~
- 如果想修改提醒的天数范围,可以在调用check_upcoming_birthdays()时传入不同的天数参数呢!
学习小建议:
- 试试给程序添加删除生日信息的功能?
- 可以尝试把生日信息保存成JSON格式,会更方便处理呢~
- 想要更贴心的话,还可以加入发送邮件提醒的功能哦!
小伙伴们,今天的Python学习之旅就到这里啦!记得动手敲代码,有问题随时在评论区问我哦。祝大家学习愉快,Python学习节节高!
- 上一篇: ABB机器人与Python通讯
- 下一篇: python教程从基础到精通,第9课—日期与时间
猜你喜欢
- 2025-01-05 一文搞懂python日期时间处理-datetime模块
- 2025-01-05 如何实现Python+selenium在指定时间自动运行程序
- 2025-01-05 Python模块datetime、calendar、logging、argparse、re用法
- 2025-01-05 Python常见模块机os、sys、pickle、json、time用法
- 2025-01-05 Python版的迷你程序——年月日时分秒
- 2025-01-05 用于清理数据的 5 个简单有效 Python 脚本
- 2025-01-05 python教程从基础到精通,第9课—日期与时间
- 2025-01-05 ABB机器人与Python通讯
- 2025-01-05 python内置模块datetime.date类详细介绍
- 2025-01-05 python 基础(四)
- 01-07Python从入门到放弃-详解列表、元组和字典
- 01-07python 中字典如何进行复制
- 01-07python入门023:字典嵌套
- 01-07掌握Python字典的12个例子
- 01-07使用Python 获取多级字典(Json)格式所有Key、Value
- 01-07简单学Python——字典的操作1(增加、更改和删除字典元素)
- 01-07Python之容器拾遗:Python就是包裹在一堆语法糖中的字典
- 01-07深入了解python字典的有序特性
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)