用 Python 编写纪念日倒计时程序

在生活中,我们总有一些特殊的日子值得庆祝,而纪念日倒计时程序就像是一个贴心的小助手,可以帮我们清晰的记得这些日子。

今天,我们简单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_datename 变量。
  • 把获取到的 target_datename 作为参数传递给 count_down 函数,从而启动倒计时流程。
  • 在倒计时过程中,count_down 函数会持续计算当前时间与目标纪念日之间的时间差,并将其转化为直观的天数、小时、分钟和秒数的形式,实时显示给用户,直到目标纪念日已经过去。整个程序结束运行,为用户提供了一个完整且实用的纪念日倒计时体验。

这样的倒计时功能在许多场景中都具有实用价值,例如生日、纪念日、重要节日等,用户可以提前设置好目标日期,运行程序后就能方便地看到距离这些特殊日子还有多久,也方便提前做好准备。

关注入职啦,学习更多知识

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值