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
Summer der Quadratzahlen
und die Zählervariable a ist überflüssig da du dazu die Variable number nehmen kannst
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
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)
- __blackjack__
- User
- Beiträge: 13114
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
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
print(sum(zahl**2 for zahl in range(1, 101)))
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))
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Hab gerade 20 min überlegt warum das funktioniert. Nicht schlecht, sehr elegant!__blackjack__ hat geschrieben: ↑Donnerstag 25. Oktober 2018, 09:57Code: 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))
- __blackjack__
- User
- Beiträge: 13114
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@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
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman