2013-05-04 15 views
0

如果我有一個字符串「2 + 3」,是否有將它轉換爲一個整數,所以它出現爲5?在python中轉換爲int的字符串

我嘗試這樣做:

string = 2+3 
answer = int(string) 

但我得到一個錯誤:

ValueError: invalid literal for int() with base 10: '2+3' 

我試圖採取完全括號中的公式和使用棧回答。

ex。公式=((2 + 3) - (4 * 1))

我試着把方程作爲輸入,但python只是自己解決它。 所以爲了避免這個問題,我把方程作爲raw_input。

+0

嗯,轉換與postfix然後評估... – 2013-05-04 18:15:44

+0

'eval'實際上是不正是這樣的功能! – 2013-05-04 18:17:09

+0

哦,我什至不知道存在,謝謝!它現在有效。 – 2013-05-04 18:17:44

回答

0

使用eval(記得消毒您輸入更多關於這一點,如果你閱讀文檔。):

>>> eval('2+3') 
5 

它甚至還支持變量:

>>> x = 1 
>>> eval('x+1') 
2 
+4

如果輸入來自用戶,你不應該使用eval – aaronman 2013-05-04 18:16:47

+0

@aaronman爲什麼不呢?有用! – 2013-05-04 18:18:06

+0

大家都知道,如果你得到用戶輸入,eval是不安全的,因爲它執行的是任意代碼。如果他使用它,他至少應該對輸入進行消毒。 – aaronman 2013-05-04 18:18:50

1

有一個辦法,eval功能...

>>> x = raw_input() 
2 + 6 
>>> x 
'2 + 6' 
>>> eval(x) 
8 

但是一定要驗證輸入只有h作爲數字和符號。

>>> def verify(x): 
    for i in x: 
     if i not in '1234567890.+-/*%()': 
      return False 
    return True 

>>> x = raw_input() 
2 + 6 
>>> x 
'2 + 6' 
>>> if verify(x): 
    print eval(x) 
8 

ast.literal_eval不起作用:

>>> ast.literal_eval('2+3') 

Traceback (most recent call last): 
    File "<pyshell#1>", line 1, in <module> 
    ast.literal_eval('2+3') 
    File "C:\Python2.7 For Chintoo\lib\ast.py", line 80, in literal_eval 
    return _convert(node_or_string) 
    File "C:\Python2.7 For Chintoo\lib\ast.py", line 79, in _convert 
    raise ValueError('malformed string') 
ValueError: malformed string