Einsteiger Fragen

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
Szabi
User
Beiträge: 5
Registriert: Donnerstag 21. Oktober 2021, 09:22
Wohnort: Hildisrieden, Schweiz

Hallo zusammen,
Ich bin in der Python Programmierung und brauche ein bisschen Hilfe. Ich lerne mit "Python 3 Programmieren für Einsteiger" von Michael Bonacina.
Aktuell habe ich einen Beispiel, wo ich immer wieder eine Fehlermeldung erhalte. Ich komme aber nicht mehr weiter, weil jeder Änderung eine neue Fehler auslöst. kann mir bitte jemand helfen?
Programm sieht folgendermassen aus:

Code: Alles auswählen

liste = [12, 18, 3, 6, 0, 46, 234, 23]
wert = eval(input("Welcher Wert soll dividiert werden? "))
for n in liste:
	if n == 0:
	print("Fehler: Zahlen dürfen nicht durch 0 geteilt werden")
	continue
	print (wert/n)
Fehlermeldung dazu:
File "C:\Users\sulak.szabolcs\Documents\Python\kap4\break.py", line 5
print ("Fehler: Zahlen dürfen nicht durch 0 geteilt werden")
^
IndentationError: expected an indented block

Ich habe versucht die Tabs und Leerzeichen nicht zu mischen, trotzdem komme ich nicht zum Ergebnis.

Vielen Dank
Gruss an euch
Sabi
Sirius3
User
Beiträge: 17739
Registriert: Sonntag 21. Oktober 2012, 17:20

Das Buch wurde hier schon öfter mal diskutiert. Jemand, der für verschiedenste Programmiersprachen "Einsteiger"-Bücher schreibt, ist eben kein Experte für eine Programmiersprache.

Einrückungen sind für den Python-Compiler wichtig, um zu erkennen, was zu einem if-Block oder for-Block gehört. Wenn nach einem if kein neuer Block anfängt, dann gibt es eben Fehler.

`eval´ darf man nicht benutzen. Eines der Schwachpunkte des Buches.
`continue` sollte man nicht benutzen, wenn es nicht wirklich gute Gründe dafür gibt.

Code: Alles auswählen

zahlen = [12, 18, 3, 6, 0, 46, 234, 23]
wert = int(input("Welcher Wert soll dividiert werden?"))
for n in zahlen:
    if n == 0:
        print("Fehler: Zahlen dürfen nicht durch 0 geteilt werden")
    else:
        print(wert / n)
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Wenn der Autor hier ernsthaft `eval` verwendet dann solltest du das Buch wegwerfen. Oder besser noch, nicht einfach weg, sondern dem Autor an den Kopf. Mit Schwung. Mit viel Schwung.

eval ist so ein großes Sicherheitsrisiko, dass du das als Anfänger überhaupt nicht abschätzen kannst. So etwas einem Einsteiger vorzusetzen, obwohl es hier mit `int` oder `float` eine viel passendere Alternative gäbe, ist nicht einfach fahrlässig, das ist schon kriminell.

Ergänzung: Man sollte `eval` erst dann einsetzen, wenn man diesen Artikel gelesen und verstanden hat: Eval really is dangerous. Und wenn man das gelesen und verstanden hat, dann will man `eval` gar nicht mehr einsetzen.
Zuletzt geändert von /me am Donnerstag 21. Oktober 2021, 10:51, insgesamt 1-mal geändert.
Szabi
User
Beiträge: 5
Registriert: Donnerstag 21. Oktober 2021, 09:22
Wohnort: Hildisrieden, Schweiz

Vielen Dank für euch.
Wenn das wirklich so ist, wie ihr sagt, dann mache ich mit diesem Buch lieber nicht weiter.
Im Internet finde ich sicher bessere alternativen.
Danke
Benutzeravatar
Dennis89
User
Beiträge: 1153
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

hier ist eine Alternative, sogar eine hoch offizielle:
https://docs.python.org/3/tutorial/

Grüße und viel Erfolg
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Antworten