这些是我按下按钮时在我的输入框中显示的数字
def numberone():
displayblox.insert(0,int(1))
def numbertwo():
displayblox.insert(0,int(2))
def numberthree():
displayblox.insert(0,int(3))
def numberfour():
displayblox.insert(0,int(4))
def numberfive():
displayblox.insert(0,int(5))
def numbersix():
displayblox.insert(0,int(6))
def numberseven():
displayblox.insert(0,int(7))
def numbereight():
displayblox.insert(0,int(8))
def numbernine():
displayblox.insert(0,int(9))
def plusone():
displayblox.insert(0,'+')
def minusone():
displayblox.insert(0,'-')
def divideone():
displayblox.insert(0,'/')
def timesone():
displayblox.insert(0,'*')
当我按=然后显示
时,这部分会添加输入框中的内容def equalsone():
answer = int(displayblox.get())
displayblox.delete(0,END)
displayblox.insert(0,answer)
答案 0 :(得分:1)
您不能只是致电int('2+2')
并获取4
; int()
函数只将数字转换为整数,但不进行算术运算。
为此,您需要将字符串解析为解析树并对其进行算术运算。以树的形式跟踪输入可能更容易,而不是需要转回树中的字符串。
或者您可以使用eval
,但这会导致黑暗面:eval
将很乐意执行您抛出的任何代码,因此通常认为它不安全。这可能实际上是一个安全的情况,但如果你不确定,那么假设它不是。
答案 1 :(得分:0)
你可以这样做:
my_str="2+2"
result=int(my_str.split("+")[0])+int(my_str.split("+")[1])
这可以通过将字符串分解为列表["2","2"]
来实现,然后在列表索引中调用int,并将其转换为int。然后你可以将它们加在一起,因为它们都是int
s。
如果你想要一些更复杂的东西,例如,加法字符串的未定义长度,你可以这样做:
def compile_them_all(in_string,operator):
if not isinstance(operator,str): raise Exception("operator must be a string.")
if not isinstance(in_string,str): raise Exception("in_string must be a string.")
return sum(int(x) for x in in_string.strip().split(operator))
或者,您也可以执行result=eval("2+2")
,但是,这是非常不鼓励的,因为您可以将python代码作为输入,它将在运行时影响python程序(例如,我可以{{1它会退出程序。)