Verständnisfrage

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.
Antworten
Gary123456
User
Beiträge: 318
Registriert: Dienstag 26. Februar 2013, 18:39

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?
Zuletzt geändert von Leonidas am Dienstag 26. Februar 2013, 19:01, insgesamt 1-mal geändert.
Grund: Code in Python-Tags gesetzt
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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``.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Gary123456
User
Beiträge: 318
Registriert: Dienstag 26. Februar 2013, 18:39

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)
Zuletzt geändert von Gary123456 am Dienstag 26. Februar 2013, 19:09, insgesamt 1-mal geändert.
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
Gary123456
User
Beiträge: 318
Registriert: Dienstag 26. Februar 2013, 18:39

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)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Gary123456
User
Beiträge: 318
Registriert: Dienstag 26. Februar 2013, 18:39

hier der Link: http://www.galileocomputing.de/katalog/ ... 5-w-81FVS0

Und wieder ein Fehler im Buch gefunden :/
webspider
User
Beiträge: 485
Registriert: Sonntag 19. Juni 2011, 13:41

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.
Gary123456
User
Beiträge: 318
Registriert: Dienstag 26. Februar 2013, 18:39

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.
Benutzeravatar
HarteWare
User
Beiträge: 69
Registriert: Samstag 23. Februar 2013, 21:16
Wohnort: localhost

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
Antworten