Python Forum
Square Root on calculator - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: Homework (https://python-forum.io/forum-9.html)
+--- Thread: Square Root on calculator (/thread-3606.html)



Square Root on calculator - MP1234593 - Jun-06-2017

Hi,
I need to create a calculator for my college course. Everything works apart from the square root function. I am a total beginner other than a few hours on codecademy. Every time I try it out, I get this error: name 'sqrt9' is not defined.
(I have been testing it using the square root of 9. Replacing 9 with any other number brings up a corresponding error)
Apologies if this isn't informative enough, but any help would be much appreciated.

from tkinter import *
from math import *

#Function enables button clicks
def btnClick(numbers):
   global operator
   operator=operator+str(numbers)
   text_input.set(operator)

#Function enables 'C' button to clear display
def btnClearDisplay():
   global operator
   operator=""
   text_input.set("")

#Function enables completion of calculations
def btnEqualsInput():
   global operator
   sumof=str(eval(operator))
   text_input.set(sumof)
   operator=""

#Function enables square root calculations
def btnSquareRoot():
   global operator
   sqrt=math.sqrt()
   text_input.set("")
   operator=""


cal = Tk()
cal.title("Calculator")
operator=""
text_input=StringVar()

#Decides size, colour, etc. of display and font
txtdisplay=Entry(cal,font=('arial',20,'bold'),textvariable=text_input,bd=30,
                insertwidth=4,bg="powder blue",justify='right').grid(columnspan=3)

#Clear Button
btnClear=Button(cal,padx=10,bd=8,fg="black",font=('arial',20,'bold'),
               text="C",bg="Honeydew3",command=btnClearDisplay).grid(row=0,column=3)

#Top line
btnPi=Button(cal,padx=13,bd=8,fg="black",font=('arial',20,'bold'), #Pi button was too big when padx=16
               text="π",bg="Honeydew3",command=lambda:btnClick("3.1415")).grid(row=1,column=0), #Lambda command produces requested symbol/number in display when corresponding button is clicked

btnSquareRoot=Button(cal,padx=16,bd=8,fg="black",font=('arial',20,'bold'),
               text="√",bg="Honeydew3",command=lambda:btnClick("sqrt")) .grid(row=1,column=1)

btnPercentage=Button(cal,padx=16,bd=8,fg="black",font=('arial',20,'bold'),
               text="%",bg="Honeydew3",command=lambda:btnClick("/100*")).grid(row=1,column=2)

btnDivision=Button(cal,padx=16,bd=8,fg="black",font=('arial',20,'bold'),
               text="/",bg="Honeydew3",command=lambda:btnClick("/")).grid(row=1,column=3)

#2nd line
btn7=Button(cal,padx=16,bd=8,fg="black",font=('arial',20,'bold'),
           text="7",command=lambda:btnClick(7)).grid(row=2,column=0)

btn8=Button(cal,padx=16,bd=8,fg="black",font=('arial',20,'bold'),
           text="8",command=lambda:btnClick(8)).grid(row=2,column=1)

btn9=Button(cal,padx=16,bd=8,fg="black",font=('arial',20,'bold'),
           text="9",command=lambda:btnClick(9)).grid(row=2,column=2)

btnMultiplication=Button(cal,padx=16,bd=8,fg="black",font=('arial',20,'bold'),
               text="*",bg="Honeydew3",command=lambda:btnClick("*")).grid(row=2,column=3)

#3rd line
btn4=Button(cal,padx=16,bd=8,fg="black",font=('arial',20,'bold'),
           text="4",command=lambda:btnClick(4)).grid(row=3,column=0)

btn5=Button(cal,padx=16,bd=8,fg="black",font=('arial',20,'bold'),
           text="5",command=lambda:btnClick(5)).grid(row=3,column=1)

btn6=Button(cal,padx=16,bd=8,fg="black",font=('arial',20,'bold'),
           text="6",command=lambda:btnClick(6)).grid(row=3,column=2)

btnSubtraction=Button(cal,padx=16,bd=8,fg="black",font=('arial',20,'bold'),
               text="-",bg="Honeydew3",command=lambda:btnClick("-")).grid(row=3,column=3)

#4th line
btn1=Button(cal,padx=16,bd=8,fg="black",font=('arial',20,'bold'),
           text="1",command=lambda:btnClick(1)).grid(row=4,column=0)

btn2=Button(cal,padx=16,bd=8,fg="black",font=('arial',20,'bold'),
           text="2",command=lambda:btnClick(2)).grid(row=4,column=1)

btn3=Button(cal,padx=16,bd=8,fg="black",font=('arial',20,'bold'),
           text="3",command=lambda:btnClick(3)).grid(row=4,column=2)

btnAddition=Button(cal,padx=16,bd=8,fg="black",font=('arial',20,'bold'),
               text="+",bg="Honeydew3",command=lambda:btnClick("+")).grid(row=4,column=3)

#Bottom line
btnDot=Button(cal,padx=16,bd=8,fg="black",font=('arial',20,'bold'),
               text=".",bg="Honeydew3",command=lambda:btnClick(".")).grid(row=5,column=0)

btn0=Button(cal,padx=16,bd=8,fg="black",font=('arial',20,'bold'),
           text="0",command=lambda:btnClick(0)).grid(row=5,column=1)

#btnPlusMinus=Button(cal,padx=16,bd=8,fg="black",font=('arial',20,'bold'),
#                text="+/-",bg="Honeydew3").grid(row=5,column=2)
btnBrackets=Button(cal,padx=16,bd=8,fg="black",font=('arial',20,'bold'),
               text="()",bg="Honeydew3").grid(row=5,column=2)

btnEquals=Button(cal,padx=16, bd=8,fg="black",font=('arial',20,'bold'),
               text="=",bg="tomato",command=btnEqualsInput).grid(row=5,column=3)


#Causes calculator to stay open
cal.mainloop()



RE: Square Root on calculator - nilamo - Jun-06-2017

(Jun-06-2017, 06:43 PM)MP1234593 Wrote: name 'sqrt9' is not defined.

Are you surprised? sqrt9 isn't defined anywhere. Functions are called with parenthases, so it'd need to be "sqrt(9)".

I'm not a fan of all the evil() (...I mean eval) you're doing. A "better" way to do things would be to either map the actual operator to button clicks, and maintain a list of button presses that you then can simply process as a fifo list of values and operators, which would also let you show a "history" of button presses, with subtotals along the way, along with undo-redo.