Objektorient. Programmierung mit Python 3, Lehrbuch, S. 75

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
Benutzeravatar
pixewakb
User
Beiträge: 1411
Registriert: Sonntag 24. April 2011, 19:43

Hat zufällig jemand das Lehrbuch von Michael Weigend (Objektorientierte Programmierung mit Python 3) vorliegen?

Eigentlich finde ich das ganz nett, lese aktuell aus Spaß an der Freud etwas darin herum und mache einige Aufgaben. Irgendwie konnte ich bereits einige Fehler in der - 4. - Auflage finden.

Auf Seite 75 werden mittels input() Zahlen eingelesen, mittels float() wird die Eingabe direkt umgewandelt. Kann dann am Ende einer Berechnung dort eine Ganzzahl (350?) herauskommen oder müsste die Ausgabe nicht 350.0 lauten??? Gab es das mal (Python 3.0) oder hat sich dort der Redakteur schlicht vertan???

Über Stimmen zum Buch würde ich mich übrigens freuen; im Augenblick kenne ich eigentlich nur das...
Benutzeravatar
pixewakb
User
Beiträge: 1411
Registriert: Sonntag 24. April 2011, 19:43

Zur Info die Lösung (ähnlich der Musterlösung auf Seite 76):

Code: Alles auswählen

print("Kostenplan für eine Reise\n-------------------------")

# Eingabe
kostenGesBus = int(input("Kosten für den Reisebus: "))
kostenEinHotel = int(input("Hotelkosten pro Person: "))
kostenGesEvents = int(input("Gesamtkosten für touristische Events: "))
anzahlPersonen = int(input("Anzahl der Teilnehmer: "))

# Verarbeitung

gesamtKosten = kostenGesBus + kostenGesEvents + kostenEinHotel * anzahlPersonen
einKosten = gesamtKosten // anzahlPersonen

# Ausgabe
print("Die Gesamtkosten betragen", gesamtKosten, "EUR.")
print("Die Kosten pro Person sind", einKosten, "EUR.")
Ich habe hier einmal float() nach int() geändert. In meiner eigentlichen Lösung nutze ich float().
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Für diejenigen, die das Buch nicht zur Hand haben, wäre es schön, wenn Du das Beispiel kurz posten könntest...
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Benutzeravatar
pixewakb
User
Beiträge: 1411
Registriert: Sonntag 24. April 2011, 19:43

Letztlich sollen die Fahrtkosten für eine Bustour/Reisegruppe berechnet werden. In der Konsole soll es laut Buch folgende Ausgabe geben:
Kostenplan für eine Reise
-------------------------
Kosten für den Reisebus: 1000
Hotelkosten pro Person: 300
Gesamtkosten für touristische Events: 500
Anzahl der Teilnehmer: 30

Die Gesamtkosten betragen 10500 EUR.
Die Kosten pro Person sind 350 EUR.
Wenn ich mich an die Musterlösung halte:

Code: Alles auswählen

print("Kostenplan für eine Reise\n-------------------------")
kostenGesBus = float(input("Kosten für den Reisebus: "))
kostenEinHotel = float(input("Hotelkosten pro Person: "))
kostenGesEvents = float(input("Gesamtkosten für touristische Events: "))
anzahlPersonen = int(input("Anzahl der Teilnehmer: "))

gesamtKosten = kostenGesBus + kostenGesEvents + kostenEinHotel * anzahlPersonen
einKosten = gesamtKosten / anzahlPersonen

print("\nDie Gesamtkosten betragen", gesamtKosten, "EUR.")
print("Die Kosten pro Person sind", einKosten, "EUR.")
kommt bei mir raus:
Kostenplan für eine Reise
-------------------------
Kosten für den Reisebus: 1000
Hotelkosten pro Person: 300
Gesamtkosten für touristische Events: 500
Anzahl der Teilnehmer: 30
Die Gesamtkosten betragen 10500.0 EUR.
Die Kosten pro Person sind 350.0 EUR.
Mich irritiert "10500 EUR" und "350 EUR" statt "10500.0 EUR" und "350.0 EUR".
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Nun ja, da war er halt a bisl schlampig, der Hr. Weigend... ;-)

Ich hab' noch die Ausgabe zu Python 2.x und bin dort auch auf den einen und anderen Fehler gestoßen. Schade eigentlich...

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Das passiert, wenn man ein schon vorhandenes Buch an eine neue Sprachversion anpasst, noch dazu eine, die nicht abwärtskompatibel ist. Das gleiche Beispiel findet man - natürlich - auch in der Version zu Python 2.5. Dort arbeitet er schlicht mit input(), gibt nur ganzzahlige Werte ein und erhält dann natürlich auch nur int-Werte im Ergebnis. Das könnte man mit Python 3.x auch erzielen, wenn man eval(input()) verwendet und nur ganzzahlige Werte eingibt. Das sollte man sich aber am besten gar nicht erst angewöhnen.

Das Buch von M. Weigend halte ich grundsätzlich für eines der besseren unter den deutschsprachigen Python-Büchern, aber die hier beschriebenen Fehler passieren eben bei Upgrades. In dieser Hinsicht ziemlich heftig ist die aktuelle (4. Auflage) zu Python 3. Die ist voller Fehler, da weiß man gar nicht, wo man anfangen soll.
Antworten