Frage von Jo9777, 108

Python Übung zahlen zusammenzählen?

Ich bin gerade dabei Python zu lernen und soll eine kleine Übung dazu machen, komme dabei aber absolut nicht weiter. Ich will ein Programm schreiben in dem ich eine Zahl eingebe, sagen wir bsp. 2350, das programm soll dann alle Zahlen aufsummieren die vor 2350 kommen, sprich 1+2+3+4+5+6+7+8+9+10+11 und so weiter bis eben 2350 und diese zahl dann ausgeben. Kann mir jemand helfen wie ich das hinbekomme

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von ConiCool, 74

Stichwort: Schleife.

Nimm eine Variable "Zahl" und setze sie gleich 1.
Nimm eine 2. Variable "Ergebnis" un setze sie gleich 0.
Nimm eine 3. Variable "Zaehler" und setze sie auf den Wert, der eingegeben wird ( in Deinem Beispiel 2350).

Lass nun in einer Schleife den Wert von "Zahl" zum "Ergebnis" hinzuaddieren.

Die Schleife wird solange aufgerufen, bis der Wert des Zaehlers erreicht wird.

Nach der Schleife einfach "Ergebnis" ausgeben lassen.


Kurz Zusammengefasst:

1. Variablen festlegen
2. Schleife durchlaufen lassen
3. Ergebnis ausgeben

Kommentar von Jo9777 ,
zahl = 1
ergebnis = 0
zaehler = 2350

while zahl <= zaehler:
ergebnis = ergebnis + 1
zahl = zahl + 1

print("Die Summe entspricht: " + str(ergebnis))
meinst du so? wie gebe ich das insgesamte Ergebnis jetzt noch aus, bei mir gibt es jetzt ja nur die 2350 aus da ich einfach str(ergebnis) eingegeben hab 
Kommentar von NMirR ,

richtig muss es sein: Ergebnis = Ergebnis + Zahl

Expertenantwort
von TeeTier, Community-Experte für programmieren, 49

Das, was du möchtest, kann man - wie in den anderen Antworten schon erwähnt - in einer Schleife realisieren ... zumindest wenn man blutiger Anfänger ist, und noch nie richtig in Python programmiert hat. :)

Wenn man hingegen schon etwas fortgeschritten ist, schreibt man einfach Folgendes:

sum(range(1, 2350 + 1))

Allerdings sollte man dabei im Hinblick auf Laufzeit - und evtl. Speicherverbrauch - Bauchschmerzen bekommen, es sei denn, man kommt aus dem PHP-Lager. :)

Wenn man jetzt aber in der 6ten Klasse gut aufgepasst hat, dann erinnert man sich auch daran, dass man die vorliegende Problemstellung effizient und elegant mithilfe der Gaußschen Summenformel löst:

(2350 * 2350 + 2350) // 2

Um den Unterschied in der Performance zu verstehen, kannst du statt 2350 ja mal 235000000 einsetzen, und die obige Version (welche intern eine Schleife benutzt) und die untere vergleichen.

Für weitere Infos:

https://de.wikipedia.org/wiki/Gau%C3%9Fsche\_Summenformel

Das ganze kann man auch noch schick in eine Funktion verpacken, aber da es so klein ist, würde ich sogar zu einem übersichtlichen Lambda tendieren:

g = lambda n: (n * n + n) // 2

print(g(2350))

Viel Spaß! :)

Kommentar von TeeTier ,

PS: Der Vollständigkeit halber noch mal die naive Lösung mit expliziter Schleife:

summe = 0
for i in range(1, 2350 + 1):
summe += i

print(summe)

Das ist aber - wie gesagt - grauenvoll ineffizient. :)

Kommentar von Jo9777 ,

Super danke für die Antwort, eine frage noch wenn ich jetzt aber selber entscheiden möchte welche zahl ich eingebe, wie mache ich das, also sagen wir input:"Zahl: " und es mir daraus dann diese summe berechnet

Kommentar von TeeTier ,
n = int(input('Zahl: '))
print((n * n + n) // 2)

Das enthält zwar keine Fehlerüberprüfung, falls jemand anstelle einer Zahl "abc" eingibt, aber egal ... so auf die Schnelle sollte das funktionieren. :)

Antwort
von Schlauberger303, 56

Kenne Python nicht / kaum.

Wird nicht anders zu lösen sein, wie in jeder anderen Programmiersprache.

Schleife von 1 bis Zielwert und jedes mal in der Schleife den aktuellen Schleifendurchlauf einer zu Anfang auf 0 gesetzten Variablen aufaddieren.

Oder halt Gaußsche Summenformel, was sicher nicht Intention der Lehrkraft war.

Kommentar von Jo9777 ,
zahl = 1
ergebnis = 0
zaehler = 2350

while zahl <= zaehler:
ergebnis = ergebnis + 1
zahl = zahl + 1
return ergebnis
also dann so? jetzt habe ich aber das Problem, dass es mir sagt return wäre eine "outside function"
Kommentar von Schlauberger303 ,

Nicht ganz. Richtige Lösung wurde dir ja weiter oben von TeeTier schon beschrieben.

Keine passende Antwort gefunden?

Fragen Sie die Community