Задания в pythonchallenge.com: задание 3

Продолжаем решать задачки с http://www.pythonchallenge.com . Сегодня четвёртое задание, с которым я изрядно помучился. Выглядит оно вот так:

«один маленький символ, окружённый ИМЕННО тремя телохранителями по бокам».

Сначала я пытался искать что подобное: «XYZpRQT», но таких вхождений было множество. Оказалось, что должно быть что-то вроде этого: «kXYZpRQTf», т.е. один маленький символ в середине, по бокам три больших, а по бокам больших опять маленькие.

Вот моё решение без регулярных выражений (хотя тут они явно напрашиваются):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from urllib.request import urlopen
# скачиваем страницу
page = urlopen('http://www.pythonchallenge.com/pc/def/equality.html')
contents = page.read().decode()
# выделяем из html зашифрованный код
s = contents.split('<!--')[1].split('-->')[0]
 
word = ''
# берем в цикле символ и проверяем символы по бокам чтобы они соответствовали маске "sBBBsBBBs",
# где s - символ в нижнем регистре, B - в верхнем
for i in range(4, len(s) - 4):
    if s[i].islower():
        if s[i - 1].isupper() and s[i - 2].isupper() and s[i - 3].isupper() and s[i - 4].islower():
            if s[i + 1].isupper() and s[i + 2].isupper() and s[i + 3].isupper() and s[i + 4].islower():
                word = word + s[i]
print(word)
 
# решение с pythonchallenge.com
# с регулярными выражениями всё становится проще
import re
r = re.compile('[a-z][A-Z]{3}([a-z])[A-Z]{3}[a-z]')
print(''.join(re.findall(r, s)))
from urllib.request import urlopen
# скачиваем страницу
page = urlopen('http://www.pythonchallenge.com/pc/def/equality.html')
contents = page.read().decode()
# выделяем из html зашифрованный код
s = contents.split('<!--')[1].split('-->')[0]

word = ''
# берем в цикле символ и проверяем символы по бокам чтобы они соответствовали маске "sBBBsBBBs",
# где s - символ в нижнем регистре, B - в верхнем
for i in range(4, len(s) - 4):
	if s[i].islower():
		if s[i - 1].isupper() and s[i - 2].isupper() and s[i - 3].isupper() and s[i - 4].islower():
			if s[i + 1].isupper() and s[i + 2].isupper() and s[i + 3].isupper() and s[i + 4].islower():
				word = word + s[i]
print(word)

# решение с pythonchallenge.com
# с регулярными выражениями всё становится проще
import re
r = re.compile('[a-z][A-Z]{3}([a-z])[A-Z]{3}[a-z]')
print(''.join(re.findall(r, s)))

Вывод: учите и используйте регулярные выражения чтобы не пришлось изобретать велосипед!

Bookmark the permalink.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *