利用当前最流行的编程语言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