Seite 1 von 1
newbi-Fragen
Verfasst: Dienstag 22. April 2014, 08:05
von bernerdrive
hallo zusammen,
bin gerade am Durchlesen bzw. Durcharbeiten von openbook "Das umfassende Handbuch - Aktuell zu Python 2.5"
Dazu habe ich mir die aktuelle Version(V3.4.0) von Python herunter geladen.
Als erstes sind mit die Klammern bei "print" aufgefallen.
Also die Version 3.4 will zusätzlich Klammern haben.
Nun aber steh ich vor einem weiteren Problem.
Das Beispiel mit der while-Funktion in Kapitel 6
Code: Alles auswählen
secret = 1337
guess = 0
while guess != secret:
guess = input("Raten Sie: ")
else:
print ("Sie haben es geschafft!")
Mit der Version 3.4 wird die "else:" ignoriert und in der Version 2.7, die ich mir nun auch noch installiert habe, funktioniert es.
Das verwirrt mich als Anfänger doch sehr.
in dem vorherige Beispiel funktioniert die "else" noch
Code: Alles auswählen
x=3
if x ==1:
print ("x hat den Wert 1")
elif x==2:
print ("x hat den Wert 2")
else:
print ("x ungleich 1 und ungleich 2")
Kann mir jemand helfen und den Fehler in der Version 3.4. zeigen.
Danke schon mal.
PS. Ich hoffe nicht gleich gesteinigt zu werden.
Re: newbi-Fragen
Verfasst: Dienstag 22. April 2014, 08:10
von Sirius3
@bernerdrive: ist sind nicht nur die Klammern die sich von Python 2 nach 3 geändert haben, sondern einige Funktionen verhalten sich anders oder heißen jetzt anders. Was in Python 3 input ist, ist in Python 2 raw_input. Beides mal bekommst Du einen String zurück, der natürlich nicht gleich einer Zahl ist. Das "input" von Python 2 dagegen solltest Du nicht verwenden, da es die Eingabe interpretiert und deshalb seltsame bis ungewollte Dinge passieren.
Zum Lernen bleibe am besten bei Deinem Python 2.7. Das ist das zur Zeit am meisten benutzte Python mit der größten Auswahl an Bibliotheken. Das städnige hin und her verwirrt Dich als Anfänger im besten Fall nur.
Re: newbi-Fragen
Verfasst: Dienstag 22. April 2014, 09:05
von /me
Sirius3 hat geschrieben:Zum Lernen bleibe am besten bei Deinem Python 2.7. Das ist das zur Zeit am meisten benutzte Python mit der größten Auswahl an Bibliotheken.
Wenn man ein passendes Tutorial für Python 3 hat spricht meiner Meinung nach nichts dagegen, Python 3 zu verwenden. Gerade ein Anfänger wird vermutlich einige Zeit brauchen bis er auf eine der wenigen noch nicht auf Python 3 portierten Bibliotheken stößt und selbst dann stellt sich immer noch die Frage, ob es nicht eine Alternative dazu gibt.
Re: newbi-Fragen
Verfasst: Dienstag 22. April 2014, 09:06
von bernerdrive
@Sirius3:
vielen Dank für deine rasche Antwort.
Dann werde ich mich mal von der Version 3.4 verabschieden und bei 2.7 bleiben.
Das mit "input" ist Bestandteil des Buches: :K
http://openbook.galileocomputing.de/pyt ... 4649a9fbd0
Re: newbi-Fragen
Verfasst: Dienstag 22. April 2014, 09:11
von /me
Das OpenBook hat nicht umsonst einen nicht all zu guten Ruf.
Re: newbi-Fragen
Verfasst: Dienstag 22. April 2014, 09:12
von bernerdrive
@me:
kennst du ein gutes deutschsprachiges Tutorial für Python 3, ähnlich wie das von openbooks?
meine Bestreben die Version 3.4 zu benutzen... ich bin nicht vorbelastet.
Einzig ein bischen asm habe ich vor einiger Zeit probiert.
Re: newbi-Fragen
Verfasst: Dienstag 22. April 2014, 09:19
von BlackJack
@bernerdrive: Das Problem bei `input()` in Python 2.x ist, dass der Benutzer dort Python-Ausdrücke eingeben kann, die dann ausgewertet werden. Das kann letztendlich zu jedem Fehler führen den man so bekommen kann, inklusive `SyntaxError` wenn der Benutzer kein korrektes Python eingibt, und es kann eine Sicherheitslücke sein, weil der Benutzer da nicht nur so harmlose Sachen wie 42 oder 1 + 3 eingeben kann, sondern auch Ausdrücke die dazu führen dass Dateien gelöscht werden, oder ähnliches.
Darum sollte man `input()` vermeiden und lieber `raw_input()` verwenden, was die Eingabe des Benutzers als Zeichenkette liefert, und diese dann explizit in eine Zahl umwandeln. Die möglichen Fehler die dabei passieren können, ist deutlich überschaubarer, hauptsächlich `ValueError` wenn sich die Eingabe nicht in eine Zahl umwandeln lässt, und es wird nicht mehr vom Benutzer eingegebener Code ausgeführt. Für das Beispiel bedeutet das:
Code: Alles auswählen
secret = 1337
guess = 0
while guess != secret:
guess = int(raw_input('Raten Sie: '))
Re: newbi-Fragen
Verfasst: Dienstag 22. April 2014, 09:43
von bernerdrive
also in Python 2.x muss es raw_input
Code: Alles auswählen
secret = 1337
guess = 0
while guess != secret:
guess = int(raw_input('Raten Sie: '))
und in Python 3.x muss es input heißen?
Code: Alles auswählen
secret = 1337
guess = 0
while guess != secret:
guess = input('Raten Sie: ')
Oder gibt es in Python 3.x damit auch Probleme
Re: newbi-Fragen
Verfasst: Dienstag 22. April 2014, 10:01
von BlackJack
@bernerdrive: Ja, denn in Python 3 ist `input()` das was in Python 2 `raw_input()` war. Das liefert also eine Zeichenkette, die niemals gleich irgendeiner Zahl ist. Man muss sie also in eine Zahl umwandeln, wie in Python 2.
Re: newbi-Fragen
Verfasst: Dienstag 22. April 2014, 10:13
von bernerdrive
noch einmal zu mein ursprüglichen Problem zurück:
Python 2.x funktioniert die "else"
Code: Alles auswählen
secret = 1337
guess = 0
while guess != secret:
guess = int(raw_input('Raten Sie: '))
else:
print ("richtig geraten")
Python 3.x funktioniert die "else" nicht
Code: Alles auswählen
secret = 1337
guess = 0
while guess != secret:
guess = input('Raten Sie: ')
else:
print ("richtig geraten")
die Eingabe von 1337 unterbricht nicht die Schleife
habe es gefunden
Code: Alles auswählen
secret = 1337
guess = 0
while guess != secret:
guess = int(input('Raten Sie: '))
else:
print ("richtig geraten")
die Angabe des Dateityps der Variable fehlte
Re: newbi-Fragen
Verfasst: Dienstag 22. April 2014, 10:19
von BlackJack
@bernerdrive: Das hat nichts mit dem ``else`` zu tun, sondern das Du die Zeichenkette die der Benutzer eingibt, nicht in eine Zahl umwandelst. Damit wird der Vergleich niemals wahr und die Schleife niemals abgebrochen.
Code: Alles auswählen
In [1]: 42 == '42'
Out[1]: False
In [2]: 42 == int('42')
Out[2]: True
Re: newbi-Fragen
Verfasst: Dienstag 22. April 2014, 10:43
von bernerdrive
Leider hat "me" in dem Fall doppelt Recht.
Das Buch
http://openbook.galileocomputing.de/pyt ... 2726e071dc ist in dem Fall etwas ungenau.
Kann mir jemand ein anderes "besseres" Tutorial zum Lernen empfehlen?
Gerade als Anfänger saugt man der Art Ungenauigkeiten bzw. Fehler in sich auf....

Re: newbi-Fragen
Verfasst: Dienstag 22. April 2014, 10:59
von Hyperion
bernerdrive hat geschrieben:
Gerade als Anfänger saugt man der Art Ungenauigkeiten bzw. Fehler in sich auf....

Benutze die Suchfunktion! Das Thema haben wir hier gaaaaaaaanz oft
