Python Zahlenreihenfolge?

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))
Woher ich das weiß:Hobby

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...

Woher ich das weiß:Berufserfahrung – Softwareentwickler f. Web, Win. & Linux (seit 2001)

Mark Berger  30.04.2020, 13:27

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
1

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?

Woher ich das weiß:Berufserfahrung – ich arbeite schon sehr lange im EDV Bereich, viele Sparten