0
点赞
收藏
分享

微信扫一扫

蓝桥杯:回文日期(超详解)

分析:需要考虑的问题:

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))
举报

相关推荐

0 条评论