Прикреплённый файл «re_year.py»
Загрузка 1 #!/usr/bin/env python
2 # coding: utf
3 '''
4 Является ли данная строчка датой в формате dd/mm/yyyy. Начиная с 1600 года до 9999 года
5 '''
6
7 # Високосный год:
8 # Иными словами, год является високосным, если он кратен 4 и при этом не кратен 100, либо кратен 400. Год не является високосным, если он не кратен 4, либо кратен 100 и не кратен 400.
9 # Последние годы столетий, оканчивающиеся на два нуля, в трёх случаях из четырёх не являются високосными. Так, годы 100, 200, 300, 500, 600, 700, 900, 1000, 1100, 1300, 1400, 1500 (до введения григорианского календаря), 1700, 1800 и 1900 не являются високосными, так как они кратны 100 и не кратны 400. Годы 400, 800, 1200 (до введения григорианского календаря), 1600 и 2000 — високосные
10
11 import re, sys
12
13 sreLeap=r"(?:{Div4}00|\d\d(?!00){Div4})".format( # Високосный год
14 Div4=r"(?:[02468][048]|[13579][26])") # Делится на 4
15 if len(sys.argv)<2: print "sreLeap:\t",sreLeap
16
17 # Месяц, допустимые числа
18 MDays=((r"01|03|05|08|10|12", r"[012]\d|3[01]"), # 31 день
19 (r"04|06|07|09|11", r"[012]\d|30"), # 30 дней
20 (r"(?<={Leap}/)02".format(Leap=sreLeap), r"[012]\d"), # 29 дней
21 (r"(?<!{Leap}/)02".format(Leap=sreLeap), r"[01]\d|2[0-8]"), # 28 дней
22 )
23
24 sreDay="|".join(("(?:(?:{0})/(?:{1}))".format(m,d) for m,d in MDays))
25 if len(sys.argv)<2: print "preDay:\t",sreDay
26
27 sreData=r"\d\d\d\d/(?:{Day})$".format(Day=sreDay)
28 if len(sys.argv)<2: print "sreData:\t",sreData # Отладка
29
30 reData=re.compile(sreData)
31 if len(sys.argv)<2: # генератор тестов
32 import random
33 for i in xrange(10):
34 d="{0}/{1:02}/{2:02}".format( random.randint(1000,10000),
35 random.randint(0,13),
36 random.randint(0,33))
37 print d, reData.match(d) and "Yes" or "No"
38 d="1900/02/29"; print d, reData.match(d) and "Yes" or "No"
39 d="1904/02/29"; print d, reData.match(d) and "Yes" or "No"
40 d="1931/02/29"; print d, reData.match(d) and "Yes" or "No"
41 d="1931/04/31"; print d, reData.match(d) and "Yes" or "No"
42 else:
43 for y in sys.argv[1:]:
44 print y, reData.match(y) and "Yes" or "No"
Прикреплённые файлы
Для ссылки на прикреплённый файл в тексте страницы напишите attachment:имяфайла, как показано ниже в списке файлов. Не используйте URL из ссылки «[получить]», так как он чисто внутренний и может измениться.- [получить | показать] (2012-02-28 20:46:38, 1.0 KB) [[attachment:ray_calc.py]]
- [получить | показать] (2012-02-29 14:38:26, 3.3 KB) [[attachment:re_calc.py]]
- [получить | показать] (2012-02-29 14:38:43, 1.9 KB) [[attachment:re_dumbcode.py]]
- [получить | показать] (2012-02-29 14:37:35, 2.6 KB) [[attachment:re_year.py]]
Вам нельзя прикреплять файлы к этой странице.