首页 > 其他分享 >下一次对称日期是几号?

下一次对称日期是几号?

时间:2023-02-06 16:35:50浏览次数:35  
标签:31 30 日期 几号 date 对称 data 回文


20211202

今天是2021年12月2日-20211202,是一个多年难遇的对称日期。为了纪念这有意义的日子,大鹏临时写了一个代码,来根据当天,算下一个回文的日期。好家伙,8年一遇,开撸!

代码不难,主要在这体现一个良好的(自认为)开发习惯。

下一次对称日期是几号?_当前日期

分析

下一次对称日期是几号?_每日一题_02

需求

先理顺下本次的需求:根据输入的日期,来得出下一次的回文(对称)日期:

  1. 输入的日期是8位;
  2. 输出回文日期;

输出的回文日期需要什么条件?

  • 判断一个日期是否是回文串
  • 判断日期是否合法,合法的判断条件是:月份范围在1-12,天数则根据闰年和非闰年确定。

步骤

1. 万事先开始main函数,先写框架后写细节的思想不能丢:

下一次对称日期是几号?_当前日期_03

2. 接着写回文函数,在这个函数里不做逻辑判断,只管输出:

  • 传入当前日期的下一天,这里有两种做法,py的话当然可以int强转后+1: ​​data_date = str(int(data)+1)​​;还可以对字符串切分后(用除法或取余取数),再1000×a+100×b+10×c的方式拼接。
  • 循环从当前日期的下一天开始往下遍历,如果合法且回文,则返回,否则继续

下一次对称日期是几号?_字符串_04

3. 开始判断函数,判断函数主要两块-回文且合法:

  • 回文的判断,对称的字符相同。做法是遍历字符串,以当前index和长度-index-1的位置值进行判断:
  • 月份的判断:把月份(第5,6位)拆出来,需要在12内;
  • 天的判断:根据是否为闰年来进行判断。这里我开始做了一个数组,把闰年和非闰年的每个月的天数列出,再判断闰年和非闰年,根据月份进行匹配。闰年的判断方式是:年份整除4且不能整除100,或者可以整除400:

下一次对称日期是几号?_每日一题_05

下一次对称日期是几号?_字符串_06

代码

最后代码如下

def fun(data_date):
leap_month = ([0,31,29,31,30,31,30,31,31,30,31,30,31],[0,31,28,31,30,31,30,31,31,30,31,30,31])
for i in range(len(data_date)):
if data_date[i] != data_date[len(data_date)-i-1]:
return False
year,mounth, day = int(data_date[:4]), int(data_date[4:6]), int(data_date[-3:-1])
if mounth > 12: return False
index = 0 if (year%4==0 and year%100!=0) or year%400==0 else 1
if(day>leap_month[index][mounth]): return False
return True
def palindrome(data):
flag = 0
data_date = str(int(data)+1)
while True:
if flag == 1: break
if not fun(data_date):
data_date = str(int(data_date)+1)
continue
else:
return data_date

if __name__ == '__main__':
data = input("输入一个日期:")
res = palindrome(data)
print('之后的回文日期:' + res)

我是精神抖擞王大鹏,不卑不亢,和蔼可亲~
计算机硕士,目前小米大数据开发。日常会分享总结一些自己面试实际问题的回答,欢迎一起讨论。

下一次对称日期是几号?_每日一题_07

标签:31,30,日期,几号,date,对称,data,回文
From: https://blog.51cto.com/u_15955938/6039478

相关文章