当我在运行程序时立即使用平方根函数时,它工作得很好。问题是,例如,如果我加8+8,那么在输出(16)上使用平方根函数。然后我得到了错误
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\bigfe\Anaconda3\lib\tkinter\__init__.py", line 1705, in __call__
return self.func(*args)
File "C:/Users/bigfe/.spyder-py3/APython/net/Calc.py", line 124, in squareroot
textbox.insert(0, math.sqrt(f_num))
AttributeError: 'str' object has no attribute 'sqrt'
我尝试了一切,甚至确认加法函数的输出是一个浮点,但它仍然给我错误
这是我的密码
textbox = Entry(calc, font = ('arial',20, 'bold'), bd = 30, width = 27, bg = 'gray', justify=RIGHT)
textbox.grid(row = 0, column = 0, columnspan = 4, pady=1 )
#This is what is shown in the entry box
textbox.insert(0, 0)
def numEnter(num):
if(textbox.get() == '0'):
textbox.delete(0, END)
current = textbox.get()
textbox.delete(0, END)
ak = textbox.insert(0, str(current) + str(num))
def clear():
textbox.delete(0, END)
textbox.insert(0, 0)
def allClear():
textbox.delete(0, END)
textbox.insert(0, 0)
current = 0
def add():
firstnum = textbox.get()
global f_num
global math
f_num = float(firstnum)
math = 'addition'
textbox.delete(0, END)
def subtract():
firstnum = textbox.get()
global f_num
global math
f_num = float(firstnum)
math = 'subtraction'
textbox.delete(0, END)
def multiply():
firstnum = textbox.get()
global f_num
global math
f_num = float(firstnum)
math = 'multiplication'
textbox.delete(0, END)
def divide():
firstnum = textbox.get()
global f_num
global math
f_num = float(firstnum)
math = 'division'
textbox.delete(0, END)
def squareroot():
firstnum = textbox.get()
global f_num
global math
f_num = float(firstnum)
textbox.delete(0, END)
textbox.insert(0, math.sqrt(f_num))
def pi():
if(textbox.get() == 0):
textbox.delete(0, END)
textbox.insert(0, float(math.pi))
global frst
frst = textbox.get()
def equal():
if (math == 'addition'):
second_num = textbox.get()
textbox.delete(0, END)
global ans
ans = (f_num + float(second_num))
print(type(ans))
textbox.insert(0, ans)
elif (math == 'subtraction'):
second_num = textbox.get()
textbox.delete(0, END)
textbox.insert(0, f_num - float(second_num))
elif (math == 'multiplication'):
second_num = textbox.get()
textbox.delete(0, END)
textbox.insert(0, f_num * float(second_num))
elif (math == 'division'):
second_num = textbox.get()
textbox.delete(0, END)
textbox.insert(0, f_num / float(second_num))
我省略了构造计算器的代码,因为我认为这是不必要的。如果你想看到任何其他部分的代码,请让我知道
只需将您正在使用的“math”变量的名称更改为任何其他您认为与您正在导入的数学函数重叠的变量
在Python中,名称一次只能命名一件事。特别是,您的全局变量(名称)一次只能命名一件事
因为您的代码是
math.sqrt
,您希望得到一个平方根函数,所以我假设您在所示代码上方的某个地方import math
。导入模块时,这是一个赋值——在Python加载模块后,它创建一个模块对象,并且math
成为该模块的名称在这方面没有对模块的特殊处理-名称
math
只是一个名称,随后可以用来命名其他任何东西-但一次只能命名一件事所以以后,当你做类似的事情时
这使得
math
停止作为标准库模块的名称,而开始作为该字符串的名称字符串没有
sqrt
方法。方法是一种属性——通常,x.y
表示名为x的对象(事物)的名为y的属性。如果由于某些内容没有具有指定名称的属性而导致错误,则会得到一个AttributeError
使用不同的名称跟踪您正在执行的操作
相关问题 更多 >
编程相关推荐