@Unplayable: Noch ein paar Anmerkungen:
Das die Berechnung von `d` *in* die Funktion gehört, wurde ja schon gesagt. Was Funktionen und Methoden an Werten verwenden sollte als Argument in die Funktion hinein kommen, und nicht auf magische Weise irgendwo aus der ”Umgebung”. Nur dann erfüllen Funktionen ihren Zweck, nämlich in sich geschlossene Teilllösungen zu sein, die man isoliert betrachten und testen kann.
Innerhalb der Funktion steht noch dreimal der gleiche Code um `d` zu berechnen. Das sollte nicht sein — man hat den Wert doch bereits an den Namen `d` gebunden und kann ihn verwenden.
Code: Alles auswählen
def pq_formel(p, q):
d = (-p/2)*(-p/2)-q
if d > 0:
liste = []
x1 = -(p/2)+sqrt(d)
liste.append(x1)
x2 = -(p/2)-sqrt(d)
liste.append(x2)
print(liste)
elif d == 0:
liste = []
x = -(p/2)+sqrt(d)
liste.append(x)
print(liste)
else:
print('leere Lösungsmenge')
Wenn man die leere Lösungsmenge nicht besonders behandelt, sondern in dem Fall einfach eine leere Liste ausgeben würde, dann könnte man die Definition von `liste` vor die Entscheidungen und die Ausgabe nach den Entscheidungen schreiben, und zwar *einmal*.
Code: Alles auswählen
def pq_formel(p, q):
d = (-p/2)*(-p/2)-q
liste = list()
if d > 0:
x1 = -(p/2)+sqrt(d)
liste.append(x1)
x2 = -(p/2)-sqrt(d)
liste.append(x2)
elif d == 0:
x = -(p/2)+sqrt(d)
liste.append(x)
print(liste)
In beiden Zweigen wird ein Wert gleich berechnet, das muss da auch nicht zweimal im Code stehen.
Code: Alles auswählen
def pq_formel(p, q):
d = (-p/2)*(-p/2)-q
liste = list()
if d >= 0:
x1 = -(p/2)+sqrt(d)
liste.append(x1)
if d > 0:
x2 = -(p/2)-sqrt(d)
liste.append(x2)
print(liste)
Man muss die Teilergebnisse nicht an einen nichtssagenden Namen binden den man dann nur in der nächsten Zeile verwendet um den Wert an die Liste anzuhängen.
Code: Alles auswählen
def pq_formel(p, q):
d = (-p/2)*(-p/2)-q
liste = list()
if d >= 0:
liste.append(-(p/2)+sqrt(d))
if d > 0:
liste.append(-(p/2)-sqrt(d))
print(liste)