吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2179|回复: 12
收起左侧

[Python 转载] 【Python】初学笔记-求对称的日期,20211202就是对称日期

  [复制链接]
surepj 发表于 2021-12-2 10:35
看到今天20211202,倒过来也是20211202,是为对称日,所以用Python也写了个求以后的对称日期,看样子以后要十年再遇一次了。

[Python] 纯文本查看 复制代码
date_start = 20211202
date_end = 20991231
for i in range(date_start,date_end):
    b = str(i)
    list1 = []
    list1.extend(b)
    list2 = list1.copy()
    list2.reverse()
    if list1 == list2:
        c = int(list1[4])*10 + int(list1[5])
        if c <= 12:
            list1 = ''.join(list1)
            print(f'{date_start}-{date_end}中对称的日期有:', list1)


运行如下:
[Python] 纯文本查看 复制代码
20211202-20991231中对称的日期有: 20211202
20211202-20991231中对称的日期有: 20300302
20211202-20991231中对称的日期有: 20400402
20211202-20991231中对称的日期有: 20500502
20211202-20991231中对称的日期有: 20600602
20211202-20991231中对称的日期有: 20700702
20211202-20991231中对称的日期有: 20800802
20211202-20991231中对称的日期有: 20900902

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

醉红尘0 发表于 2021-12-2 11:25
[Python] 纯文本查看 复制代码
st_day = 20210101
en_day = 20991231
for i in range(st_day,en_day):
    if str(i) == str(i)[::-1]:
        print("%d是对称日期" % i)



提供一种更简单的方法,即通过判断字符串日期的倒序是否与原字符串相等

免费评分

参与人数 3吾爱币 +3 热心值 +3 收起 理由
wanderrr + 1 + 1 热心回复!
surepj + 1 + 1 谢谢@Thanks!
为了青春 + 1 + 1 热心回复!

查看全部评分

醉红尘0 发表于 2021-12-4 17:07
如果只是求某个范围内的回文数,直接用求字符串倒序的方式就足够了。
如果求的是某个时间范围的对称日期,建议使用datatime模块对日期进行判断,手动判读月份还好,日的话还要判断大小月,还有二月的润年

示例代码:
[Python] 纯文本查看 复制代码
# -*- coding: utf-8 -*-
import datetime
st_day = "2011-11-11"
en_day = "2099-11-11"
st_day_data = datetime.date(*map(int, st_day.split('-')))
en_day_data = datetime.date(*map(int, en_day.split('-')))
test_day_data = st_day_data
while test_day_data <= en_day_data:
    test_day_str = str(test_day_data).replace('-','')
    if str(test_day_str) == str(test_day_str)[::-1]:
        print("%s是对称日期" % test_day_str)
    test_day_data = test_day_data + datetime.timedelta(1)


微信截图_20211204170649.png

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
surepj + 1 + 1 用心讨论,共获提升!

查看全部评分

zqc8 发表于 2021-12-2 13:35
 楼主| surepj 发表于 2021-12-2 14:16
本帖最后由 surepj 于 2021-12-2 14:29 编辑
醉红尘0 发表于 2021-12-2 11:25
[mw_shl_code=python,true]st_day = 20210101
en_day = 20991231
for i in range(st_day,en_day):

感谢分享,好像还有点问题,日期月份不能大于12没有考虑到:
20211202是对称日期
20222202是对称日期
20233202是对称日期
20244202是对称日期
20255202是对称日期
20266202是对称日期
20277202是对称日期
20288202是对称日期
... ...
 楼主| surepj 发表于 2021-12-2 14:17
zqc8 发表于 2021-12-2 13:35
这不就是回文数吗?

差不多是那个意思。
yueye121 发表于 2021-12-2 15:23
有bug啊,只判断了月份<=12,没有判断日期<=30/31
 楼主| surepj 发表于 2021-12-2 16:28
yueye121 发表于 2021-12-2 15:23
有bug啊,只判断了月份

有道理,在19xx年份或之前,还有23xx年份或之后是有些问题的,哈哈。
Jaybo 发表于 2021-12-2 16:49
谢谢大佬分享,谢谢谢
halfone 发表于 2021-12-3 09:54
[Python] 纯文本查看 复制代码
st_day = 20210101
end_day = 20991231
for i in range(st_day, end_day):
        if (str(i) == str(i)[::-1]) and int(str(i)[4:6]) < 13:
                print('%d 是对称日' % i)


希望大佬可以进一步优化

输出结果:
20211202 是对称日
20300302 是对称日
20400402 是对称日
20500502 是对称日
20600602 是对称日
20700702 是对称日
20800802 是对称日
20900902 是对称日
[Finished in 395ms]
 楼主| surepj 发表于 2021-12-3 15:02
halfone 发表于 2021-12-3 09:54
[Python] 纯文本查看 复制代码
st_day = 20210101
end_day = 20991231
for i in range(st_day, end_day):
[/quote]

感谢分享!
在202101至20991231这段时间,你的代码是完全可以的。
但如果是19xx0101至23xx1231时间内,运行就有:

19900991 是对称日
...
23000032 是对称日
...

月份和日期还是会有点问题。
我在你基础上又优化了下:
[mw_shl_code=python,true]st_day = 18000101
end_day = 23991231
for i in range(st_day, end_day):
        if (str(i) == str(i)[::-1]) and 0 < int(str(i)[4:6]) < 13 and int(str(i)[1::-1]) < 31:
                print('%d 是对称日' % i)
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 10:11

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表