对于带有基数10的int()的无效文字:'2 + 2'为什么我的程序不会将数字加起来

时间:2013-03-17 15:59:37

标签: python python-3.x grid tkinter calculator

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

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) 

2 个答案:

答案 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它会退出程序。)