Hilfe beim Quelltext

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Leonidas hat geschrieben:Ich finde auch, er sollte hier eine perfekte Lösung posten. Ist eigentlich eine Steilvorlage für ihn 8)
Die Auflösung der Rekursion mittels einer while True-Schleife sollte da schon für Verzückung sorgen :)
BlackJack

Grrr, die Vorstellung war so gruselig, dass ich das prophylaktisch mal in Python gelöst habe. :-)

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from itertools import imap


def main():
    print 'Ganze Zahlen eingeben.'
    print ' - Eingabetaste nach jeder Zahl.'
    print ' - Leereingabe für Ergebnis.'
    values = map(int, iter(raw_input, ''))
    print ' + '.join(imap(str, values)), '=', sum(values)


if __name__ == '__main__':
    main()
Dupstre
User
Beiträge: 15
Registriert: Mittwoch 9. Mai 2012, 15:45

So. Ich hab die Lösung und das ist sie:

Code: Alles auswählen

# Addierer.py
# Dieses Programm addiert Zahlen

eingabe = input("Geben Sie eine ganze Zahl ein:")
summe = int(eingabe)
while True:
    rechnung = input("Geben Sie eine ganze Zahl ein:")
    if rechnung == "":
        break
    summe = summe + int(rechnung)
    eingabe = eingabe + "+" + rechnung
print(eingabe," = ",summe)

Zwar konntet ihr mir nicht wirklich helfen, aber ich danke euch trozdem für eure Zeit.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Dupstre hat geschrieben:So. Ich hab die Lösung und das ist sie:

Code: Alles auswählen

eingabe = input("Geben Sie eine ganze Zahl ein:")
summe = int(eingabe)
while True:
    ...
Wieso hast Du den Eingabe- und Berechnungscode doppelt, nämlich noch einmal *vor* der Schleife? Das ist ziemlich sinnlos und macht das Programm schwerer wartbar. Entferne das schnell wieder und lasse es doch so, wie Du es schon mal hattest!
Dupstre hat geschrieben: Zwar konntet ihr mir nicht wirklich helfen, aber ich danke euch trozdem für eure Zeit.
Also das empfinde ich ja nun schon fast als Beleidigung. Wie bist Du denn auf die Zeile

Code: Alles auswählen

eingabe = eingabe + "+" + rechnung
gekommen? Imho haben wir da einiges zu geschrieben, was Dich darauf gebracht hat. Vom ganzen Rest mal zu schweigen...
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Dupstre
User
Beiträge: 15
Registriert: Mittwoch 9. Mai 2012, 15:45

Ich werde es so lassen wie es ist, da man sonst nicht wirklich die Zeichenketten verbinden kann so wie man es muss.
Auf die Zeile bin ich nicht durch euch gekommen sondern durch die Musterlösung von meinem Lehrer. ;-)
Und der Rest hat mir auch nicht wirklich geholfen, wiel ich letzten endes nicht auf eine Lösung kam und erst auf die Musterlösung von meinem Lehrer warten musste.
Ihr habt zwar veruscht mir zu helfen, aber ihr habt einfach eine Reihe von "Befehlen" benutzt die ich nunmal nicht kenne und das hat mir nichts gebracht!
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Dupstre hat geschrieben: Auf die Zeile bin ich nicht durch euch gekommen sondern durch die Musterlösung von meinem Lehrer. ;-)
Wenn das die Musterlösung ist... naja... bitte merke Dir dazu, dass da lauter unschöne Sachen drin stehen.
Dupstre hat geschrieben: Ihr habt zwar veruscht mir zu helfen, aber ihr habt einfach eine Reihe von "Befehlen" benutzt die ich nunmal nicht kenne und das hat mir nichts gebracht!
Dann lies Dir mal meine Beiträge durch. Ich sehe da nicht, inwiefern ich da irgend etwas benutzt habe, was Du noch nicht kennst / benutzen darfst. Ich habe Dich versucht zu genau folgender Lösung zu leiten:

Code: Alles auswählen

summe = 0
rechnung = ""

while True:
    eingabe = input("Geben Sie eine Zahl ein:")
    if not eingabe:
        break
    summe += int(eingabe)
    rechnung += eingabe + "+"

print(rechnung[:-1], "=", summe)
Das kannst Du gerne noch einmal nachvollziehen ;-) Du warst da sogar bereits sehr nahe dran!

Einzig das Slicing im `print` mag etwas neues für Dich sein; das muss sein, um das letzte "+" zu eliminieren. Mit ein wenig Aufwand (einer zusätzlichen Variablen, die einen Statusflag a la "erster Durchlauf" enthält) könnte man sogar darauf verzichten und mit den bisher bekannten Sprachkonstrukten auskommen.

Ganz im Ernst: Du hast keinen Plan und hast Dir anscheinend auch keine Mühe gegeben, die Kommentare von uns nachzuvollziehen. Du hast in zig Postings Code gezeigt, der eine sonderbare Entwicklung aufzeigte. Du hast bereits sinnvolle Code-Abschnitte von Posting zu Posting wieder entfernt und entweder ganz weggelassen oder durch neue, schlechte Konstrukte ersetzt. Von einer Baustelle bist Du zur nächsten gesprungen, das bereits umgesetzte hast Du dabei aber stets aus den Augen verloren. So wird das nix mit dem Programmieren lernen ;-) Hast Du überhaupt kleinere Abschnitte in einer Shell nachvollzogen? Ich vermute, dass nein und dass Du stets nur hast Dein Script komplett laufen lassen. Das ist der falsche Weg. Probiere kleinere Sachen stets in einer Shell aus, wenn Du Dir nicht sicher bist, wie etwas funktioniert.

Letztlich ist es mir und uns ziemlich egal, wie Du in der Schule abschneidest. Aber wenn Du Deine Behauptungen tatsächlich ernst meinst, dann solltest Du Dich da noch einmal dran setzen. Denn verstanden hast Du das offensichtlich immer noch nicht...
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten