2013-05-04 4 views
0

"2 + 3"이라는 문자열이있는 경우, 정수로 변환하여 5로 나오게 할 수 있습니까? 파이썬의 문자열 변환

나는이 시도 :

string = 2+3 
answer = int(string) 

을하지만 오류 얻을 : 나는 완전히 괄호 식을하기 위해 노력하고있어 사용이 대답을 스택

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

합니다.

ex. 방정식 = ((2 + 3) - (4 * 1))

방정식을 입력으로 시도했지만 파이썬은 방금이를 해결합니다. 그래서 문제를 피하기 위해 방정식을 raw_input으로 사용했습니다.

+0

을 음, 어디, 평가 후 접미사에로 변환 ... –

+0

'eval' 실제로 정확히이 일을하는 기능입니다! –

+0

오, 나는 그 존재조차 알지 못했다. 고마워! 이제 작동합니다. –

답변

0

사용 eval (및 입력을 소독 기억이에 더 당신이 문서를 읽으면는.) :

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

입력이 사용자가 보낸 것이라면 eval – aaronman

+0

@ aaronman을 사용하면 안됩니까? 그것은 작동합니다! –

+0

사용자 입력을 받으면 eval이 안전하지 않다는 것을 모든 사람이 알고 있습니다. 왜냐하면 임의의 코드를 실행하기 때문입니다. 그가 그것을 사용하는 경우 그는 적어도 입력을 sanitize해야합니다. – aaronman

1

이 하나의 방법, eval 기능 :

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

심지어 변수를 지원합니다 ..

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

하지만 입력이 숫자와 기호로.

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