일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 파이썬 첼린지
- 러스트 예제
- 운영체제
- Operating System
- 데이터베이스
- 알고리즘
- 파이썬 알고리즘
- 러스트
- 우분투
- java
- Reversing
- data communication
- 파이썬
- 오라클DB
- 자바
- 데이터 통신
- 오라클
- ubuntu
- Rust
- 파이썬 챌린지
- Python
- 자바 기초
- C
- 백준
- OS
- 자바 개념
- 백준 러스트
- Python challenge
- 러스트 프로그래밍 공식 가이드
- Database
- Today
- Total
IT’s Portfolio
[Python Challenge] Level 2 풀이 본문
Python Challenge Level 2 풀이이다.
먼저 문제를 보자.
HINT
"recognize the characters. maybe they are in the book, but MAYBE they are in the page source."
=>
"등장인물들을 알아본다. 아마도 책에 있을 것 같은데, 페이지 소스에도 있을 수 있다."
페이지 소스를 봐보자.
페이지 소스 밑에 주석처리된 부분이 보인다.
find rare characters in the mess below : 아래 엉망진창인 글에서 희귀한 글자를 발견해라.
페이지 소스를 txt 파일로 긁어와 저 엉망진창인 글만 남기고 저장한다.
문자열을 거르는 방법은 2가지가 있다.
- 입력값 검증
- 정규표현식
* isalpha() 함수: 문자열이 영어 혹은 한글로 되어있으면 참 리턴, 아니면 거짓 리턴.
* isalnum() 함수: 문자열이 영어 혹은 숫자로 되어있으면 참 리턴, 아니면 거짓 리턴.
입력값 검증 스크립트를 먼저 짜보자.
text = open('ocr.txt', 'r')
data = text.read()
check = ""
for i in data:
if i.isalpha():
check = check+i
print(check)
open 함수로 ocr.txt를 열고 data에 text를 읽은 값을 저장한다.
for문으로 문자열을 반복해서 체크한다.
isalpha() 함수로 영어나 한글인 문자열을 찾고 리턴값이 참이라면 check에 i를 추가한다.
정규표현식 스크립트도 짜보자.
import re
text = open('ocr.txt', 'r')
data = text.read()
check = re.findall("[A-Za-z]", data)
check1 = ""
for i in range(0, len(check)):
check1 += check[i]
print(check1)
정규표현식을 사용하기 위해서 re 모듈을 사용했다.
data에서 정규표현식 [A-Za-z] (A부터 Z, a부터 z)를 만족하는 값을 찾는다.
List값인 check를 for문으로 str 문자열로 만든다.
둘 다 똑같은 결과로 equality가 뜬다.
URL 정답값: equality
최신화
2020.10.20
'''
recognize the characters. maybe they are in the book,
but MAYBE they are in the page source.
'''
import re
from get_html_source import get_html
A = get_html('http://www.pythonchallenge.com/pc/def/ocr.html')
html = A.get_req().replace('\n', '')
m = re.findall('<!--(.+?)-->', html)
if m:
with open('source.txt', 'wt') as f:
f.write(m[1])
'''
m[0] = find rare characters in the mess below:
'''
with open('source.txt', 'rt') as f:
below = f.read()
characters = ''.join(re.findall('[a-zA-Z]', below))
print(characters)
- 웹 페이지 내용 파싱 및 파일 입출력 추가
- for이 아닌 join 사용
Level 3으로 갈 수 있는 URL = http://www.pythonchallenge.com/pc/def/equality.html
'Security Study > Wargame Explanation' 카테고리의 다른 글
[Python Challenge] Level 4 풀이 (0) | 2019.11.24 |
---|---|
[Python Challenge] Level 3 풀이 (0) | 2019.11.22 |
[Python Challenge] Level 1 풀이 (4) | 2019.11.19 |
[Python Challenge] Level 0 풀이(Warming UP) (0) | 2019.11.19 |
[CodeEngn] Basic RCE Level 5 (0) | 2019.10.25 |