无论你是一个程序员还是一个普通人,总有一些朋友的生日你不想错过。这时,写一个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设备上运行,帮助我们不错过任何一个好友的生日,增进彼此之间的友谊。