Seite 1 von 1

Verständnisfrage

Verfasst: Dienstag 26. Februar 2013, 18:55
von Gary123456
Hallo,

es geht um diesen simplen Code aus meinem magischem dicken fetten Schinken an Buch:

Code: Alles auswählen

geheimnis=4
versuch=0
zaehler=0

while versuch!=geheimnis:
     versuch=int(input("Raten Sie:"))

     if versuch<geheimnis:
         print("Zu klein")
     if versuch>geheimnis:
         print("Zu groß")

zaehler=zaehler+1

print("Super, Sie haben es in",zaehler,"Versuchen geschafft")
Nun, für mich als Übung werde ich den Code erstmal erklären.

Einer Variable geheimnis wird dem Wert 4 zugefügt, den Variablen versuch und zaehler jeweils die Werte 0. Dann kommt eine Schleife, die sich solange wiederholt, wenn versuch ungleich geheimnis ist. Sprich wenn versuch und geheimnis gleicher Werte besitzen, gilt diese Schleife nicht mehr und die Aufgabe wurde erfolgreich gelöst. Mit input erwarte ich eine Eingabe, will sie jedoch zuvor nach int umkonventieren, weil inputs normal Strings aufnehmen. In der Schleife wird abgefragt, ob versuch kleiner ist als geheimnis, wenn ja printe "zu klein". Wenn Versuch größer als geheimnis ist, dann printe "zu groß". Wenn erfolgreich ausgerechnet, dann erweitere zaehler um 1. Und zum Schliss printet er "Super, Sie haben es in",zaehler,"Versuchen geschafft".

Problem bei diesem Code:
Man kann so oft Versuche machen, jedoch steht gibt immer Zaehler den Wert1 aus.

Das ist der offizielle Buchcode. Nun habe ich den Code meines Wissens nach verbessert:

Code: Alles auswählen

geheimnis=4
versuch=0
zaehler=0

while versuch!=geheimnis:
     versuch=int(input("Raten Sie:"))

     if versuch<geheimnis:
         print("Zu klein")
         zaehler=zaehler+1
     if versuch>geheimnis:
         print("Zu groß")
         zaehler=zaehler+1

zaehler=zaehler+1

print("Super, Sie haben es in",zaehler,"Versuchen geschafft")
Frage1: Stimmt mein Code? Ist das ein Fehler im Buch? Wenn ja, wo kann ich es melden? (EDIT: Ist ein Galileo Buch - http://www.galileocomputing.de/katalog/ ... 5-w-81FVS0)

Frage2: Wie kann man das Ende der Schleife festlegen. Ich habe mal in anderer Sprache geproggt, da gab es Befehle wie While ... EndWhile If ... EndIf?

Re: Verständnisfrage

Verfasst: Dienstag 26. Februar 2013, 19:05
von Leonidas
Hallo Gary123456, willkommen im Forum,

Ja, der erste Code ist falsch, weil der Zähler nicht in der Schleife inkrementiert wird. Die Lösung die du hast ist schon okay, könnte man aber besser machen:

Code: Alles auswählen

geheimnis = 4
versuch = 0
zaehler = 0

while versuch!=geheimnis:
    zaehler += 1
    versuch = int(input("Raten Sie:"))

    if versuch < geheimnis:
        print("Zu klein")
    elif versuch > geheimnis:
        print("Zu groß")

print("Super, Sie haben es in", zaehler, "Versuchen geschafft")
So spart man sich das versuch-umheradieren an drei Stellen sondern macht das an genau einer. Und zum terminieren einer Schleife gibt es ``break``.

Re: Verständnisfrage

Verfasst: Dienstag 26. Februar 2013, 19:09
von Gary123456
Jo Danke. Deins klingt auch logisch.
Frage1: Wenn ja, wo kann ich es melden? (dem Hersteller melden)(EDIT: Ist ein Galileo Buch - http://www.galileocomputing.de/katalog/ ... 5-w-81FVS0)

Re: Verständnisfrage

Verfasst: Dienstag 26. Februar 2013, 19:09
von Sirius3
Hallo Gary123456,

in Python entscheidet die Einrückung, welche Befehle zur Schleife/If gehören.
Das sollte auch erklären, warum im oberen Beispiel Zaehler nur einmal erhöht wird.

Re: Verständnisfrage

Verfasst: Dienstag 26. Februar 2013, 19:57
von Gary123456
Noch eins was mich interessieren würde:

Hättet ihr Standarisierte Programmvorschläge, die für Anfänger geeignet sind? Gibt es dazu eventuell auch eine Website?

PS:
Frage1: Wenn ja, wo kann ich es melden? (dem Hersteller melden)(EDIT: Ist ein Galileo Buch - http://www.galileocomputing.de/katalog/ ... 5-w-81FVS0)

Re: Verständnisfrage

Verfasst: Mittwoch 27. Februar 2013, 11:21
von Leonidas
Gary123456 hat geschrieben:Hättet ihr Standarisierte Programmvorschläge, die für Anfänger geeignet sind? Gibt es dazu eventuell auch eine Website?
Ja, im Wiki.
Gary123456 hat geschrieben:Frage1: Wenn ja, wo kann ich es melden? (dem Hersteller melden)(EDIT: Ist ein Galileo Buch - http://www.galileocomputing.de/katalog/ ... 5-w-81FVS0)
Welches von den schlechten Galileo-Büchern denn? Deine URL stimmt nicht, die führt ins Leere.

Re: Verständnisfrage

Verfasst: Mittwoch 27. Februar 2013, 13:53
von Gary123456
hier der Link: http://www.galileocomputing.de/katalog/ ... 5-w-81FVS0

Und wieder ein Fehler im Buch gefunden :/

Re: Verständnisfrage

Verfasst: Mittwoch 27. Februar 2013, 15:36
von webspider
Vielleicht wäre es ja besser für dich vorerst etwas anderes als das Galileo-Buch zu verwenden, wie zum Beispiel das offizielle Python-Tutorial.

Re: Verständnisfrage

Verfasst: Mittwoch 27. Februar 2013, 15:45
von Gary123456
Das war ein Irrtum meinerseits, denn die haben den Code vorerst extra falsch geschrieben und danach erklärt, wie man es korrekt macht. Die erklären sehr gut und mir gefällt es vom Aufbau her sehr gut.

Re: Verständnisfrage

Verfasst: Mittwoch 27. Februar 2013, 15:50
von HarteWare
Gary123456 hat geschrieben: Hättet ihr Standarisierte Programmvorschläge, die für Anfänger geeignet sind? Gibt es dazu eventuell auch eine Website?
Da du das Programm oben doch ganz gut verstanden hast, könntest du versuchen selbst kleine Programme auszudenken. Das hat sicher auch einen ganz guten Lerneffekt. Nach dem Motto: "Learning by doing" :)

Ansonsten, hier gibt es einige Aufgaben, vorallem mathematische, die man versuchen könnte mit einem Programm zu lösen. http://projecteuler.net/problems (Ist aber, vorallem ohne die mathematischen Kenntnisse, nicht unbedingt für totale Anfänger. Zumindest empfinde ich das so!)

mfg