2012-03-15 4 views
0

저는 변수 (예 : x + 2에서 10 개 x = 10)를 풀기위한 간단한 스크립트를 만들기 위해 노력하고 있습니다. 나는 변수를 풀기 위해 허수를 사용하는 함수를 발견하기까지는 많은 어려움을 겪고있었습니다. 나는 그걸 가지고 놀았고 어떤 것을 배웠지 만 지금은 두 가지 변수를 풀기를 원합니다. 내 프로그램의 주요 아이디어는 다음과 같습니다.간단한 대수학 솔버 (파이썬)에 대한 조언

def solve(eq,var1='x', var2='y'): 
    if '+' in eq: 
     try: 
      eq1 = eq.replace("=","-(")+")" 
      eq2 = eq1.replace('+','-') 
      print eq1 
      print eq2 
      c = eval(eq2,{var1:1j},{var2:1j}) 
      print c 
      c = -c.real/c.imag 
      eq3 = eq1.replace('x',str(int(c))) 
      eq4 = eq3.replace('y',str(int(c))) 
      eq5 = eq4.replace('-(', '=') 
      eq6 = eq5.replace(')','') 
      if eq6 == True: 
       print 'test1' 
       print eq6 
      else: 
       print 'oops1' 
       print eq6 

다른 모든 방정식을 보상하는 프로그램이 있습니다. 방정식이 풀렸다는 것을 확인하는 데 문제가 있습니다 (eq6 == True). 어떤 충고? 아니면 내가 실수 한거야?

+1

코드가 잘못 구성되었습니다. 하나의'try' 블록에 여러 줄을 입력하지 마십시오. 또한 의미있는 변수 이름을 사용하고 주석을 추가하는 것이 좋습니다 (또는 최소한 인쇄 출력 표시). – Will

+0

저는 주요 아이디어를 얻는 데 집중하고 있습니다 만, 고맙습니다. – asqapro

답변

1

식이 참인지 테스트하려면 해당 식을 계산해야합니다. 예를 들어 :

> '1 + 1 == 2' == True 
False 
> eval('1 + 1 == 2') == True 
True 

은 또한 당신은 평가할 때 = 대신 ==을 사용하는 것이 있는지 확인해야합니다. 내가 좋아하는 코드의 마지막 변경하는 경우 :

eq7 = eq6.replace('=', '==') 
if eval(eq7) == True: 
    print 'test1' 
    print eq7 
else: 
    print 'oops1' 
    print eq7 

와 난 아직도 당신이 원하는 꽤 무엇 불구하고

x + 2 -(10) 
x - 2 -(10) 
(-12+1j) 
oops1 
12 + 2 == 10 

가 오른쪽에 대한 자세한 인 얻을

solve('x + 2 = 10') 

시도 선로.

+0

그게 바로 내가 필요로하는 것입니다. 감사합니다. D – asqapro