Python Zahlenreihenfolge?
Hallo,
ich mache gerade eine Hausaufgabe, doch ich weiß nicht, wie ich bei dieser Aufgabe die Zahlen reihenfolge (1+2+3...) mit einer while Schleife weiterführen kann.
Die Aufgabe:
Lassen Sie den Rechner die Summe der folgenden Zahlen bis zu einem Grenzwert g berechnen und geben Sie die Anzahl der benötigten Glieder aus.
1+2+3+4+5+...+n
Mein Ansatz:
g = int(input("Grenzwert:"))
z = 0
b = 1
while g >= b:
z += 1
b += z
r =
print ("Ende", r)
g = Grenzwert
b = Die Zahl die kleiner sein muss als "g"
z = die Zahl die jedes mal mehr wird
r = Reihenfolge am Ende ("1+2+3+4+5+6+7...)
Ich hoffe ihr könnt mir helfen ich frage sonst nie etwas darüber, jedoch komme ich hier nicht weiter.
Mit freundlichen Grüßen
Jan
4 Antworten
Hallo,
die Zahl, die du ausgeben willst, die hast Du doch schon, das ist die Zahl b und die Anzahl der Glieder kennst du auch, das ist die Zahl z-1. Die Reihenfolge ist nicht gefragt, oder?
Dein Code hat ein weiteres Problem. Du überschreitest in jedem Fall den Grenzwert, denn die while Schleife bricht erst ab, nachdem der Grenzwert überschritten wurde. Wenn das die Augabe ist, dann ist das okay, ich verstehe die Aufgabe aber so, dass der Grenzwert nicht überschritten werden soll. Da Python kein do... while hat, würde ich folgendes Konstrukt vorschlagen:
g = int(input("Grenzwert:"))
z = 0
b = 1
condition = True
while condition:
z += 1
if b + z > g:
condition = False
else:
b += z
print ("Ende", b, z-1)
Geht auch ohne (direkte) Schleife:
grenzwert = int(input("Grenzwert:"))
zahlen = [range(1, grenzwert + 1)]
summe = sum(zahlen)
reihe = "+".join([str(zahl) for zahl in zahlen])
print("{0}={1}".format(reihe, summe))
Ich glaube du meinst das:
g = int(input("Grenzwert:"))
z = 0 # zähler
r = 0 # resultat
while g > z:
z += 1
r += z
print ("Ende", r)
... nur so mit Einbuchstaben-Namen ist das schwerer zu verstehen.
Ich programmiere seit zig Jahren aber bei deinem Code muss ich nachdenken und viel raten - Was macht g und wo kommt es her, ah da oben wird es eingelesne... g ist also Grenzwert.
Was macht z? Startet bei 0 und wird jeden Durchgang erhöht. Ah, der Zähler!
Was macht b? Startet bei 1 - warum?! Da wird z mit addiert also sieht das aus wie das Ergebnis, warum startet das bei 1 und nicht bei 0 und was macht dann r?!
So wird es klarer:
letzte_zahl = int(input("Grenzwert:"))
zaehler = 0
ergebnis = 0
while letzte_zahl > zaehler:
zaehler += 1
ergebnis += zaehler
print ("Ende", ergebnis)
Du kannst auch bei 1 anfangen zu zählen, dann musst du aber letzte_zahl >= zaehler schreiben!
Bei solchen Problemen hilft dir ein Debugger! Nutze zB Visual Studio Code oder die IDLE um deinen Code Zeile für Zeile zu durchlaufen und zu sehen was genau passiert...
So findest du den Fehler und siehst genau was Programme machen...
Guter Code den man selber und andere verstehen erfordert es nicht immer nachzuschauen was wo wann gemacht wird sondern jede Anweisung sollte möglichst selbsterklärend sein. Dann werden Fehler auch klarer.
Würdest du schreiben:
ergebnis = 1
#...
ergebnis += zaehler
dann wäre es auch offensichtlicher warum in dem Fall dein Code um eins zu viel als Ergebnis liefert.
Du kannst dir auch in der Schleife selber Ausgaben bauen...
letzte_zahl = int(input("Grenzwert:"))
zaehler = 0
ergebnis = 0
while letzte_zahl > zaehler:
zaehler += 1
print("Zähler", zaehler)
ergebnis += zaehler
print("Ergebnis", ergebnis)
print ("Ende", ergebnis)
Dann siehst du auch was das Programm macht:
Grenzwert:3
Zähler 1
Ergebnis 1
Zähler 2
Ergebnis 3
Zähler 3
Ergebnis 6
Ende 6
Ich spreche viele Sprachen, doch kein Python.
Was mir jedenfalls ins Auge sticht:
Wird die while-Schleife nicht durchlaufen, dann ist r undefiniert. (ist pfui)
Und die While-Schleife hat keine Klammer über die auszuführenden Befehle von begin und end oder do oder so. Wie immer dafür in Python die Syntax ist.
d.h. sie könnte hängen bzw. den print Befehl zu oft wiederholen.
Welche Ergebnisse siehst Du denn?