Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

Python 3 tkinter GUI. The Code that I made below is Infix to Postfix conversion with numbers/digit Infix input. Can any experts help me, because

image text in transcribed Python 3 tkinter GUI. The Code that I made below is Infix to Postfix conversion with numbers/digit Infix input. Can any experts help me, because my code still buggy: 1. Can add precedence of power '^'. 2. Able to use with parenthesis '( )'. 3. Able to evaluate the postfix correctly. 4. Correct infix to postfix conversion. *Picture attached, where the evaluate is not correct 

from tkinter import *

class Main(object): def __init__(self, project): self.project = project self.equationInput = StringVar() self.getInput = [] self.arrayUp = [] self.arrayVar = [] self.temp = 0 self.temp1 = 0 self.r = 0 self.evaluate = []

Label(project, text = "Infix: ").grid(row = 1, column = 1) Input = Entry(project, textvariable=self.equationInput) Input.grid(row = 1, column = 2) Submit = Button(project, text = "Submit" ,command = self.stack) Submit.grid(row = 2, column = 2) #Label(project, text = "Output: ").grid(row = 3, column = 1) #Output = Entry(project) #Output.grid(row = 3, column = 2) #Output.insert(0, self.arrayUp)

def stack(self): self.getInput = list(self.equationInput.get()) #print(self.getInput) x = len(self.getInput) self.r = 9 Label(self.project, bg = 'yellow', text="Input", width = 15).grid(row =8, column=1) Label(self.project, bg = 'yellow', text="Stack", width = 15).grid(row=8, column=2) Label(self.project, bg = 'yellow', text="Output", width = 15).grid(row=8, column=3) for i in range(0, x): self.temp = self.getInput[i] if (self.getInput[i] == "*" or self.getInput[i] == "/" or self.getInput[i] == "-" or self.getInput[i] == "+" or self.getInput[i] == "(" or self.getInput[i] == ")"): #print(self.temp) y = len(self.arrayUp) if (self.temp == "(" or self.temp == "*" or self.temp == "/" or self.temp == "-" or self.temp == "+"): if (self.temp == "+"): if (y != 0): for i in range(y-1, -1, -1): if (self.arrayUp[i] == "(" or self.arrayUp[i] == "/" or self.arrayUp[i] == "*" or self.arrayUp[i] == "-" or self.arrayUp[i] == "+"): if(self.arrayUp[i] == "("): self.arrayUp.append(self.temp) break elif (i == 0): self.arrayUp.append(self.temp) self.arrayVar.append(self.arrayUp[i]) self.arrayUp.remove(self.arrayUp[i]) else: self.arrayUp.append(self.temp) break else: self.arrayUp.append(self.temp) elif (self.temp == "-"): if (y != 0): for i in range(y-1, -1, -1): if (self.arrayUp[i] == "(" or self.arrayUp[i] == "^" or self.arrayUp[i] == "/" or self.arrayUp[i] == "*" or self.arrayUp[i] == "+" or self.arrayUp[i] == "-"):

if (self.arrayUp[i] == "("): self.arrayUp.append(self.temp) break elif (i == 0): self.arrayUp.append(self.temp) self.arrayVar.append(self.arrayUp[i]) self.arrayUp.remove(self.arrayUp[i]) else: self.arrayUp.append(self.temp) break else: self.arrayUp.append(self.temp) elif (self.temp == "*"): if (y != 0): for i in range(y-1, -1, -1): if (self.arrayUp[i] == "/"or self.arrayUp[i] == "*" or self.arrayUp[i] == "("): if (self.arrayUp[i] == "("): self.arrayUp.append(self.temp) break elif (i == 0): self.arrayUp.append(self.temp)

self.arrayVar.append(self.arrayUp[i]) self.arrayUp.remove(self.arrayUp[i]) else: self.arrayUp.append(self.temp) break else: self.arrayUp.append(self.temp) elif (self.temp == "/"): if (y != 0): for i in range(y-1, -1, -1): if (self.arrayUp[i] == "*" or self.arrayUp[i] == "/" or self.arrayUp[i] == "("): if (self.arrayUp[i] == "("): self.arrayUp.append(self.temp) break elif (i == 0): self.arrayUp.append(self.temp)

self.arrayVar.append(self.arrayUp[i]) self.arrayUp.remove(self.arrayUp[i]) else: self.arrayUp.append(self.temp) break else: self.arrayUp.append(self.temp) else: self.arrayUp.append(self.temp) elif (self.temp == ")"): for i in range(y-1, -1, -1): if (self.arrayUp[i] == "("): self.arrayUp.remove(self.arrayUp[i]) break else: self.arrayVar.append(self.arrayUp[i]) self.arrayUp.remove(self.arrayUp[i])

#print(self.arrayUp) else: #self.temp = self.getInput[i] self.arrayVar.append(self.temp) #print(self.arrayVar)

if (self.arrayUp == []): Label(self.project, relief = RIDGE, text="-", width = 15).grid(row =self.r, column = 2) elif(self.arrayUp !=[]): labelInput = Label(self.project, relief = RIDGE, text=self.arrayUp, width = 15) labelInput.grid(row=self.r, column=2)

labelTemp = Label(self.project, relief = RIDGE, text=self.temp, width = 15) labelList = Label(self.project, relief = RIDGE, text=self.arrayVar, width = 15) labelTemp.grid(row= self.r, column = 1) labelList.grid(row =self.r, column = 3) print(self.temp) print(self.arrayUp) print(self.arrayVar) self.r = self.r+1

k = len(self.arrayUp) for j in range (k-1, -1, -1): self.arrayVar.append(self.arrayUp[j])

Label(self.project, text="Postfix: ").grid(row= 4, column = 1) Label(self.project, text=self.arrayVar, bg="green").grid(row=4, column = 2) Button(self.project, text = "Reset", command = self.reset).grid(row = 5, column = 2) Button(self.project, text="Evaluate", command=self.evaluation).grid(row=6, column=2)

#print(self.arrayUp) #print(self.arrayVar) def reset(self): self.arrayUp = [] self.arrayVar = [] self.getInput = []

for i in range(4, self.r): list = self.project.grid_slaves(row=i) for l in list: l.destroy()

def evaluation(self): y = len(self.arrayVar) for i in range (0, y): self.temp1 = self.arrayVar[i] if(self.temp1 == "+" or self.temp1 == "-" or self.temp1 == "*" or self.temp1 == "/"): x = len(self.evaluate) for j in range (x-1,x-3,-1): if (j == x-1): a = self.evaluate[x-1] elif(j == x-2): b = self.evaluate[x-2] self.evaluate.pop(x-1) self.evaluate.pop(x-2)

#print(b+1)

if (self.temp1 == "+"): k= int(a) + int(b) self.evaluate.append(k)

elif (self.temp1 == "-"): k = int(a) - int(b) self.evaluate.append(k)

elif (self.temp1 == "*"): k = int(a) * int(b) self.evaluate.append(k)

elif (self.temp1 == "/"): k = int(a) / int(b) self.evaluate.append(k)

#print(k)

#print(self.evaluate)

else: self.evaluate.append(self.temp1) #print(self.evaluate)

Label(self.project, text="Answer : ").grid(row=7, column=1) Label(self.project, text=self.evaluate, bg = "green").grid(row=7,column=2)

project = Tk() project.title("Stack Converter") #project.minsize(width=500,height=300) start = Main(project) project.mainloop()

Stack Converter 5%-(3-7)/ Submit 56* 37-9/+ Reset Evaluate 32 Stack Postfix Answer: Input Output 5 6 56* 56* 56 3 56 3 56 37 56 37 56 37 56 37-9 Stack Converter 5%-(3-7)/ Submit 56* 37-9/+ Reset Evaluate 32 Stack Postfix Answer: Input Output 5 6 56* 56* 56 3 56 3 56 37 56 37 56 37 56 37-9

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Database Design Using Entity Relationship Diagrams

Authors: Sikha Saha Bagui, Richard Walsh Earp

3rd Edition

103201718X, 978-1032017181

Students also viewed these Databases questions

Question

What is meant by pre-money valuation? What is post-money valuation?

Answered: 1 week ago

Question

administer a survey to an appropriate sample of respondents;

Answered: 1 week ago

Question

withholding allowance is $70

Answered: 1 week ago

Question

LO1 Identify why performance management is necessary.

Answered: 1 week ago