2016-12-14 1 views
0

사용자가 파이썬에서 사용할 수있는 방정식을 입력하게하고 싶습니다. 어떻게 할 수있는 raw_input 수식을 수정할 수 있습니까?사용자가 파이썬에서 사용할 수있는 방정식을 입력하게하려면 어떻게해야합니까?

현재, 내 코드에서이 있습니다

consts = list() 
nconst = int(input("How many constraints would you like to add? ")) 
for i in range(nconst): 
    const = input("Constraint " + str(i+1) + ": ") 
    consts.append(const) 

내 제약 내가 입력에 사용자가 원하는 식이다. 방정식의 형식을 < =으로하고 싶습니다.

파서를 사용해 보았으므로 파서를 사용하는 테스트 사례를 시도했으며이 코드가 종료되었습니다. 내가 코드를 실행했을 때 답이 문제가 내가 사용하는 파서 코드도 거기에 100으로 가정 할 때

import parser 
formula = "x^2" 
code = parser.expr(formula).compile() 

from math import sin 
x = 10 
print(eval(code)) 

그러나, 파이썬은 나에게 8의 대답을했다?

도움이 될 것입니다!

+1

파이썬에서'^'는'bitwise xor'을 의미하기 때문에 방정식이 8이됩니다. '**' – Lafexlos

+0

을 사용하십시오.'parser'는 파이썬의 내부 파서입니다. 방정식을 파싱하거나 누군가 이미 작성한 파서를 사용하려면 * 파서를 작성해야합니다. –

+0

체크 아웃이 질문은 자신의 파서를 만드는 데 도움이 될 것입니다. http://stackoverflow.com/questions/2371436/evaluating-a-mathematical-expression-in-a-string –

답변

0

입력 문자열을 구문 분석하고 수식을 작성해야합니다. 예를 들어, 2를 4로 올리려는 경우 2 ** 4 또는 2^4와 같은 입력을받을 수 있습니다. 방정식에 대한 기호에 따라 두 경우 모두 문자열 입력을 구문 분석하고 방정식을 평가해야합니다.

테스트 케이스를 제공 할 수 있다면 문자열 해석에 도움이 될 것입니다.

편집 : 파이썬은 지수에 대한 ** 사용하지만 사용자가 입력으로^사용하려는 경우 당신은 다음과 같은 시도 할 수 있습니다 :

# say s is input 
[base, exponent] = s.split('^') 
print (float(base)**float(exponent)) 

작동합니다 그. 그렇게하면 입력하려는 모든 수식을 작성해야합니다. 복잡한 수식에는 더 뛰어난 파서가 필요합니다. 이것은 단지 begin something from

+0

안녕하세요! 방금 테스트 해본 파서 코드를 추가했습니다! –

관련 문제