在生活中,我们总有一些特殊的日子值得庆祝,而纪念日倒计时程序就像是一个贴心的小助手,可以帮我们清晰的记得这些日子。
今天,我们简单30多行Python
代码就可以编写一个简单的纪念日倒计时程序,
效果图
完整代码
关注 入职啦 加入群,一起学习更多实战代码
import datetime
import time
import sys
def input_date():
date_format = "%Y-%m-%d"
# 输入纪念日名称
name = input("请输入纪念日名称(若不输入则默认为纪念日):") or "纪念日"
while True:
input_date_str = input(f"请按照{date_format}的格式输入 {name} 的日期(例如:2025-01-01):")
try:
target_date = datetime.datetime.strptime(input_date_str, date_format)
return target_date, name
except ValueError:
print("输入的日期格式不符合要求,请重新输入!")
def count_down(target_date, name):
while True:
now = datetime.datetime.now()
remaining_time = target_date - now
if remaining_time.total_seconds() < 0:
# 使用转义序列设置红色字体
sys.stdout.write(f"\033[91m{name}\033[0m已经过啦!🌸\n")
break
days = remaining_time.days
seconds = remaining_time.seconds
hours = seconds // 3600
minutes = (seconds % 3600) // 60
seconds %= 60
# 使用转义序列设置红色字体
sys.stdout.write(f"距离 \033[91m{name}\033[0m 还有 {days} 天 {hours} 小时 {minutes} 分钟 {seconds} 秒 🎉🎉🎉\r")
sys.stdout.flush()
time.sleep(1)
if __name__ == "__main__":
print("欢迎使用纪念日倒计时程序!")
target_date, name = input_date()
count_down(target_date, name)
导入库
这段代码导入了 Python 标准库中的两个模块:
- datetime模块: 用于处理日期和时间相关的数据及操作,比如创建日期时间对象、进行日期时间的计算以及日期时间格式化等操作。
- time模块: 常用于处理时间相关的功能,此处主要是利用其 sleep 函数来实现程序暂停,达到每秒更新倒计时显示的效果。
- sys模块: 提供与 Python 运行时环境交互的功能,如获取命令行参数等,这里主要是用来输出彩色字体。
input_date 函数
def input_date():
date_format = "%Y-%m-%d"
# 输入纪念日名称
name = input("请输入纪念日名称(若不输入则默认为纪念日):") or "纪念日"
while True:
input_date_str = input(f"请按照{date_format}的格式输入 {name} 的日期(例如:2025-01-01):")
try:
target_date = datetime.datetime.strptime(input_date_str, date_format)
return target_date, name
except ValueError:
print("输入的日期格式不符合要求,请重新输入!")
这段代码实现了一个简单的日期输入功能,要求用户按照指定的格式输入纪念日和日期,
- 纪念日:如果不输入,则默认为“纪念日”
- 日期:要求格式
YYYY-MM-DD
(例如:2015-01-01)。如果输入的日期格式不正确,程序会提示用户重新输入。
def count_down(target_date, name):
while True:
# 获取当前时间
now = datetime.datetime.now()
# 计算与目标日期的时间差
remaining_time = target_date - now
# 判断目标日期是否已过
if remaining_time.total_seconds() < 0:
# 使用转义序列设置红色字体
sys.stdout.write(f"\033[91m{name}\033[0m已经过啦!🌸\n")
break
# 提取剩余时间的天数、小时、分钟和秒数
days = remaining_time.days
seconds = remaining_time.seconds
hours = seconds // 3600
minutes = (seconds % 3600) // 60
seconds %= 60
# 格式化并输出倒计时信息,实现动态更新,使用转义序列设置红色字体
sys.stdout.write(f"距离 \033[91m{name}\033[0m 还有 {days} 天 {hours} 小时 {minutes} 分钟 {seconds} 秒 🎉🎉🎉\r")
sys.stdout.flush()
# 暂停 1 秒后再次更新
time.sleep(1)
这段代码实现了简单纪念日倒计时的功能,通过不断计算当前时间与目标日期之间的时间差,并显示在屏幕上。
利用 while True
循环持续获取当前时间,并与目标日期相减得到剩余时间。
- 当剩余时间小于
0
时,提示纪念日已过并结束循环。 - 若未过期,通过数学运算从剩余时间中提取出天数、小时、分钟和秒数,将倒计时信息格式化输出到控制台同一行,通过
end="\r"
实现动态更新,且每秒更新一次(由time.sleep(1)
控制),让用户能实时看到距离纪念日的剩余时间。 - 同时我们将转义序列设置为红色的字体,以突出显示纪念日的名称。
if __name__ == "__main__":
print("欢迎使用纪念日倒计时程序!")
target_date, name = input_date()
count_down(target_date, name)
这段代码作为程序的主入口点,当脚本被直接运行时:
- 首先,向用户输出一句友好的欢迎信息,表明这是一个纪念日倒计时程序。
- 接着,调用
input_date
函数,该函数会引导用户按照特定格式(YYYY-MM-DD)输入纪念日的日期,并获取相应的日期数据和纪念日名称,将其分别赋值给target_date
和name
变量。 - 把获取到的
target_date
和name
作为参数传递给count_down
函数,从而启动倒计时流程。 - 在倒计时过程中,
count_down
函数会持续计算当前时间与目标纪念日之间的时间差,并将其转化为直观的天数、小时、分钟和秒数的形式,实时显示给用户,直到目标纪念日已经过去。整个程序结束运行,为用户提供了一个完整且实用的纪念日倒计时体验。
这样的倒计时功能在许多场景中都具有实用价值,例如生日、纪念日、重要节日等,用户可以提前设置好目标日期,运行程序后就能方便地看到距离这些特殊日子还有多久,也方便提前做好准备。
关注入职啦,学习更多知识