2016-11-06 94 views
0

我制作了一个简单的计算器,您可以在一个运算符中输入无限制的数字(即加法运算),但是每次运行它时,都会给出错误:如果语句的变量等于特殊字符[Python]

"Traceback (most recent call last): 
    File "C:\Users\My own\Desktop\1.py", line 68, in <module> 
choose_operation() 
    File "C:\Users\My own\Desktop\1.py", line 9, in choose_operation 
    addition() 
    File "C:\Users\My own\Desktop\1.py", line 26, in addition 
    c = input("Number:") 
    File "<string>", line 1 
    + 
    ^
SyntaxError: unexpected EOF while parsing" 

我只在这里包含两个函数,它们是选择要使用的操作和附加函数的函数,因此它将尽可能短。问题是:每当我试图把“c =='+'”放在最后一行的第二行时,就会出现上面提到的错误。我想要发生的是,当用户输入'+'时,它会调用函数'choose_operation',以便我可以回到选择操作。什么地方出了错?这是我的代码。

def choose_operation(): 
    print "choose operator" 
    print "1. Addition" 
    print "2. Subtraction" 
    print "3. Multiplication" 
    print "4. Division" 
    choice = input("choice = ") 
    if choice == 1: 
     addition() 
    elif choice == 2: 
     subtraction() 
    elif choice == 3: 
     multiplication() 
    elif choice == 4: 
     division() 
    else: 
     print "Select numbers from 1 to 4" 
     choose_operation() 

def addition(): 
    a = input("Number:") 
    b = input("Number:") 
    sum = a + b 
    print sum 
    while True: #I put this here so it can keep on adding numbers 
     c = input("Number:") 
     sum = sum + c 
     print sum 
     if c == '+': 
      choose_operation() 
+0

'input'函数返回一个字符串,你应该将它转换成int, '选择= int(输入)' – Arman

+4

在python 2中,使用'raw_input()'或切换到python 3. –

+1

@Arman:OP使用Python 2的'input'函数来计算它从stdin接收的字符串,所以如果你输入一个整数'input'将返回一个整数。正如你可以想象的那样,这是一个[主要的安全漏洞](http://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html),通常建议不要在不可信数据上使用Python 2的'input'函数。 –

回答

1

由于您使用的Python 2,使用input尝试计算输入的字符串。

它可能看起来方便,当你输入数字,因为你可以这样做:

a = input("enter number") 

a是浮动,INT,无论你输入。

但是,当你想输入一个字符串(例如:+)时,pyhton引擎会评估你的表达式为+,因此你遇到的错误。

所以,下降input()为Python 2,因为它有安全问题:您可以运行系统命令和删除文件,等等

的Python 2:

  • 可以使用raw_input()得到字符串(如+
  • 输入数字是这样的:a = float(raw_input("enter a float"))

的Python 3:

同样的事情,但使用input代替raw_inputinput,因为我们知道它讨厌的评价已被删除,raw_input现在input