Python Challenge: level 3
The Python Challenge: level 3
아래 글의 해석: "하나의 소문자, 정확히 3개의 큰 보디가드에게 좌우가 둘러싸여져있다. "
사진을 참고해서 의역해보면 "하나의 소문자 좌우에 3개의 대문자로 둘러싸여져있다."란 말 같습니다.
이외에 별다른 내용이 없으므로 페이지 소스를 열어서 코드를 확인해 보겠습니다.
HTML 태그 아래를 보면 이렇게 긴 주석이 발견됩니다.
직접 하나하나 찾을 수도 있지만 주석의 길이가 이미지보다 훨씬 길고 파이썬 공부를 위해 하는 것이기 때문에 직접 코딩을 해보았는데 1번은 가지고 있는 지식을 토대로 한 것이고, 2번은 1번을 풀고 코딩을 간략화 하고 싶어서 정규표현식을 공부하여 코딩한 내용입니다.
file = ''' 주석 문장 '''
cnt = 0 # 하나의 소문자를 걸러내기 위한 카운팅 변수.
lar_cnt = 0 # 대문자 3개인지 확인하는 변수.
li = [] # 찾은 소문자를 모아두기 위한 리스트.
bool = False # 리스트에 참과 거짓에 따른 값 입력, 값 삭제를 위한 변수.
for i in file:
if 'A'<= i and i <='Z':
lar_cnt +=1
if lar_cnt >3:
cnt = 0
if cnt == 6:
li.pop()
bool = False
if lar_cnt <=3:
if cnt < 3:
cnt += 1
elif cnt<6 and bool:
cnt += 1
else :
cnt = 0
elif 'a'<= i and i<='z':
lar_cnt = 0
if cnt == 6:
cnt = 3
bool = False
if cnt == 3 and not(bool):
bool = True
li.append(i)
elif cnt>=3:
li.pop()
cnt = 0
bool = False
else :
cnt = 0
if bool:
li.pop()
print(li) # 출력결과.
import re
file = ''' 주석 문장 '''
result = re.findall('[a-z][A-Z]{3}[a-z][A-Z]{3}[a-z]',file)
result = re.findall('[A-Z][a-z][A-Z]',''.join(result))
result = re.findall('[a-z]',''.join(result))
print(''.join(result)) # 출력결과
출력결과인 linkedlist를 URL에 http://www.pythonchallenge.com/pc/def/linkedlist.html 이렇게 입력하시면
위와 같은 페이지로 이동할텐데
URL을 http://www.pythonchallenge.com/pc/def/linkedlist.php로 바꾸어 입력하시면 문제가 해결됩니다.