반응형
1. RPN (Reverse Polish Notation, 역 폴란드 표기법)
개요
RPN은 수식 표기법의 일종으로, 연산자를 피연산자 뒤에 위치시키는 표기법입니다. 일반적인 수식(중위 표기법)과 달리, 괄호 없이도 수식을 명확히 표현할 수 있어 계산기가 연산을 수행할 때 유용합니다.
예시
중위 표기법: 3 + 4 * 2 / ( 1 - 5 ) ^ 2 ^ 3
RPN 표기법: 3 4 2 * 1 5 - 2 3 ^ ^ / +
RPN에서 계산은 스택을 사용해 이루어집니다. 연산자를 만나면 스택에서 필요한 수만큼의 피연산자를 꺼내 계산하고, 결과를 다시 스택에 넣습니다.
RPN 계산기 구현 예제
def rpn_calculator(expression):
stack = []
for token in expression.split():
if token.isdigit():
stack.append(int(token))
else:
operand2 = stack.pop()
operand1 = stack.pop()
if token == '+':
stack.append(operand1 + operand2)
elif token == '-':
stack.append(operand1 - operand2)
elif token == '*':
stack.append(operand1 * operand2)
elif token == '/':
stack.append(operand1 / operand2)
elif token == '^':
stack.append(operand1 ** operand2)
return stack[0]
expression = "3 4 2 * 1 5 - 2 3 ^ ^ / +"
result = rpn_calculator(expression)
print(result) # Output: 3.0001220703125
이 함수는 스택을 사용해 RPN 수식을 계산하는 간단한 예제입니다.
2. re.Scanner
개요
re.Scanner
는 Python의 re
모듈에서 제공하는 클래스 중 하나로, 텍스트를 토큰화(tokenize)하는 데 유용합니다. re.Scanner
를 사용하면 여러 개의 정규 표현식을 이용해 텍스트를 다양한 패턴으로 분할할 수 있습니다.
사용법
re.Scanner
는 각 패턴에 대해 매칭되는 함수를 지정하고, 입력된 문자열을 해당 패턴으로 스캔하며 매칭되는 함수를 호출하여 토큰을 생성합니다.
예제
import re
def tokenize_integer(scanner, token):
return 'INTEGER', int(token)
def tokenize_word(scanner, token):
return 'WORD', token
def tokenize_space(scanner, token):
return 'SPACE', None
scanner = re.Scanner([
(r"\d+", tokenize_integer),
(r"[a-zA-Z_]\w*", tokenize_word),
(r"\s+", tokenize_space),
])
tokens, remainder = scanner.scan("42 apples and 100 oranges")
print(tokens)
print(remainder)
출력:
[('INTEGER', 42), ('WORD', 'apples'), ('WORD', 'and'), ('INTEGER', 100), ('WORD', 'oranges')]
''
이 예제에서는 숫자(\d+
), 단어(\w+
), 공백(\s+
)을 각각 다른 방식으로 토큰화합니다. scanner.scan()
함수는 매칭된 토큰들의 리스트와 남은 문자열을 반환합니다.
re.Scanner
는 입력 문자열을 세밀하게 분석하고 각 패턴에 따라 처리할 수 있는 유연한 방법을 제공합니다.
반응형
'언어 > Python' 카테고리의 다른 글
[ Python ] 파일 읽고 쓰기 함수 설명과 예제 (0) | 2024.08.07 |
---|---|
[ Python ] with로 파일 자원 관리 하면서 파일 읽기 (0) | 2024.08.07 |
[ Python ] re.split() 사용하기 (0) | 2024.08.02 |
[ Python ] 정규식에서 패턴 매칭 후 인덱스로 결과에 접근하기 (0) | 2024.08.01 |
[ Python ] 정규표현식에서 부정적 전방 탐색 사용하기 (0) | 2024.07.27 |