Was /me gesagt hat.
Dazu noch dies: Einen Gleichungslöser in Python zu programmieren ist natürlich möglich. Es wäre nicht übermäßig schwierig, aber auch nicht trivial. Man würde typischerweise nicht versuchen, numerische Werte durch Ausprobieren zu finden, da das viel zu lange dauern würde. Und mit reellen Zahlen würde es manchmal gar nicht funktionieren, da manche Dezimalzahlen gar nicht genau durch floating-point-Zahlen dargestellt werden können:
Man würde es statt dessen symbolisch lösen, ziemlich genau so, wie man es mittels Papier und Bleistift lösen würde:
Dazu müsste man in Python erst mal einen Parser für solche Gleichungen schreiben. Als Ergebnis würde man einen sog. Abstract Syntax Tree (AST) erhalten, der so aussähe:
Der Gleichungslöser besteht dann aus zwei Teilen. Erstens muss er Strukturen in diesem Baum erkennen, und zweitens bestehende Strukturen durch neue ersetzen können. Die o.s. Rechnung etwa würde dabei schrittweise so transformiert werden:
Code: Alles auswählen
=
/ \
/ \
/ \
X -
/ \
+ 5
/ \
6 3
-----------------
=
/ \
/ \
/ \
X -
/ \
9 5
-----------------
=
/ \
/ \
/ \
X 4
Wie man sieht, wird hierbei das numerische Ausrechnen ebenfalls als Ersetzen von Strukturen verstanden.
In symbolischen Sprachen wie Prolog oder Lisp ist sowas trivial umzusetzen, da dort Bäume direkt als Ausdrücke codiert werden können. In Python könnte man evtl. geschachtelte Listen verwenden, oder man baut sich entsprechende Klassen (für =, +, -, usw.). Manchmal findet man auch eine Parser Library, die einem das
heavy lifting abnimmt, wie in diesem Beispiel, das etwas ähnliches tut (Auswertung aussagenlogischer Ausdrücke):
http://www.python-forum.de/viewtopic.ph ... 78#p230178. Auch das dort weiter unten stehende Programm von BlackJack zeigt eine Möglichkeit, wie man sowas umsetzen kann.
In specifications, Murphy's Law supersedes Ohm's.