파이썬)연결리스트를 이용한 스택 구현후 구현된 스택을 이용하여 후위표기법 표현
조회수 958회
안녕하세요 나름대로 열심히했는데 오류가 자꾸 뜹니다. 오류내용은 이렇습니다
TypeError: peek() takes 0 positional arguments but 1 was given
혹시 코딩 내용도 같이 올리는데 수정 부탁드릴수있을까요?
//여기에 코드를 입력하세요
class stack:
class Node:
def __init__(self,item,link):
self.item = item
self.next = link
def push(item):
global top
global size
top = Node(item,top)
size += 1
def peek():
if size != 0:
return top.item
def pop():
global top
global size
if size !=0:
top_item = top.item
top = top.next
size -=1
return top_item
def size(self): return self.size
def is_empty(self): return self.size ==0
class result:
class Node:
def __init__(self,item,link):
self.item = item
self.next = link
def push(item):
global top
global size
top = Node(item,top)
size += 1
def peek():
if size != 0:
return top.item
def pop():
global top
global size
if size !=0:
top_item = top.item
top = top.next
size -=1
return top_item
def size(self): return self.size
def is_empty(self): return self.size ==0
def isNumber(item):
try:
float(item)
except ValueError:
return False
def infix_to_postfix(input_expr): #전위표기법을 후위 표기법으로 바꾸는 함수를 선언해줬습니다.
precedence = {} #이 함수안에 연산자를 위한 리스트를 선언해줍니다
precedence['*'] = 3 #이제 연산자의 우선순위를 정합니다 곱하기는 3으로 선정해줍니다.
precedence['/'] = 3 #나누기 또한 곱하기와 같은 우선순위로 3 으로 선정해줍니다.
precedence['+'] = 2 # +기는 곱하기와 나누기 보다 한단계 낮은 2 로 선정해줍니다.
precedence['-'] = 2 #-는 +와 같은 우선순위인 2로 선정해줍니다.
precedence['('] = 1
r=result()
token_list =input_expr.split()
for token in token_list: #이제 for 문을 돌려 숫자와 연산자를 구분해 보겠습니다
if isNumber(token)==True: #위에서 만든 is Number 함수를 통해 token을 넣고 그값이 숫자이면 true를 보내줍니다.만약 token이 숫자이면
#그값은 is number 함수 안에서 실수형으로 표시됩니다
r.push(token) #실수 형으로 표시된 숫자 token 값을 result 값에 추가 시킵니다
elif token =='(': # 이제 (연산자를 만들어보겠습니다 만약 가로연산자가 처음에 (가 나오면
push(token) # 계속해서 token 안에 들어있는 모든 것들을 push 시킵니다
elif token == ')': # 그리고만약 token 값이 )이나오면
top=pop() #스택상에 맨 위에있는 부분을 pop시킵니다
while top != '(': # 이제 이 밑에 있는 부분은 종합적으로 (가 나오면 그 안에있는 모든 값들을 pop시킵니다 이 과정을 )나올떄까지 다 pop 시킵니다
r.push(top)
top=pop()
else:
while (s.size !=0) and (precedence[s.peek()]>=precedence[token]): # 이제 이 줄의 코딩내용은 아까 위에 선언했던 우선순위를 이용해 우선순위가 자기자신보다
r.push(s.pop()) #더 낮은 연산자는 다 끄집어 내고 자기 자신이 그 스택안으로 들어가는것을 구현하기 위함입니다.
push(token)
while len(stack) != 0:#이제 이 모든 과정을 다하고 마지막에 스택에 남아있는 모든 값들을 pop하기 위함입니다
result.push(s.pop()) #즉 stack의 길이가 0이될때까지 계속 pop하여 result 값에 그 값을 계속 append합니다
s =stack()
top= None
size = 0
print(infix_to_postfix('34.5 * 23.4 + 23 * ( 32 + 46 )'))# 마지막은 위에서 만든 함수를 통해 함수에 우리가원하고자하는 값을 넣고 그값을 화면에 출력해주는것 입니다.
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
댓글 입력