Day8 stackの続き
class InfixToPostfix(object): """ InfixToPostfix つまり中置から後置 get the postfix of the given infix expression """ def __init__(self, expression=None, stack=None): """ :param expression: the infix expression to be converted to postfix :param stack: stack to perform infix to postfix operation """ self.expression = list(expression) self.my_stack = stack @staticmethod def _is_operand(char): """ utility function to find whether the given character is an operator """ # OLD VERSION # return ord(char) >= ord('a') and ord(char) <= ord('z') \ # or ord(char) >= ord('A') and ord(char) <= ord('Z') return True if ord(char) in [ord(c) for c in ascii_letters] else False @staticmethod def _precedence(char): """ utility function to find precedence of the specified character """ if char == '+' or char == '-': return 1 elif char == '*' or char == '/': return 2 elif char == '^': return 3 else: return -1 def infix_to_postfix(self): """ function to generate postfix expression from infix expression """ postfix = [] for i in range(len(self.expression)): if self._is_operand(self.expression[i]): postfix.append(self.expression[i]) elif self.expression[i] == '(': self.my_stack.push(self.expression[i]) elif self.expression[i] == ')': top_operator = self.my_stack.pop() while not self.my_stack.is_empty() and top_operator != '(': postfix.append(top_operator) top_operator = self.my_stack.pop() else: while not self.my_stack.is_empty() and self._precedence(self.expression[i]) <= self._precedence( self.my_stack.peek()): postfix.append(self.my_stack.pop()) self.my_stack.push(self.expression[i]) while not self.my_stack.is_empty(): postfix.append(self.my_stack.pop()) return ' '.join(postfix) @staticmethod def get_code(): """ returns the code of the current class """ return inspect.getsource(InfixToPostfix)
・return True if ord(char) in [ord(c) for c in ascii_letters] else False
この書き方を初めて知った。
・ord()............ord()とはPythonの組み込み関数。1文字のユニコード文字を表す文字列に対し、その文字のユニコードポイントを表す整数を返す。この反対がchr()らしい。
ユニコードポイントとは、世界中の文字にポイントが割り当てられていて、この割り振られている番号のこと。
今日も昨日と同じです。ありがとうございます!
pygorithm/stack.py at master · OmkarPathak/pygorithm · GitHub