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.
Dupstre
User
Beiträge: 15
Registriert: Mittwoch 9. Mai 2012, 15:45

Listen darf ich nicht verwenden, weil wir noch nichts über dieses Thema gelernt haben.
Wie würde es denn anders gehen?
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Dupstre hat geschrieben:Listen darf ich nicht verwenden, weil wir noch nichts über dieses Thema gelernt haben.
Wie würde es denn anders gehen?
Wie weit kennt ihr Strings?

Ist dir so etwas vertraut?

Code: Alles auswählen

value = 'Automatik'
result = value[:-5]
print(result)
Dupstre
User
Beiträge: 15
Registriert: Mittwoch 9. Mai 2012, 15:45

Nein. Leider ist mir das nicht bekannt..
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Dupstre hat geschrieben:Nein. Leider ist mir das nicht bekannt..
Das heißt also, dass ihr an Datentypen nur int, float und string kennt und bei string nicht einmal dessen elementare Möglichkeiten.

Ich bin dann raus. Dazu fällt mir spontan nichts ein bzw. nur solche Lösungen die ich widerlich finde.
Dupstre
User
Beiträge: 15
Registriert: Mittwoch 9. Mai 2012, 15:45

Es ist egal obs wiederlich aussieht...
Ich brauche nur eine Lösung..
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Nur eine Lösung, na gut:

Code: Alles auswählen

def blackadder(n=0, s=''):
    inp = raw_input()
    if inp == '':
        return s + '=' + str(n)
    return blackadder(n + int(inp), inp if s=='' else s + '+' + inp)

print blackadder()
Bis auf die Rekursion nutzt diese Lösung nur Dinge, die Dir bekannt sein sollten. Ist aber für Python 2.x ;)
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

jerch hat geschrieben:Nur eine Lösung, na gut
An so etwas hatte ich gedacht, nur ohne Rekursion.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Aber das nutzt ja ``def``, das kann der OP doch nicht nutzen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

@Dupstre: Du hattest doch schon mal die folgende, wenn auch teilweise unschöne Zeile stehen:

Code: Alles auswählen

b = str(b) + eingabe
Wieso ist die bei Deinem letzten Code nicht mehr vorhanden? Im Prinzip ist das ja die Lösung für Dich (Beachte, dass dieses kein "gutes" Python ist. Strings sollte man nicht per "+" zusammenbauen - sag das auch Deinem Lehrer; im Zweifel soll er sich mal hier im Forum melden :mrgreen: ).

Das `str` ist natürlich überflüssig, da `eingabe` bei Dir ja eh ein String ist. Nun musst Du noch die "+" dazwischen bauen... das kann ja nicht so schwer sein.

Das "=" und das Endergebnis baust Du eben nach der Schleife zusammen.

Ich sehe hier zwar eher Python a la problembär, aber wenn es denn nun mal so verlangt wird... auf jeden Fall kann das doch jetzt nicht mehr so schwer sein!?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Hyperion hat geschrieben:Ich sehe hier zwar eher Python a la problembär, aber wenn es denn nun mal so verlangt wird... auf jeden Fall kann das doch jetzt nicht mehr so schwer sein!?
Ich finde auch, er sollte hier eine perfekte Lösung posten. Ist eigentlich eine Steilvorlage für ihn 8)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
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