- 帖子
- 6
- 精华
- 0
- 积分
- 25
- 阅读权限
- 10
- 注册时间
- 2017-11-2
- 最后登录
- 2017-12-9
|
本帖最后由 asphodelus 于 2017-12-5 15:08 编辑
TED 发表于 2017-12-5 13:52
没看懂你的思路,按着你的码跑了下,也没理出头绪,由于if语句有个判定l和l3长度一致,按代码的意思就是日 ...
根据题意,我在19000101-20171205这个范围里检索满足要求的8位数。
假设在这个范围里任意拿出一个8位数:
1.先判断里面是否有重复的数字:
2.这个数字还得满足日期的格式,月份不能大于12,日期不能大于31(虽然没有影响最后的结果,但是这部分代码是有漏洞的)
for a in range(19000101, 20171206): //设定检索范围
date = str(a) //int类型不能用split拆,所以先转str
l=[] //建一个空的list待用
for x in date: //把str类型的8位数全部拆开放进空列表l中,放进去的时候把元素转成int,这时候l中相当于有8个int类型的数
l.append(int(x))
l2 = set(l) //把l转成集合类型,因为集合中不能有重复元素,所以会自动消去所有重复的数
l3 = list(l2) //将集合转回list后比较set前后两个list长度是否一致,以此判定list里是否有数字被消去,这样就能找到8位都不重复的8位数了。
if (len(l)==len(l3))&(l[4]<2)&(l[6]<3): //因为月份最大只能是12,日期最大只能是31,加上相应限制
print(l) //输出结果 |
-
1.png
(61.59 KB, 下载次数: 694)
|