2010-11-10 28 views
3

J'essaye de faire une fonction de recherche pour travailler avec des problèmes d'algèbre. Je veux quelque chose comme Wolfram Alpha mais je construis un framework python pour ça. Il devrait être capable de comprendre plusieurs variables et équations des deux côtés du signe égal. J'ai récemment demandé un validateur pour le programme, j'ai donc besoin d'une boucle qui passe par un tas de chiffres et détermine ce que chacune des variables est égale. Mon problème est les décimales. Je suggère d'utiliser une fonction de recherche. Voici le solveur d'équation:Fonction d'algèbre de recherche de Python

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

Toute aide est utile!

+1

Vous pouvez utiliser une bibliothèque comme SymPy. –

+0

C'est un sujet très intéressant, surtout pour un jeune programmeur comme vous. Ce que vous voulez vraiment faire est de créer un 'arbre de syntaxe', qui est un arbre d'objets qui représente la signification de l'expression mathématique. Vous pouvez écrire un analyseur pour parcourir la chaîne et la «comprendre» caractère par caractère, en construisant l'arbre au fur et à mesure. Ensuite, cela devient intéressant, car vous pouvez faire des choses sympas avec l'arbre comme des motifs de repérage ou d'évaluation d'expressions. Vous devriez faire un bon coup, ça va élargir votre esprit! – Joe

+0

Par exemple, ces diapositives. Ne soyez pas rebutés par les caractères grecs! http://www.inf.ed.ac.uk/teaching/courses/ct/slides/Lecture5.pdf – Joe

Répondre

1

Les eval() ne fonctionneront pas, car la gauche et la droite sont des chaînes, pas des expressions. De plus, vous devrez faire une validation substantielle pour faire ce qu'un utilisateur pourrait entrer une expression Python valide. Considérons quelques valeurs que vous pourriez obtenir:

# The typical person's notation for x-squared isn't valid Python 
x^2 + x - 3 
# 3x means 3 * x to us, but to python it means nothing 
3x + 4 
# Some people use % to represent division, but that's a modulo operator to Python 
3 % 4x 
# Python doesn't understand the distributive property 
3(4 - x) 
# People might use some functions in a way Python doesn't understand 
cos x 
# Square brackets are used synonymously with parentheses 
x[(x^2 - 5)(x^3 - 5x)] 

Donc, en bref, vous aurez besoin d'une sorte de moteur pour convertir des équations en texte brut en expressions Python valides. Ce n'est pas une tâche facile, mais cela peut certainement être fait.

Bien que votre projet soit très ambitieux, je pense que c'est un excellent moyen d'utiliser Python! Si vous trouvez une façon intelligente de convertir les équations en chaînes de caractères en Python valide, vous devriez le partager immédiatement car de nombreuses personnes de la communauté scientifique et mathématique pourraient en avoir besoin.

+0

Je suis venu avec quelques-uns. Si vous êtes intéressé, voici la page: http: //code.google.com/p/pygebra/ –