-1

这些是我按下按钮时在我的输入框中显示的数字

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) 
4

2 回答 2

1

你不能只是打电话int('2+2')和得到4; 该int()函数仅将数字转换为整数,但不进行算术运算。

为此,您需要将字符串解析为解析树并对其进行算术运算。以树的形式跟踪输入可能比您需要转回树的字符串更容易。

或者你可以使用eval,但这会导致黑暗面:eval会愉快地执行你扔给它的任何代码,所以它通常被认为是不安全的。这实际上可能是安全的情况,但如果你不确定,那么假设它不是。

于 2013-03-17T16:06:44.503 回答
0

你可以做:

my_str="2+2"
result=int(my_str.split("+")[0])+int(my_str.split("+")[1])

这是通过将字符串分解为一个列表["2","2"]来实现的,然后您可以在其中调用您想要转换为 int 的列表索引上的 int。然后你可以把它们加在一起,因为它们都是ints。

如果你想要一些更复杂的东西,例如,添加字符串的未定义长度,你可以这样做:

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 程序(例如,我可以这样做result=eval("exit(0)"),它会退出程序)。

于 2013-03-17T16:14:48.093 回答