-
회문 판별
회문은 앞으로 읽으나, 뒤집어서 읽으나 모두 똑같은 단어가 되는 문장 이고 대표적인 회문으로는 level 이 있습니다. 앞으로 읽어도 level, 뒤집어서 읽어도 level이 됩니다.
for문을 이용해 아래와 같이 회문을 판별할 수 있는데, 아래 코드를 간단히 한줄로 말하자면 문자열의 앞뒤를 하나씩 비교하고 같다면 참, 다르면 거짓으로 판별하는 방식 입니다. 회문이라면 if 조건문에 만족하지 않아 True가 유지될것이고 회문이 아니라면 if 조건문에 만족하여 False로 변경 될겁니다.
x = input('회문 판별할 단어 입력: ')
Discrimination = True # 회문이 아닐 경우 False를 확인하기 위해 초기값 True 설정
a = -1 # 아래 if문에서 x의 우측부터(-1) 확인하기 위한 설정
for i in range(len(x) // 2): # 회문은 앞뒤가 같으므로 문자열 길이의 반만 반복
if x[i] != x[a]: # x의 왼쪽 첫번째 문자와 오른쪽 첫번째 문자 비교, 다를 경우 회문이 아니므로 if 조건문 진입
Discrimination = False # 회문이 아니므로 True에서 False로 변경
break # 중지
a -= 1 # if 조건문을 거치지 않고 문자가 서로 같았다면 그 다음 문자를 비교하기 위해 a의 -1이 더 올라가도록 설정
이 외에도 슬라이스를 활용하거나 리스트와 reversed를 활용 또는 join 메서드와 reversed를 사용하여 원래의 문자열과 완전히 뒤집어버린 문자열을 비교하는 방법도 있습니다.
-
N-gram
N-gram은 문자열에서 N개의 연속된 요소를 추출하는 방법 입니다. 예를들어 syntax 라는 단어가 있을 때 2-gram을 사용하면 sy / yn / nt / ta / ax 가 출력되고, 3-gram을 사용하면 syn / ynt / nta / tax 가 출력 됩니다. 즉, 문자열을 특정 개수만큼 나눠서 출력시켜주는 방법 입니다.
이러한 방법은 검색 엔진에서 자주 사용 되는데 program, programming, programer 에서 program만 추출하여 단어의 사용 빈도를 세거나 할때에 사용할 수 있습니다.
마찬가지로 for문을 이용할 수도 있고 zip을 사용해서도 구현할 수 있습니다. 아래 코드는 zip을 사용하여 2-gram 구현 방법 입니다. (zip의 대략적인 개념은 https://nirsa.tistory.com/43를 참고해주세요.)
# 2-gram
text='syntax'
two_gram = zip(text, text[1:])
for i in two_gram:
print(i[0], i[1], sep='')
# 3-gram
text='syntax'
three_gram = zip(text, text[1:], text[2:])
for i in three_gram:
print(i[0], i[1], i[2], sep='')
'Programming > Python' 카테고리의 다른 글
[Python 3.7] 파이썬 클래스(class)란? (클래스 생성/호출, 인스턴스.메소드 호출, 속성, 인스턴스 속성 vs 클래스 속성, 클래스 비공개 속성) (3) | 2020.02.06 |
---|---|
[Python 3.7] 파이썬 함수란? (함수 생성, 호출, 고정인수, 가변인수, 키워드 인수, 딕셔너리 언패킹, 재귀호출) (1) | 2020.02.06 |
[Python 3.7] 파이썬 파일 사용법 (쓰기/읽기, 자동으로 파일 객체 닫기, 파일 내용 불러오기, 파이썬 객체 파일에 쓰기/읽기) (0) | 2020.02.03 |
[Python 3.7] 파이썬 딕셔너리 사용법 (0) | 2020.02.03 |
[Python 3.7] 파이썬 문자열 서식 지정자, 포매팅 사용법 (1) | 2020.02.03 |