Python小程序之倒计时

利用当前最流行的编程语言Python,来实现一个小案例,最终功能如下图展示:

在这里插入图片描述
在这里插入图片描述

代码为面向过程来写的,没作优化处理,可以利用Python封装继承多态的特性去进行优化,这里暂时不作展示。

详细代码和注释如下:

import time

input_years = 0
input_month = 0
input_day = 0
localtime = time.localtime(time.time())
leap_years = False
while True:
    try:
        input_years = int(input("输入年:"))
        input_month = int(input("输入月:"))
        input_day = int(input("输入日:"))
    except:
        print("请输入数字,谢谢!")
        continue
    if input_years < localtime[0]:
        print("请输入大于或等于当前年份")
        continue
    if input_month in [1, 3, 5, 7, 8, 10, 12]:
        if input_day > 31 or input_day < 1:
            print("大月31天")
            continue
        break
    elif input_month in [4, 6, 9, 11]:
        if input_day > 30 or input_day < 1:
            print("小月30天")
            continue
        break
    elif input_month == 2:
        if input_years % 100 == 0 and input_years % 400 == 0:
            if input_day > 29 or input_day < 1:
                print("闰年2月29天")
                continue
            break
        elif input_years % 4 == 0 and input_years % 100 != 0:
            if input_day > 29 or input_day < 1:
                print("闰年2月29天")
                continue
            break
        elif input_years % 3200 == 0 and input_years % 172800 == 0:
            if input_day > 29 or input_day < 1:
                print("闰年2月29天")
                continue
            break
        else:
            if input_day > 28 or input_day < 1:
                print("平年2月28天")
                continue
            break
    else:
        print("请输入1至12月,谢谢!")
        continue
tm_year = localtime[0]
tm_mon = localtime[1]
tm_day = localtime[2]
tm_hour = localtime[3]
tm_min = localtime[4]
tm_sec = localtime[5]
tm_y_day = localtime[7]
if input_years % 100 == 0 and input_years % 400 == 0:
    leap_years = True
elif input_years % 4 == 0 and input_years % 100 != 0:
    leap_years = True
elif input_years % 3200 == 0 and input_years % 172800 == 0:
    leap_years = True
a = 0
# 计算输入的年里这一日是这一年的第多少天
for i in range(1, input_month + 1):
    for j in range(1, 32):
        if input_month == i and input_day == j:
            a += 1
            print(f"这是{input_years}年第{a}天")
            break
        a += 1
        if i in [1, 3, 5, 7, 8, 10, 12]:
            if j >= 31:
                break
        elif i in [4, 6, 9, 11]:
            if j >= 30:
                break
        elif i == 2:
            if leap_years:
                if j >= 29:
                    break
            else:
                if j >= 28:
                    break
if input_years == tm_year:  # 查询的年份距离当前年份是同一年
    for d in range(a - tm_y_day - 1, -1, -1):
        Var_Hour = 23 - time.localtime(time.time())[3]
        Var_Min = 59 - time.localtime(time.time())[4]
        Var_Sec = 60 - time.localtime(time.time())[5]
        for i in range(Var_Hour, 0, -1):
            for j in range(Var_Min, 0, -1):
                for k in range(Var_Sec, 0, -1):
                    print("\r距离%d年%d月%d日还剩%d天%02d小时%02d分钟%02d秒" % (input_years, input_month, input_day, d, i, j, k),
                          end="")
                    time.sleep(1)
                    if k == 1:
                        Var_Sec = 60
                        break
else:
    if input_years - tm_year == 1:  # 查询的年份距离当前年份大于一整年
        for d in range(365 - tm_y_day + a - 1 if leap_years else 366 - tm_y_day + a - 1, -1, -1):
            Var_Hour = 23 - time.localtime(time.time())[3]
            Var_Min = 59 - time.localtime(time.time())[4]
            Var_Sec = 60 - time.localtime(time.time())[5]
            for i in range(Var_Hour, 0, -1):
                for j in range(Var_Min, 0, -1):
                    for k in range(Var_Sec, 0, -1):
                        print("\r距离%d年%d月%d日还剩%d天%02d小时%02d分钟%02d秒" % (input_years, input_month, input_day, d, i, j, k),
                              end="")
                        time.sleep(1)
                        if k == 1:
                            Var_Sec = 60
                            break
    else:
        var_y = tm_year + 1
        y = -1
        # 判断输入的年份至今年中间有多少个闰年,每个闰年加1天
        while var_y <= input_years:
            if var_y % 100 == 0 and var_y % 400 == 0:
                y += 1
                var_y += 1
            elif var_y % 4 == 0 and var_y % 100 != 0:
                y += 1
                var_y += 1
            elif var_y % 3200 == 0 and var_y % 172800 == 0:
                y += 1
                var_y += 1
            var_y += 1
        print(f"{input_years}至{tm_year + 1}年有{y + 1}个闰年")
        y = (input_years - tm_year - 1) * 365 + y
        for d in range(365 - tm_y_day + a + y - 1 if leap_years else 366 - tm_y_day + a + y - 1, -1, -1):
            Var_Hour = 23 - time.localtime(time.time())[3]
            Var_Min = 59 - time.localtime(time.time())[4]
            Var_Sec = 60 - time.localtime(time.time())[5]
            for i in range(Var_Hour, 0, -1):
                for j in range(Var_Min, 0, -1):
                    for k in range(Var_Sec, 0, -1):
                        print("\r距离%d年%d月%d日还剩%d天%02d小时%02d分钟%02d秒" % (input_years, input_month, input_day, d, i, j, k),
                              end="")
                        time.sleep(1)
                        if k == 1:
                            Var_Sec = 60
                            break


猜你喜欢

转载自blog.csdn.net/QQ128619/article/details/103800142