Python Forum
Square Root on calculator
Thread Rating:
  • 1 Vote(s) - 5 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Square Root on calculator
#1
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()
Reply
#2
(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.
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Finding square roots using long division. jahuja73 10 5,403 Feb-24-2021, 01:25 PM
Last Post: jahuja73
  Magic square! frequency 1 2,538 Dec-17-2018, 06:35 PM
Last Post: micseydel
  Square reverse sum(overloaded) shihomiyano 6 4,083 Aug-18-2018, 06:27 AM
Last Post: micseydel
  Perfect Square program forumer444 4 8,918 Sep-01-2017, 09:32 PM
Last Post: forumer444
  Magic Square Puzzle Harnick 1 4,871 Aug-09-2017, 04:51 PM
Last Post: nilamo
  List of square roots python py7 6 6,384 Apr-08-2017, 11:26 PM
Last Post: ichabod801
  Square root of a number mbestivert 1 4,046 Nov-24-2016, 04:35 PM
Last Post: casevh

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020