分析:需要考虑的问题:
1.数值要比输入的大,
解决:创建符合条件的list
2.将回文日期分为年份和年份倒序,对正序切片分为月,号,
解决:整数切片处理,但我一直思考一个问题,例如20200202,月号拆分就是02,02,如果直 接02 == 2,02是错误格式,所以切片的时候计算机自动忽略了02前面的0,将其转化为正 确格式......
3.月份对应天数的判断
解决:if,else解决问题
定义函数是较优选择!
huiwen = int(input("输入回文日期:")) #输入回文日期
def TF(x): #定义一个函数
month = int(x[:2]) #输入回文日期的前两位,整数
day = int(x[2:4]) #输入回文日期的后两位,整数
x = int(x) #将其整数化
if 1 <= month <= 12: #判断月份,排除2000这种,00为末尾的年份
if month == 2: #判断2月份
if x % 4 == 0:
if day <= 29: #判断日期能不能对的上月份的天数,开始逐渐缩小范围
return True
else:
return False
else:
if day <= 28:
return True
else:
return False #使2月份能对的上天数
if month in [1, 3, 5, 7, 8, 10, 12]: #判断31天的月份
if day <= 31:
return True
else:
return False
else: #判断剩下的30天的月份
if day <= 30:
return True
return False #省略else
lt1 = [] #创建空列表容纳满足条件的回文日期,从中选择大于huiwen且最接近的回文日期
lt2 = []
for i in range(1000, 9999): #个人感觉可以排除很多年份,但是大范围保险一点
x1 = str(i)[::-1] #正常回文,字符串
x2 = (str(i)[:2]+str(i)[:2])[::-1] #ABAB回文:BABA,字符串
if TF(x1) and int(x1[::-1] + x1) > huiwen: #月份和日期符合定义函数要求,
lt1.append(int(x1[::-1] + x1)) #注意:x1是倒序,x1[::-1]是正序,如果将其写反,会无范围
if TF(x2) and int(x2[::-1] + x1) > huiwen:
lt2.append(int(x2[::-1] + x1))
print(min(lt1))
print(min(lt2))