首页 > 编程知识 正文

用Python编写好友生日提醒

时间:2023-11-22 11:05:32 阅读:287550 作者:QJCQ

无论你是一个程序员还是一个普通人,总有一些朋友的生日你不想错过。这时,写一个Python程序来提醒你的好友的生日就是一个不错的选择。下面我们就来看看如何使用Python实现好友生日提醒。

一、获取生日数据

首先,我们需要获取好友的生日数据。我们可以将这些数据保存在本地文件中,也可以使用数据库。这里,我们使用本地文件存储。

def get_birthdays():
    '''从文件中获取生日数据'''
    with open('birthdays.txt') as f:
        data = f.read().splitlines()
    return data

上面的代码中,我们使用了Python内置的with open()语句来打开文件。读取后,我们通过splitlines()函数将每行生日数据分别保存到一个列表中,以便后续处理。

二、计算生日提醒日期

获取到好友的生日数据后,我们需要对其进行处理,计算出距今最近的一个生日,并设置提醒日期。这里我们采用比较简单的方式:将生日日期与当前日期相减,得到一个差值,再将其除以一年的天数,得到年龄值,再取余一年的天数得到距离下一个生日的天数。如果生日日期已经过去,则将余数加上一年的天数,即得到下一个生日的天数。

import datetime

def days_between_dates(date1, date2):
    '''计算两个日期之间的天数差'''
    delta = date2 - date1
    return delta.days

def days_until_birthday(birthday):
    '''计算到下一个生日还有多少天'''
    today = datetime.date.today()
    # 计算今年的生日
    birthday_date = datetime.date(today.year, birthday.month, birthday.day)
    if birthday_date >= today:
        # 今年生日还未到
        days = days_between_dates(today, birthday_date)
    else:
        # 今年生日已过,计算明年生日的天数
        birthday_date = datetime.date(today.year + 1, birthday.month, birthday.day)
        days = days_between_dates(today, birthday_date)
    return days

这里,我们使用Python标准库的datetime模块来处理日期相关操作。其中的days_between_dates()函数计算两个日期之间的天数差,而days_until_birthday()函数则是计算距离下一个生日还有多少天。

三、编写提醒逻辑

获取到生日,计算到下一个生日还有多少天后,我们就可以开始编写提醒逻辑了。这里,我们需要使用Python的win10toast库来向Windows 10的通知中心发送提醒消息。使用前需要先安装这个库。

!pip install win10toast
from win10toast import ToastNotifier

def send_notification(birthday_name, days_left):
    '''发送生日提醒通知'''
    if days_left == 0:
        message = "今天是{}的生日!".format(birthday_name)
    elif days_left == 1:
        message = "{}的生日就在明天!".format(birthday_name)
    else:
        message = "{}的生日还有{}天!".format(birthday_name, days_left)
    toaster = ToastNotifier()
    toaster.show_toast("生日提醒", message, duration=10)

上面的代码定义了一个send_notification()函数,用于发送生日提醒通知。如果生日当天,则消息为“今天是XX的生日!”;如果距离生日还有1天,则消息为“XX的生日就在明天!”;如果距离生日还有n天,则消息为“XX的生日还有n天!”。

四、完整代码演示

最后,我们将上面的代码组合在一起,形成完整的程序。

import datetime
from win10toast import ToastNotifier

def get_birthdays():
    '''从文件中获取生日数据'''
    with open('birthdays.txt') as f:
        data = f.read().splitlines()
    return data

def days_between_dates(date1, date2):
    '''计算两个日期之间的天数差'''
    delta = date2 - date1
    return delta.days

def days_until_birthday(birthday):
    '''计算到下一个生日还有多少天'''
    today = datetime.date.today()
    # 计算今年的生日
    birthday_date = datetime.date(today.year, birthday.month, birthday.day)
    if birthday_date >= today:
        # 今年生日还未到
        days = days_between_dates(today, birthday_date)
    else:
        # 今年生日已过,计算明年生日的天数
        birthday_date = datetime.date(today.year + 1, birthday.month, birthday.day)
        days = days_between_dates(today, birthday_date)
    return days

def send_notification(birthday_name, days_left):
    '''发送生日提醒通知'''
    if days_left == 0:
        message = "今天是{}的生日!".format(birthday_name)
    elif days_left == 1:
        message = "{}的生日就在明天!".format(birthday_name)
    else:
        message = "{}的生日还有{}天!".format(birthday_name, days_left)
    toaster = ToastNotifier()
    toaster.show_toast("生日提醒", message, duration=10)

def main():
    '''主函数'''
    birthdays = get_birthdays()
    for birthday in birthdays:
        name, date_str = birthday.split(',')
        birthday_date = datetime.datetime.strptime(date_str, '%Y-%m-%d').date()
        days_left = days_until_birthday(birthday_date)
        send_notification(name, days_left)

if __name__ == '__main__':
    main()

最终,我们得到了一个完整的Python程序,可以在任何Windows 10设备上运行,帮助我们不错过任何一个好友的生日,增进彼此之间的友谊。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。