zoukankan      html  css  js  c++  java
  • [python]回答百度知道上的问题2000-2999之间的回文日

    因为百度知道的编辑器没有提供代码功能,将回复写入。


    题目如下:

    求2000到2999的所有回文日,例如20200202 
    用Python怎么做 回文年好求,回文日的话,年月日这咋存啊

    思路一:遍历每一天,将日期转换成文本格式,用于回文格式判断。实现如下:

    import datetime
    #用datetime库处理时间,遍历全部日期,生成字符型,判断是否为回文字符
    
    #对8个字符的文本进行判断
    #字符串的处理你可以观看菜鸟教程相关内容,链接:https://www.runoob.com/python/python-strings.html
    def isHuiWen(str):
        if(len(str) != 8):
            return False
        
        if(str[0] == str[7] and str[1] == str[6] and str[2]==str[5] and str[3] == str[4]):
            return True
        else:
            return False
            
    #print(isHuiWen('20200202'))
    #datetime.date1(year,month,day)用于生成日期
    date1 = datetime.date(2000, 1, 1)#开始日期
    date2 = datetime.date(2999, 12, 31) #结束日期
    #这是没有筛选的范围,其实第2位最大只能是2,因为日期不可能出现32
    #while循环,条件是date1小于date2,__le__ 这个方法是datetime类型比较中小于等于的方法
    while(date1.__le__(date2)):
        str1 = date1.strftime("%Y%m%d")  #将遍历的date1格式成20200202格式的文本
        if(isHuiWen(str1)):    #调用函数测试是否为回文,是则打印
            print(str1)
        date1 = date1 +datetime.timedelta(days=1)

    这种方法遍历的时间肯定长,因为很多不符合条件的都要遍历。1000*365次的遍历

    第二种方法由于时间的关系,不写代码了,思路如下:

    一共8个位置,每个位置可能的数字是0-9,当然第一位和最后一位只能是2,第2、第6位只能是0-2,4-5位只能是0或1,剩下的可能就少很多了。1*3*10*2*2*10*3*1,3600次,写循环遍历每种可能,然后判断形成的字符串能不能组成一个合理的日期。

  • 相关阅读:
    蓝绿发布、灰度发布和滚动发布
    linux redis 设置密码:
    redis配置文件讲解
    17 个方面,综合对比 Kafka、RabbitMQ、RocketMQ、ActiveMQ 四个分布式消息队列
    CentOS 7下安装Redis
    压力测试工具介绍
    【k8s部署kong一】kong k8s 安装 以及可视化管理界面
    Jmeter连接ORACLE数据库
    Jenkins安装插件提示实例似乎已离线问题解决办法
    Fiddler增加显示请求响应时间列
  • 原文地址:https://www.cnblogs.com/aocshallo1/p/12297623.html
Copyright © 2011-2022 走看看