Seite 1 von 1
Summer der Quadratzahlen
Verfasst: Dienstag 23. Oktober 2018, 17:50
von Casio
Hallo Zusammen,
versuche mir gerade zuhause selber Python beizubringen (Tag 3) und habe Probleme mit einer for-Schleife.
Ziel ist die Summe der Quadrate von 1 bis 99, die sich idealerweise in der Variable b bilden sollte.
Der Debugger sagt mir es gibt einen Type-Error, aber sowohl a als auch Quadratur(a) sind doch integer oder nicht?
def Quadratur(Operator):
return print(Operator**2)
a = 1
b = 0
for number in range(1,100):
b += Quadratur(a)
a += 1
print(b)
Grüße, Casio
Re: Summer der Quadratzahlen
Verfasst: Dienstag 23. Oktober 2018, 18:00
von __deets__
Du gibst ja auch das Ergebnis der print-Funktion zurueck. Das ist nunmal None.
Re: Summer der Quadratzahlen
Verfasst: Dienstag 23. Oktober 2018, 18:43
von ThomasL
und die Zählervariable a ist überflüssig da du dazu die Variable number nehmen kannst
Re: Summer der Quadratzahlen
Verfasst: Dienstag 23. Oktober 2018, 18:57
von Casio
Habs hinbekommen.
Danke für die Hinweise!
Re: Summer der Quadratzahlen
Verfasst: Dienstag 23. Oktober 2018, 19:55
von Sirius3
Funktionen sollten als Name eine Tätigkeit haben, also bei Dir "quadrieren". Einen Operator quadrierst Du hier auch nicht, sondern einen Quadranten, oder eben einfach eine Zahl. Die richtige Wahl der Namen hilft Dir, ein Problem zu verstehen und fehlerfrei in ein Programm zu übersetzen:
Code: Alles auswählen
def quadrieren(zahl):
return zahl ** 2
summe = 0
for zahl in range(1, 101):
summe += quadrieren(zahl)
print(summe)
Re: Summer der Quadratzahlen
Verfasst: Donnerstag 25. Oktober 2018, 09:57
von __blackjack__
Hier noch zwei Varianten. Einmal wenn man mehr Python-Syntax gelernt hat (Generatorausdrücke) und die `sum()`-Funktion verwendet kann man das als Einzeiler ausdrücken:
Und wenn man ein bisschen Mathemagie macht, kann man aus der Summe, die ja über eine Schleife realisiert wird und damit von der Laufzeit her von der grösse der Obergrenze bis wohin Quadratzahlen gebildet und summiert werden sollen, abhängt, einen geschlossenen Ausdruck machen, der konstanter in der benötigten Laufzeit ist:
Code: Alles auswählen
def summe_der_quadrate_bis(n):
return int(n**3/3 + n**2/2 + n/6)
print(summe_der_quadrate_bis(100))
Re: Summer der Quadratzahlen
Verfasst: Donnerstag 25. Oktober 2018, 12:15
von Casio
__blackjack__ hat geschrieben: Donnerstag 25. Oktober 2018, 09:57
Code: Alles auswählen
def summe_der_quadrate_bis(n):
return int(n**3/3 + n**2/2 + n/6)
print(summe_der_quadrate_bis(100))
Hab gerade 20 min überlegt warum das funktioniert. Nicht schlecht, sehr elegant!
Re: Summer der Quadratzahlen
Verfasst: Donnerstag 25. Oktober 2018, 12:15
von narpfel
@__blackjack__: Man kann die Berechnung komplett auf Integern durchführen und damit unnötige Rundungsfehler vermeiden.

Re: Summer der Quadratzahlen
Verfasst: Donnerstag 25. Oktober 2018, 13:44
von __blackjack__
@Casio: Ich habe da fast gar nicht drüber nachgedacht, nur in soweit das es da ja diese Geschichte vom kleinen Gauss und der Summe von allen Zahlen von 1 bis 100 gibt. Den Rest habe ich dann mit dem `sympy`-Package erledigt:
Code: Alles auswählen
In [31]: import sympy
In [32]: sympy.init_printing()
In [33]: from sympy.abc import i, n
In [34]: sympy.Sum(i**2, (i, 1, n))
Out[34]:
n
___
╲
╲ 2
╱ i
╱
‾‾‾
i = 1
In [35]: sympy.Sum(i**2, (i, 1, n)).doit()
Out[35]:
3 2
n n n
── + ── + ─
3 2 6