Also ich versuche hier eine Aufgabe zu meistern und bekomme es einfach nicht hin...
Die Aufgabe lautet:
Schreibe ein Programm Addierer, das den Anwender auffordert, ganze Zahlen einzugeben, die addiert werden sollen. Jede Zahl wird mit <Enter> abgeschlossen. Eine leere Eingabe (also nur <Enter>) beendet die Eingabe.
Beispiel:
Eingabe: 2 <Enter> 5 <Enter> 1 <Enter> <Enter>
Ausgabe: 2+5+1=8
Mein Problem ist das ich nicht weiß wie ich das mit der Ausgabe hinbekommen soll...
Ich könnte höhstens die "8" als Ergebnis ausgeben, aber die anderen Zahlen nicht..
Es würde mich freuen wenn mir jemand helfen könnte.
Hilfe beim Quelltext
@Dupstre: Warum kannst Du die anderen Zahlen nicht ausgeben? Du musst doch im Grunde nur die Liste durchgehen, wo Du Dir die Zahlen gemerkt hast, und sie dann ausgeben. Wobei man sich am besten die eingegebenen Zeichenkettendarstellungen merkt und diese mit der `join()`-Methode auf Zeichenketten mit den '+'-Zeichen verbindet.
Das kann ich nicht, weil ich noch ein Anfänger bin und wir diese Befehle nochnicht gelernt haben...
Das sind die Befehle die mir zur verfügung stehen:
while
if
else
elif
print
input
str/int/float/round
</>/<=/>=/==/!=
+/-/*/ "/" /%
Das sind die Befehle die mir zur verfügung stehen:
while
if
else
elif
input
str/int/float/round
</>/<=/>=/==/!=
+/-/*/ "/" /%
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
@Dupstre: Das sind streng genommen auch nicht alles "Befehle", sondern auch Funktionen und Datentypen. Und ohne Listen wird es nur auf eine schmutzige Art und Weise gehen...
Zeig uns doch mal Deinen bisherigen Code!
Zeig uns doch mal Deinen bisherigen Code!
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Naja der ist leider falsch und besitzt Sytaxfehler.. Ich lerne die Prigramiersprache "Python" ja erst seid einer Woche.
An den unterstrichenen Stellen werden mir auch Sytaxfehler angezeigt...
Code: Alles auswählen
# Addierer.py
# Dieses Programm addiert Zahlen
a = 0
while True:
eingabe = str(input("Geben Sie eine ganze Zahl ein:")
[u]a[/u] = a + int(eingabe)
if int(eingabe) % 1 != 0[u]:[/u]
break
print(a)
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Dann solltest Du die mal als erstes ausbessern Schreibe doch nicht so viel Code auf einmal, der nicht funktioniert! Schreibe immer nur kleine Häppchen und teste diese aus. Damit kommst Du erst gar nicht dahin, dass Du mehrere Syntaxfehler auf einmal beheben musst.Dupstre hat geschrieben:Naja der ist leider falsch und besitzt Sytaxfehler..
Innerhalb von Code-Tags funktionieren die BBCodes natürlich nicht.Dupstre hat geschrieben: An den unterstrichenen Stellen werden mir auch Sytaxfehler angezeigt...
- Schau Dir mal die Zeile mit dem `input` genau an. Zähle die Klammern, die Du aufmachst und die, die Du schließt. Beides muss dieselbe Zahl ergeben... sonst ist eine Klammerebene ja nicht geschlossen
- `input` liefert Dir bereits ein Objekt vom Typ `str`. Die Umwandlung via `str()` ist damit überflüssig, wie man schnell in einer Shell nachprüfen kann:
Code: Alles auswählen
In [2]: text = input("Ihr Text: ")
Ihr Text: 42
In [3]: type(text)
Out[3]: builtins.str
In [4]: text
Out[4]: '42'
- Du willst eine *leere* Eingabe als Abbruch haben. Der Rückgabewert ist dann ein leerer String. Der Wahrheitswert davon ist `False`. Somit kannst Du das direkt in einem `if`-Statement testen.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Könntest du mir bitte diese Zeile schreiben?- Du willst eine *leere* Eingabe als Abbruch haben. Der Rückgabewert ist dann ein leerer String. Der Wahrheitswert davon ist `False`. Somit kannst Du das direkt in einem `if`-Statement testen.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Nö, da wir hier nur Hilfe zur Selbsthilfe geben; speziell bei HausaufgabenDupstre hat geschrieben: Könntest du mir bitte diese Zeile schreiben?
Aber mal als Denkanstoß:
Code: Alles auswählen
In [22]: bool("42")
Out[22]: True
In [23]: bool("")
Out[23]: False
In Pseudo-Code:
Code: Alles auswählen
if Ausdruck:
# springe hier rein, wenn Ausdruck `True` ist
Code: Alles auswählen
In [24]: not True
Out[24]: False
In [25]: not False
Out[25]: True
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Hmm erstmal danke ich dir für deine Hilfe weitergebraucht hat es mich auf jedenfall, denn jetzt konnte ich die Eingabe und die Ausgabe perfektionieren, jedoch fehlt mir immernoch der Mittelteil, undzwar der Teil der sozusagen rausfindet ob nichts eingegeben wurde und nur die <Enter> Taste gedrückt wurde...
So weit bin ich jetzt schon und ich hoffe du kannst mir den entscheidenden Hinweis geben:
So weit bin ich jetzt schon und ich hoffe du kannst mir den entscheidenden Hinweis geben:
Code: Alles auswählen
# Addierer.py
# Dieses Programm addiert Zahlen
a = 0
b = ""
while True:
eingabe = input("Geben Sie eine ganze Zahl ein:")
a = a + int(eingabe)
b = str(b) + eingabe
if :
break
print(a)
Zuletzt geändert von Hyperion am Mittwoch 9. Mai 2012, 17:47, insgesamt 1-mal geändert.
Grund: Code in Python-Code Tags gesetzt.
Grund: Code in Python-Code Tags gesetzt.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Schau Dir doch mein letztes Posting noch einmal an und versuche die einzelnen Schritte und Aspekte in einer Python-Shell nachzuvollziehen! Da ist *alles* dabei, was Du brauchst. Du hast eine *leere* Eingabe (== leerer String) und kannst dessen Wahrheitswert verwenden, um in einen `if`-Zweig zu gelangen. Das `if` hast Du ja sogar schon stehen... fehlt nur noch der passende Ausdruck.
Ach ja: Wie haben hier für Python-Code spezielle Code-Tags: [ code=python ] ... [ /code] oder [ python ] [ /python ] ohne die Leerzeichen.
Ach ja: Wie haben hier für Python-Code spezielle Code-Tags: [ code=python ] ... [ /code] oder [ python ] [ /python ] ohne die Leerzeichen.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Ja das habe ich jetzt. Nur mein einziges Problem ist der Quellcode, denn falls ich nicht eingebe kann er das Nichts nicht in eine int Zahl umwandeln und ich würde gerne wissen wie ich diese Zeile anders schreiben kann...
So sieht mein Quellcode aus:
Und ich rede von dieser Zeile:
So sieht mein Quellcode aus:
Code: Alles auswählen
# Addierer.py
# Dieses Programm addiert Zahlen
a = 0
b = ""
while True:
eingabe = input("Geben Sie eine ganze Zahl ein:")
a = a + int(eingabe)
b = str(b) + eingabe
if not eingabe:
break
Code: Alles auswählen
a = a + int(eingabe)
@Dupstre: Die Anweisungen in dem ``if``-Block werden der Reihe nach ausgeführt.
Was passiert: Es wird eine Zeichenkette vom Benutzer entgegen genommen. Dann wird die in eine Zahl umgewandelt und zu `a` addiert. Dann wird die Zeichenkette zu `b` hinzugefügt. Dann wird geprüft ob die `eingabe` die leere Zeichenkette war und gegebenenfalls die Schleife verlassen.
Was ist daran falsch? Und wie müsste es in Worten passieren, damit bei einer leeren Eingabe nicht versucht wird sie in eine Zahl umzuwandeln? Beschreib das mal. Dann sollte Dir etwas auffallen…
Was passiert: Es wird eine Zeichenkette vom Benutzer entgegen genommen. Dann wird die in eine Zahl umgewandelt und zu `a` addiert. Dann wird die Zeichenkette zu `b` hinzugefügt. Dann wird geprüft ob die `eingabe` die leere Zeichenkette war und gegebenenfalls die Schleife verlassen.
Was ist daran falsch? Und wie müsste es in Worten passieren, damit bei einer leeren Eingabe nicht versucht wird sie in eine Zahl umzuwandeln? Beschreib das mal. Dann sollte Dir etwas auffallen…
Na ich würd mal sagen der Fehler liegt beim ändern in eine Zahl, weil auch nichts eingegeben werden kann und man nichts nicht in eine Zahl umwandeln kann, aber wie bereits oben beschrieben weiß ich nicht wie man das "umgehen" kann.. und das war das was ich wissen wollte und nicht wo mein Fehler ist, denn das weiß ich bereits!
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Du hast BlackJack nicht wirklich verstanden. Denke mal über die *Reihenfolge* nach, in der Du dort verschiedene Dinge tust! Überlege Dir, *wann* Du das Testen auf eine leere Eingabe am besten vornehmen kannst
Denn wenn man die Reihenfolge abändert, dann kommt es zu dem Problem erst gar nicht.
Denn wenn man die Reihenfolge abändert, dann kommt es zu dem Problem erst gar nicht.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Bitte sei mal präziser. Heißt "okay", dass Du das Problem mit der Umwandlung einer leeren Eingabe in einen Integer nun gelöst hast? (Eben durch Umstellung einiger Sachen)?
Und was ist nun Deine aktuelle Frage?
Und was ist nun Deine aktuelle Frage?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Zeig uns doch bitte Deinen Code Ohne Code geht gar nichts, weil wir nicht wissen können, wie Dein bisheriges Grundgerüst aussieht.
Dann schreibst Du uns, was dein Programm ausgibt und was Du gerne haben willst.
Dann schreibst Du uns, was dein Programm ausgibt und was Du gerne haben willst.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Momentaner Code:
Dieser addiert alle eingegebenen Zahl und zeigt das Ergebnis an falls man eine leere Eingabe eingibt.
Das Programm soll aber auch die Summanden anzeigen.
Beispiel:
Eingabe: 2 <Enter> 5 <Enter> 1 <Enter> <Enter>
Ausgabe: 2+5+1=8
Code: Alles auswählen
# Addierer.py
# Dieses Programm addiert Zahlen
momergebnis = 0
eingabe = 0
while True:
momergebnis = momergebnis + int(eingabe)
eingabe = input("Geben Sie eine ganze Zahl ein:")
if not eingabe:
break
print(momergebnis)
Das Programm soll aber auch die Summanden anzeigen.
Beispiel:
Eingabe: 2 <Enter> 5 <Enter> 1 <Enter> <Enter>
Ausgabe: 2+5+1=8
Dann solltest du die eingegebenen Zahlen in einer Liste sammeln. Listen sind ein absoluter Basisdatentyp und ich gehe davon aus, dass du sie kennst.Dupstre hat geschrieben:Dieser addiert alle eingegebenen Zahl und zeigt das Ergebnis an falls man eine leere Eingabe eingibt.
Das Programm soll aber auch die Summanden anzeigen.
Alternativ müsstest du mit Stringverkettung arbeiten, aber das ist nicht so elegant.
Dein Code wäre übrigens leicht umgestellt etwas logischer:
Code: Alles auswählen
momergebnis = 0
while True:
eingabe = input("Geben Sie eine ganze Zahl ein:")
if not eingabe:
break
momergebnis = momergebnis + int(eingabe)
print(momergebnis)
Zuletzt geändert von /me am Donnerstag 10. Mai 2012, 12:20, insgesamt 1-mal geändert.