Wie kann ich Python dazu bringen, einen Term so weit wie möglich aufzulösen?
Ich habe das normale Python Preset genommen und will hier fragen:
Wie kann ich Python dazu bringen, einen Term so weit wie möglich aufzulösen?
Der Term lautet
(binomische formel)
Also lautet meine Frage: Wie würde man das in Python schreiben? Also wie mache ich das, dass Python n als Variable sieht, die am Anfang erst einmal auf 1 gesetzt wird und wie kriege ich es hin, dass ich a und b nicht definieren muss, also dass er dann mit a und b als Variable sozusagen rechnet?
Mein bisheriger Code:
n = 0
print(("a" + "b") ** n)
n = n + 1
Vielleicht könntet ihr mir noch erklären, wie ich dann, wenn er das einmal schafft, den zweiten und dritten Schritt zum Beispiel fünfmal wiederholen kann.
Ich wäre mega dankbar, wenn ihr mir helfen könntet.
MfG
1 Antwort
Ich glaube nicht das so möglich ist, kannst ja in Python Zeichenketten z.B. "a" oder "b" nicht direkt für Rechenoperationen verwenden.
dafür gibt es aber eine spezielle Bibliothek namens ,,sympy" die importierst du dann, (wichtig: from sympy import * du kannst zwar auch import sympy schreiben, aber das musst du statt ,,symbols" sympy.symbols usw. schrieben)
wenn du das importiert hast, nutzt du halt die Methode ,,symbols()" um halt symbolische Variablen zu erzeugen (wie in Mathe z.B. x, y).
Initialisiert die Variable n und weist ihn den Wert 2 zu.. ja dann definierst du deinen Ausdruck und speicherst es unter der Variable ,,aufgabe".
Dann nutzt du die Methode ,,expand()", das deinen Ausdruck vereinfacht, expandiert, klammern auflöst usw.
und gibst dann dieser einfach aus ;)
from sympy import *
a, b = symbols("a b")
n = 2
aufgabe = ((a+b)**n)
aufgabe_n = expand(aufgabe)
print(aufgabe_n)
Wenn du das wiederholen willst, kannst du bzw. musst du Schleifen nutzen (wenn du effektiv arbeiten willst ;) )
z.B. :
For schleife:
from sympy import *
a, b = symbols("a b")
for n in range(11):
# Wichtig: Da steht eigentlich range(0,11), also bei der Schleife wird für n = 0 bis n = 10 ausgeführt, die 11 zählt nicht dazu
aufgabe = (a + b)**n
aufgabe_n = expand(aufgabe)
print(aufgabe_n)
jetzt habe ich aber noch eine frage: wie kann ich das ganze so ausgeben lassen, dass da am schluss die ganzen formeln mathematisch geschrieben sind? also anstatt ** die zahlen in hochzahlen, sodass ich alles kopieren kann, und in ein dokument einfügen kann, dass es da auch schön aussieht
lg
also pprint scheint undefiniert, funktioniert nicht. die meldung:
Traceback
(most recent call last):
File "/home/runner/mathstuff/main.py", line 8, in <module
> pprint(f"(a + b)^{n} = {formula}")
NameError: name 'pprint' is not defined. Did you mean: 'print'?
egal, nicht so wichtig, hat auch dann nicht funktioniert. ich mache das anders, danke aber, du hast mir sehr geholfen <3
Es gibt dutzende andere Möglichkeiten btw:
z.B.
from IPython.display import display
from sympy import *
a, b = symbols("a b")
for n in range(11):
# Wichtig: Da steht eigentlich range(0,11), also bei der Schleife wird für n = 0 bis n = 10 ausgeführt, die 11 zählt nicht dazu
aufgabe = (a + b)**n
aufgabe_n = expand(aufgabe)
display(aufgabe_n)
hey, ich habe es gerade durch zufall dank dir geschafft, auf sympy bin ich nicht gekommen, ist mir dann aber wieder eingefallen!! ich habe es ein wenig anders gemacht aber es ist im prinzip das gleiche:
from sympy import symbols, binomial, expand
# Definiere die symbolischen Variablen
a, b = symbols('a b')
for n in range(51):
formula = expand((a + b) ** n)
print(f"(a + b)^{n} = {formula}")
das skript generiert dann alle bis zum exponenten 50