Seite 1 von 2
Einlesen zweier Zahlen + Summe berechnen
Verfasst: Freitag 14. August 2020, 13:13
von ScottyMiller
Hallo zusammen,
ich sitze nun immer wieder an folgender Aufgabe bei meiner Prüfungsvorbereitung und komme einfach nicht weiter. Die Aufgabe ist:
Programmieren Sie das Einlesen zweier Zahlen und berechnen Sie die Summe aller Zahlen zwischen der kleineren und größeren Zahl (mit for-Schleife/mit while-Schleife).
Code: Alles auswählen
zahl1 = input ("Geben Sie eine Zahl ein: ")
zahl1 = int (zahl1)
zahl2 = input ("Geben Sie eine weitere Zahl ein: ")
zahl2 = int (zahl2)
lst = []
lst.append(zahl1)
lst.append(zahl2)
lst.sort()
print (lst)
sum = 0
for i in range(lst[0], lst[0]):
sum + i
print(sum)
Das Setup der Aufgabe an sich ist nicht das Problem. Bei der for-Schleife hakt es dann leider. Ich bekomme es nicht hin entweder die beiden Input-Variablen direkt als Grenzen für die for-Schleife zu setzen oder auch über die Liste und dann die einzelnen Zahlen hochzuzählen und zusammen zu addieren.
Über jede Hilfe wäre ich sehr dankbar! Bis bald.
Re: Einlesen zweier Zahlen + Summe berechnen
Verfasst: Freitag 14. August 2020, 13:35
von Sirius3
`lst` ist ein sehr generischer Name für zwei Zahlen, die sortiert werden sollen. Wenn man schon weiß, welche Elemente in einer Liste stehen sollen, kann man sie auch direkt in eckigen Klammern schreiben:
Code: Alles auswählen
zahl1 = int(input("Geben Sie eine Zahl ein: "))
zahl2 = int(input("Geben Sie eine weitere Zahl ein: "))
zahlen = [zahl1, zahl2]
zahlen.sort()
Dann solltest Du Dir genau anschauen, von welcher Zahl bis zu welcher Zahl `range` läuft.
Das Ergebnis der Addition solltest Du wieder einer Variable zuweisen.
Eingerückt wird immer mit 4 Leerzeichen pro Ebene, nicht 3.
Was ist genau mit `*alle* Zahlen zwischen der kleineren und größeren Zahl` gemeint?
Re: Einlesen zweier Zahlen + Summe berechnen
Verfasst: Freitag 14. August 2020, 13:41
von ScottyMiller
Die Aufgabenstellung ist in der Hinsicht echt nicht gut formuliert muss man sagen, geht aber ja eher darum das Konzept zu verstehen. In der Übung sagte mir der Prof., dass er die Addition inklusive Start- und End-Zahl addiert haben möchte.
Also bei Eingabe von 1 und 4 dann: 1 + 2 + 3 + 4.
Re: Einlesen zweier Zahlen + Summe berechnen
Verfasst: Freitag 14. August 2020, 13:51
von Jankie
Mit
range:
als zahl1 und zahl2 musst du dann halt die Elemente der sortierten Liste nehmen.
Re: Einlesen zweier Zahlen + Summe berechnen
Verfasst: Freitag 14. August 2020, 14:00
von ScottyMiller
Habe nun folgende Schleife:
Code: Alles auswählen
for summe in range (zahlen[0], zahlen[1] +1):
print (sum(range(zahl1, zahl2 + 1)))
Etwas unschön ist die Ausgabe in der Konsole bei z.B. 1 und 4, dass das Endergebnis 4 Mal ausgegeben wird. Ist das für das Programm nötig, Schönheitsfehler oder gar nicht anders machbar? Nicht das ich jetzt lange rumprobiere und es ist anders gar nicht realisierbar.
Das Umwandeln in die while-Schleife hoffe ich selbstständig hinzukriegen.

Re: Einlesen zweier Zahlen + Summe berechnen
Verfasst: Freitag 14. August 2020, 14:23
von Sirius3
ich glaube kaum, dass Du die `sum`-Funktion benutzen darfst. `summe` ist der falsche Name für die for-Schleifenvariable, und bei falschen Namen kann auch kein sinnvolles Programm rauskommen.
Re: Einlesen zweier Zahlen + Summe berechnen
Verfasst: Freitag 14. August 2020, 14:27
von Jankie
Der Körper der for-Schleife ist falsch. die Varaible in der for-Schleife sollte nicht summe heißen, sondern zahl, weil das immer ein Element der range() ist.
Diese zahl musst du dann im Körper einfach auf sich selber drauf addieren und am Ende - wenn die Schleife fertig ist - das Ergebnis ausgeben.
Code: Alles auswählen
zahl1 = int(input("Geben Sie eine Zahl ein: "))
zahl2 = int(input("Geben Sie eine weitere Zahl ein: "))
zahlen = [zahl1, zahl2]
zahlen.sort()
#Wenn mit einer Schleife das ergebnis berechnet werden soll
ergebnis = 0
for zahl in range(zahlen[0], zahlen[1] + 1):
ergebnis += zahl #ist wie ergebnis = ergebnis + zahl
print(ergebnis)
#Wenn der Weg egal ist und nur das Ergebnis zählt:
print(sum(range(zahlen[0], zahlen[1] + 1)))
Re: Einlesen zweier Zahlen + Summe berechnen
Verfasst: Freitag 14. August 2020, 15:04
von ScottyMiller
Danke euch bis hierhin!
Der verkürzte Weg über 'sum' ist wohl nicht gewünscht, da nicht der Weg über die Schleife geht. Beim Schreiben der while-Schleife für die gleiche Funktionalität fehlt mir grad aber auch jeglicher Ansatz oder Fantasie... Ich probiere mal weiter.
Re: Einlesen zweier Zahlen + Summe berechnen
Verfasst: Freitag 14. August 2020, 15:57
von ScottyMiller
Habe es nochmal probiert, aber bin zu keinem Ergebnis gekommen. Wenn mir jemand einen Ansatz geben könnte, der mich in die richtige Richtung schubst, wäre ich sehr dankbar! Für heute ist Feierabend... Morgen früh schaue ich wieder rein.
Re: Einlesen zweier Zahlen + Summe berechnen
Verfasst: Freitag 14. August 2020, 16:29
von mp1337
Bitteschön:
Code: Alles auswählen
zahl1 = int(input("Geben Sie eine Zahl ein: "))
zahl2 = int(input("Geben Sie eine weitere Zahl ein: "))
zahlen = [zahl1, zahl2]
zahlen.sort()
#For Schleife wie ich sie machen würde:
ergebnis = 0
for zahl in zahlen:
ergebnis += zahl
print(ergebnis)
#Alternativ mit range:
ergebnis = 0
for zahl in range(len(zahlen)):
ergebnis += zahlen[zahl]
print(ergebnis)
#while:
ergebnis = 0
zahl = 0
while zahl <len(zahlen):
ergebnis += zahlen[zahl]
zahl+=1
print(ergebnis)
Re: Einlesen zweier Zahlen + Summe berechnen
Verfasst: Freitag 14. August 2020, 17:51
von Sirius3
@mp1337: Dein Code löst ein anderes Problem. Ließ noch mal die Aufgabenstellung des TE.
Re: Einlesen zweier Zahlen + Summe berechnen
Verfasst: Samstag 15. August 2020, 09:01
von ScottyMiller
Guten Morgen,
ist aber gar nicht so verkehrt, dass die Lösung ein anderes Problem löste. Habe mir dann beide for-Schleifen angeschaut und geguckt was passiert und die Zeilen einzeln übersetzt, für mich als Rookie wohl immer noch eine gute Übung.
Versuche die von mp1337 gepostete while-Schleife so zu ändern, dass sie meine Aufgabenstellung löst, hat bisher leider noch nicht geklappt. Bei den Lösungen von mp addiert die Schleife nur die beiden Listenelemente. Ich denke mit einem kleinen Eingriff sollte er auch die Zahlen dazwischen addieren können. Dabei muss ich hinkriegen das auch die while-Schleife im Durchlauf durch die beiden Elemente von 'zahlen' limitiert wird. Bisher vergeblich.
Re: Einlesen zweier Zahlen + Summe berechnen
Verfasst: Samstag 15. August 2020, 11:08
von Briter
Ich habe richtig verstanden, dass die Schleife nur ein paar Elemente der Liste hinzufügt, was wiederum die addition von zahlen beeinflusst.
Re: Einlesen zweier Zahlen + Summe berechnen
Verfasst: Samstag 15. August 2020, 11:10
von snafu
Vielleicht einfach mal die Schritte notieren, wie man diese Aufgabe ohne Computer lösen würde. Sagen wir mal, die Zahlen sind 7 und 2. Die bringt man erstmal in die geforderte Reihenfolge. Wie kann man das machen, wenn man kein sort() zur Hand hat? Und wie läuft das dann in den kleinsten denkbaren Schritten beim Aufaddieren ab? Worin steckt die Wiederholung bei dem ganzen und welches Detail ändert sich bei jeder Wiederholung? Wenn dies klar geworden ist, lässt sich das Vorgehen des Aufaddierens sinnvoll in eine Schleife gießen. Normalerweise eine for-Schleife, da die Anzahl der Wiederholungen zu Beginn der Schleife bekannt ist. Zu Übungszwecken ist die Umformung zu einer while-Schleife aber auch nicht verkehrt.
Re: Einlesen zweier Zahlen + Summe berechnen
Verfasst: Samstag 15. August 2020, 13:19
von __blackjack__
Mir fehlt bei der Aufgabe ja eine Lösung ohne jegliche (auch implizite) Schleife. Habe mal die Varianten in Kotlin geschrieben:
Code: Alles auswählen
package de.python_forum.blackjack
fun sumWithClosedFormula(a: Int, b: Int): Int = (b * b + b - a * a + a) / 2
fun sumWithRange(a: Int, b: Int): Int = (a..b).sum()
fun sumWithFor(a: Int, b: Int): Int {
var result = 0
for (n in a..b) result += n
return result
}
fun sumWithWhile(a: Int, b: Int): Int {
var result = 0
var n = a
while (n <= b) {
result += n
n++
}
return result
}
fun main() {
val a = 23
val b = 42
val sumFunctions = listOf(
::sumWithClosedFormula,
::sumWithRange,
::sumWithFor,
::sumWithWhile
)
for (f in sumFunctions) println(f(a, b))
}
Re: Einlesen zweier Zahlen + Summe berechnen
Verfasst: Montag 17. August 2020, 16:53
von ScottyMiller
Ich habe mich Samstag und heute nochmal dran probiert und habe einfach ein großes Problem mit while-Schleifen. Bin ganz froh, dass die Klausur erst in 4 Wochen ist - noch genug Zeit um das zu beheben. Mir fehlt einfach das Verständnis wie die while-Schleife bei der Aufgabe aussehen muss und auch eine Umwandlung der for- in die while-Schleife klappt nicht. Habe es probiert mal ohne die Vorlage einfach die while zu programmieren, leider vergeblich.
Es ist echt zum Haare raufen, wenn man da nicht weiter kommt... Danke für eure Hilfe bis hierhin!
Re: Einlesen zweier Zahlen + Summe berechnen
Verfasst: Dienstag 18. August 2020, 06:32
von Jankie
Die Logik für die While-Schleife siehst du ja in __blackjack__ Beitrag. Du musst das nur noch auf die Python Syntax umschreiben.
Was meinst du mit Umwandlung der for-Schleife in eine while-Schleife?
Re: Einlesen zweier Zahlen + Summe berechnen
Verfasst: Dienstag 18. August 2020, 07:23
von snafu
Man braucht halt eine Zähler-Variable, oft
i genannt. Der grobe Ablauf für die while-Schleife:
Code: Alles auswählen
i = kleine zahl
solange i kleiner oder gleich grosse zahl:
neue summe = alte summe + i
erhöhe i um eins
zeige endsumme
Und nun muss man diese Gedanken eben als Code schreiben. Vorab zu klären wäre die Frage, ob man wirklich eine Unterscheidung für die neue und alte Summe braucht. Nein, braucht man nicht. Was einem in Prosa sinnvoll erscheint, kann nämlich im Code unnötig kompliziert sein. Also stattdessen besser nur
summe benutzen und dies bei jedem Durchlauf erhöhen.
Dann noch die Frage, was der Startwert für die Summe vor Betreten der Schleife sein muss. Denn ich kann ja nicht einfach
i zu Nichts addieren. Aber welche Zahl steht denn in der Mathematik für "Nichts" und kann man die hier sinnvoll einsetzen? Überleg mal...
Re: Einlesen zweier Zahlen + Summe berechnen
Verfasst: Dienstag 18. August 2020, 14:43
von ScottyMiller
@Jankie. Ja, du hast ja recht, aber für mich hat der Beitrag von Blackjack nur mehr Verwirrung gestiftet als Aufklärung gebracht. Bin einfach nicht so im coden drin als das mir ausführliche Beispiele da helfen, so schade das für mich auch ist. Und dann noch von einer anderen Sprache auf Python umzuschreiben würde ich wohl gar nicht hinbekommen. Studiere kein Informatik, sondern hatte Java und eben Python als Pflichtmodule in einem Wirtschaftsingenieur-Studiengang. Daher verzeiht auch die mitunter dämlichen Fragen, die von mir kommen. Für mich ist das leider alles nicht selbstverständlich (offensichtlich).
Es gibt doch ein bestimmtes Schema (Bedingung, Anweisungen, etc.) wie eine for- und eine while-Schleife aufgebaut ist. Dann könnte man sonst ja einfach auch die for-Schleife nehmen und die danach umschreiben.
@snafu
Habe grad folgendes programmiert und es scheint zu funktionieren:
Code: Alles auswählen
zahl1 = int(input("Geben Sie eine Zahl ein: "))
zahl2 = int(input("Geben Sie eine weitere Zahl ein: "))
zahlen = [zahl1, zahl2]
zahlen.sort()
ergebnis = 0
i = zahlen [0]
while i <= zahlen[1]:
ergebnis = ergebnis + i
i+=1
print (ergebnis)
So müsste es funktionieren. Wenn es unsauber o.ä. programmiert ist einmal bitte anmerken, aber die Funktion läuft jetzt.
Re: Einlesen zweier Zahlen + Summe berechnen
Verfasst: Dienstag 18. August 2020, 15:25
von nezzcarth
ScottyMiller hat geschrieben: Dienstag 18. August 2020, 14:43
Wenn es unsauber o.ä. programmiert ist einmal bitte anmerken, aber die Funktion läuft jetzt.
Das ist keine Funktion. Eine Funktion wird in Python mit 'def …' eingeleitet und gibt einen Rückgabewerte zurück. Du musst auch nicht unbedingt eine Funktion daraus machen, nur ist die Terminologie an der Stelle eben nicht zutreffend. Ansonsten gibt es stilistisch einige Dinge zu bemängeln. Zum Beispiel verwendest du einmal '+=', in der Zeile darunter aber wieder nicht. vor und Hinter solche Operatoren gehört ein Leerzeichen, vor eckige und runde Klammern (bei Funktionsaufrufen) jedoch nicht.