Wie kann ich Python dazu bringen, einen Term so weit wie möglich aufzulösen?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

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)


Digi1304 
Fragesteller
 28.10.2023, 13:55

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

1
Digi1304 
Fragesteller
 28.10.2023, 14:09
@Digi1304

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

0
Digi1304 
Fragesteller
 28.10.2023, 14:11
@Digi1304

und dass es jeweils einen zeilenumbruch hat zwischen jeder formel, da kann ich einfach print (\n) schreiben am ende der berechnung, oder?

0
Hsk108385  28.10.2023, 14:12
@Digi1304

Dann kannst du statt ,,print()" ,,pprint()" schreiben, das verschönert die ausgabe

1
Hsk108385  28.10.2023, 14:13
@Digi1304

Na print erzeugt ja normalerweise automatisch einen zeilenumbruch .. aber kannst das trotzdem machen , damit eine zeile immer frei bleibt

1
Digi1304 
Fragesteller
 28.10.2023, 14:17
@Hsk108385

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'?

0
Hsk108385  28.10.2023, 14:18
@Digi1304

hm.. bei mir funktioniert das.. versuch mal mit ,,import pprint" aber dann musst du pprint.pprint() schreiben

1
Digi1304 
Fragesteller
 28.10.2023, 14:23
@Hsk108385

egal, nicht so wichtig, hat auch dann nicht funktioniert. ich mache das anders, danke aber, du hast mir sehr geholfen <3

1
Hsk108385  28.10.2023, 14:29
@Digi1304

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)

1