728x90
반응형
안녕하세요. 오늘은 코딩하시다가 디버깅을 요청하신 부분 수정을 해달라는 요청을 받았습니다. 코드 내용은 다음과 같습니다.
def precedence(op):
if op=='(' or op==')':return 0
if op=='+' or op=='-':return 1
if op=='*' or op=='/':return 2
else: return -1
def Infix2Postfix(expr):
s=Stack()
output=[]
for term in expr :
if term in '(' :
s,push('(')
elif term in ')':
while not s.isEmpty() :
op=s,pop()
if op=='(':break;
else:
output.append(op)
elif term in "+-*/":
while not s.isEmpty():
op=s,peek()
if(precedence(term)<=precedence(op)):
output.append(op)
s.pop()
else:break
s.push(term)
else:
output.append(term)
while not s.inEmpty():
output.append(s.pop())
return output
infix1=['8','/','2'.'-'.'3','+'.'(','3','*','2',')']
infix2=['1','/','2'.'*'.'4','*'.'(','1','/','4',')']
postfix1=Infix2Postfix(infix1)
postfix2=Infix2Postfix(infix2)
result1=evalPostfix(postfix1)
result2=evalPostfix(postfix2)
print('중위표기:',infix1)
print('후위표기:',postfix1)
print('계산결과:',result1,end='\n\n')
print('중위표기:',infix2)
print('중위표기:',postfix2)
print('계산결과:',result2)
하나씩 진단을 해보겠습니다.
우선 if문에 있는 in이라는 내용은 '=='로 변경하였습니다.
IsEmpty()라는 함수는 없어서, 제가 추가를 했구요.
기타 오타들은 제가 수정을 했고,
evalPostfix라는 함수는 없어서 그부분 결과내용은 제외 하였습니다.
그래서 코드 수정을 해보면,
class Stack(list):
push = list.append # push
pop = list.pop # pop
def is_empty(self):
if not self:
return True
else:
return False
def precedence(op):
if op=='(' or op==')':return 0
if op=='+' or op=='-':return 1
if op=='*' or op=='/':return 2
else: return -1
def Infix2Postfix(expr):
s=Stack()
output=[]
for term in expr :
if term == '(' :
s.push('(')
elif term == ')' :
while not s.is_empty() :
op=s.pop()
if op=='(':break;
else:
output.append(op)
elif term == "+-*/":
while not s.is_empty():
op=s.peek()
if(precedence(term)<=precedence(op)):
output.append(op)
s.pop()
else:break
s.push(term)
else:
output.append(term)
while not s.is_empty():
output.append(s.pop())
return output
infix1=['8','/','2','-','3','+','(','3','*','2',')']
infix2=['1','/','2','*','4','*','(','1','/','4',')']
postfix1=Infix2Postfix(infix1)
postfix2=Infix2Postfix(infix2)
#result1=evalPostfix(postfix1)
#result2=evalPostfix(postfix2)
print('중위표기:',infix1)
print('후위표기:',postfix1)
#print('계산결과:',result1,end='\n\n')
print('중위표기:',infix2)
print('중위표기:',postfix2)
#print('계산결과:',result2)
입니다.
결과는 다음과 같이 나왔습니다.
오늘은 코드 디버깅에 대해 알아보았습니다. 파이썬 화이팅입니다.~^^
728x90
반응형
'프로그래밍 > 독학(어려워요 같이해요)' 카테고리의 다른 글
입력데이터가 10 , 20 , 30 일때 출력이 텍스트로 '감자'로 나오도록 학습시키고 싶습니다. (12) | 2020.05.06 |
---|---|
5개 이하의 점수를 입력받아 파이 그래프 만들기에 대해 알아보도록 하겠습니다. (0) | 2020.05.06 |
c언어 if문에 문자열 사용해서 출력이 안되는데 도와주세요. (0) | 2020.05.02 |
IQ가 148이상이면, 멘사(Mensa)에 가입할 수 있다. IQ를 입력하여 멘사 가입여부를 판단하는 프로그램을 작성해보자. (0) | 2020.05.02 |
10을 넘었을때 총합계를 구하기 어렵습니다. 이거 코딩 어떻게하죠?도와주실 수 있나요? (0) | 2020.04.28 |
댓글