2010-11-09 4 views
0

Merci d'avance! J'écris un programme pour vérifier si a est vrai, puis retourner Vrai ou Faux. J'ai besoin de le séparer au niveau du signe égal, puis de vérifier si le 1er élément de la liste est égal au second élément et inversement. Voici ce que j'ai jusqu'à présent:Comment écrire un solveur d'équations de chaînes en python?

def s_equation(a): 
    equal=a.split("=") 
+5

C'est ....... pas grand-chose. –

+0

devoirs? Donnez un exemple des types d'équations que vous voulez "résoudre". –

+0

la balise algebra implique que vous devez gérer des variables, pas seulement des constantes et des opérateurs. Est-ce vrai? Quels types d'opérateurs avez-vous besoin de soutenir? – ysth

Répondre

4

Vous pouvez utiliser eval() pour évaluer chaque partie de l'équation:

def s_equation(a): 
    left, right = a.split('=') 
    return eval(left) == eval(right) 

Certains tests:

>>> s_equation('1+1+1=3') 
True 
>>> s_equation('2*2=8') 
False 
4
left, right = a.split("=") 
assert left == right 

Vous allez devoir nous donner plus de détails que que si vous voulez une réponse utile. Essayez-vous d'écrire un système d'algèbre informatique complet (comme par exemple Mathematica)? C'est un projet biiiig et a déjà été fait plusieurs fois. Envisagez d'utiliser quelque chose comme Sage.

Modifier: math beat me to the punch, bien que je recommanderais d'utiliser ast.literal_eval au lieu de eval sauf si vous faites confiance à l'entrée que vous recevrez.

+4

Posez une question courte, obtenez une réponse courte. – katrielalex

+0

cela ne fonctionne pas dans le nouveau python –

+0

Pas complet comme mathematica, bien que j'utilise le même algorithme qu'eux. –

0

Vous ne donnez pas vraiment suffisamment d'informations pour répondre à bien votre question. Voulez-vous le tester comme une identité (c'est-à-dire tester l'algèbre) ou comme une égalité instantanée?

Pour les premiers, (installer sympy premier):

import sympy 

def s_equation(a): 
    x = sympy.Symbol('x') 
    y = sympy.Symbol('y') 
    left, right = a.split('=') 
    return eval (left + '==' + right) 

utilisation:

s_equation('x+x = x*2') 
#True 
s_equation('x+y**2 = y+x**2') 
#False 
Questions connexes