CT2004 发表于 2017-12-11 14:07:35

import datetime as d
now=d.date.today()
t=True
d1=1
while t:
    if len(set(str(now-d.timedelta(days=d1))))==9:
      print(str(now-d.timedelta(days=d1)))
      t=False
    else:
      d1+=1
   
#1987-06-25

cheng二江 发表于 2017-12-11 23:35:08

#!/usr/bin/python
# -*- UTF-8 -*-
import datetime
import time


def is_valid_date(str_date):
    try:
      if time.strptime(str_date, "%Y%m%d"):
            return True
    except:
      return False


date_now = datetime.datetime.now().strftime("%Y%m%d")
for i in reversed(range(int(date_now))):
    if len(set(str(i))) == 8:
      if is_valid_date(str(i)):
            print(i)
            break
else:
    print("not find")
   

Nataya 发表于 2017-12-12 04:19:04

def chercher():
    ajrd = datetime.date.today()
    brithday = str(ajrd.year) + str(ajrd.month) + str(ajrd.day)
    jour = ajrd.day
    mois = ajrd.month
    an = ajrd.year
    jours =
   
    while len(set(brithday)) != len(brithday):
      jour -= 1
      if jour == 0:
            if mois != 0:
                mois -= 1
                jour = jours
            else:
                mois = 12
                jour = 31
                an -= 1
                if an % 400 == 0 or (an % 4 == 0 and an % 100 != 0):
                  jours = 29
                else:
                  jours = 28

      brithday = '{}{:0>2}{:0>2}'.format(an, mois, jour)
   
    return brithday

黑白色的枫 发表于 2017-12-12 11:26:34

{:10_257:}没看懂题目呀

沙漠王子 发表于 2017-12-12 17:28:35

bush牛 发表于 2017-12-8 12:23
这样写的效率比上面要高,上面运行2s左右,下面0.35s左右。
但是当t=23171207的时候(下一次出现这样的 ...

好聪明呀,长见识了。根据题目,日期确实只能是这个形式了。会用计算机以后,大脑已经越来越懒了

碧水青山1981 发表于 2017-12-12 21:43:47

def strcompare(s):
    for i in range(0,7):
      for j in range(i+1,8):
            if s == s:
                return "not match"
      
from datetime import datetime, timedelta
now = datetime.strptime('1972-04-30','%Y-%m-%d')
for i in range(1,30000):
    now = now + timedelta(days=1)
    str1 = str(now).replace('-','').strip()
    if strcompare(str1) != "not match":
      lastdate = now
print lastdate

Frank__3 发表于 2017-12-13 16:59:46

楼主不提供答案,题目答题结束以后,可不可以提供思路???其实不太懂题目。。原谅我很蠢{:10_266:}{:10_269:}
1987-06-25。。那1987-06-24为什么不是的???

jerryxjr1220 发表于 2017-12-13 17:21:12

Frank__3 发表于 2017-12-13 16:59
楼主不提供答案,题目答题结束以后,可不可以提供思路???其实不太懂题目。。原谅我很蠢{:10_2 ...

因为“从这个日期以后就再也没有出现这样的日期”这个条件。
1987-06-25如果成立的话,1987-06-24就是1987-06-25之前的一天,与这个条件矛盾了,所以1987-06-24不成立。

脸圆圆的蘑菇 发表于 2017-12-13 21:15:51

for x in range(1000, 2018):
    for y in range(0, 13):
      for z in range(0, 32):
            a = x // 1000
            b = x // 100 %10
            c = x //10 %10
            d = x % 10
            e = y // 10
            f = y % 10
            g = z // 10
            h = z % 10
            tu = {a, b, c, d, e, f, g, h}
            #print(tu)
            if len(tu) == 8:
                ls = []
                r = str(a) +str(b) +str(c) +str(d) +str(e) +str(f) +str(g) +str(h)
                ls.append(r)
print(ls[-1])
虽然答案是对的,但是迷之不严谨怎么办

PYTHON90小菜鸟 发表于 2017-12-27 10:37:48

birthday=[]
i=2018

years=
months=
days=
months_days={1:31,2:28,3:31,4:30,5:31,6:30,7:31,8:31,9:30,10:31,11:30,12:31}
Find=None

while Find!=True:
    birthday=[]
    i=i-1
    years=i//1000
    years=i%1000//100
    years=i%1000%100//10
    years=i%1000%100%10

    birthday.extend(years)
   
    for j in list(months_days.keys()):
      months=j//10
      months=j%10
      birthday.extend(months)

      for d in range(1,months_days+1):
            days=d//10
            days=d%10
            birthday.extend(days)
            
            if len(set(birthday))==len(birthday):
                print(birthday)
                Find=True

            birthday.pop()
            birthday.pop()
      birthday.pop()
      birthday.pop()

sunnychou 发表于 2018-1-4 09:03:06

好久没见到每日一题了,坚持哦,这种为什么不采用众包形式,大家一起来

永恒的蓝色梦想 发表于 2019-8-17 22:21:00

jerryxjr1220 发表于 2017-12-13 17:21
因为“从这个日期以后就再也没有出现这样的日期”这个条件。
1987-06-25如果成立的话,1987-06-24就是19 ...

老哥3456年12月7日不可以吗……

panheng 发表于 2019-8-18 10:59:38

本帖最后由 panheng 于 2019-8-18 11:09 编辑

如果你有一个问题并使用正则表达式,现在你有两个问题了。
写日期正则表达式用了99%时间,还没考虑闰年的情况,不过2月29日正好也不符合题意{:10_266:}
import re
end = 20171207
start = 19000101    #设置起始日期
list1 = []
p = re.compile(r'\b\d\d\d((0(0|\d|3]))|(0(0|\d|30]))|(02(0|\d))|(1(0|\d|3]))|(11(0|\d|30])))\b')
for date in range(start, end+1):
    if p.match(str(date)):
      temp = {each for each in str(date)}
      if len(temp) == 8:
            list1.append(date)
if len(list1) != 0:
    print(list1[-1])
else:
    print("没有符合条件的日期")
19870625

panheng 发表于 2019-8-18 11:53:15

又试了个简单的,通过datetime模块生成目标格式日期,若符合条件输出,否则向前推一天直至匹配。
import datetime
enddate = datetime.date(2017,12,7)
while True:
    date = str(enddate).replace('-','')
    if len(set(date)) == 8:
      print(date)
      break
    else:
      enddate -= datetime.timedelta(1)

小贤啊哦 发表于 2020-5-12 18:15:28

{:10_266:}
页: 1 [2]
查看完整版本: Python:每日一题 130