Einsteigerfrage

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
Nordpol
User
Beiträge: 19
Registriert: Sonntag 19. September 2010, 18:21

Sonntag 26. September 2010, 18:53

Hi,

ich spiel gerade ein bißchen mit Python rum, um die Syntax zu erlernen.
warum wird in folgendem Script die continue-Anweisung immer ausgeführt?

Code: Alles auswählen

#!/usr/bin/python

zahl = 23
fertig = 0

while fertig != 1 and True:

  geraten = raw_input('Geben Sie eine ganze Zahl ein: ')

  if geraten == 'q':
    break

  elif geraten > 100:
    continue

  elif geraten == zahl:
    print 'Gluekwunsch, Sie haben es eraten.'
    print 'aber Sie gewinnen nix ;-)'
    fertig = 1

  elif geraten < zahl:
    print 'Na, ein bisschen hoeher darf die Zahl schon sein...'

  else:
    print 'Neenee... viel zu hoch :-)'

print 'fertig.'

Und noch eine Frage:

Wenn ich merke, dass ich ein komplettes Script in eine Schleife welcher art auch immer setzen möchte, muss ich dann alle Zeile erneut einrücken?

In php z.B. mache ich einfach um den kompletten Teil, der in die Schleife soll, geschweifte Klammern. Geht das in Python nicht?

Grüße und schönen Sonntag, Nordpol
Benutzeravatar
Hyperion
Moderator
Beiträge: 7477
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Sonntag 26. September 2010, 19:02

Nordpol hat geschrieben: warum wird in folgendem Script die continue-Anweisung immer ausgeführt?
Lass Dir mal den Typen von geraten ausgeben!

Code: Alles auswählen

  geraten = raw_input('Geben Sie eine ganze Zahl ein: ')
  print type(geraten)
Nordpol hat geschrieben: Wenn ich merke, dass ich ein komplettes Script in eine Schleife welcher art auch immer setzen möchte, muss ich dann alle Zeile erneut einrücken?
Ja, musst Du! Ein guter Editor / IDE kann das, indem Du alle Zeilen markierst und dann Tab drückst.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Sonntag 26. September 2010, 19:39

Hyperion: *Wie* ein guter Editor das kann, ist doch egal ;)

Bei vim benutze ich z.b. um bis zur Zeile 23 einzurücken und

Code: Alles auswählen

<3↓
die 3 folgenden Zeilen plus die aktuelle Zeile auszurücken.
Benutzeravatar
cofi
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Sonntag 26. September 2010, 20:02

derdon hat geschrieben:und

Code: Alles auswählen

<3↓
die 3 folgenden Zeilen plus die aktuelle Zeile auszurücken.
Du benutzt die Pfeiltasten? Packt ihn!

In Emacs nutze ich das uebrigens auch (allerdings '<3j') :twisted:

@OP: Nein Python benutzt die Einrueckunge statt Klammern, aber selbst in Klammersprachen hat man meist entsprechende Einrueckungen, weil es einfach auffaelliger ist als die Klammern.
Uebrigens gibt es spezielle Python-Tags: [ python ] statt [ code ] nutzen.
Nordpol
User
Beiträge: 19
Registriert: Sonntag 19. September 2010, 18:21

Sonntag 26. September 2010, 20:36

Hi,

@Hyperion: Danke, dass Du mir den Befehl zur Type-Ausgabe gleich mitgeliefert hast. So weit bin ich nämlich noch nicht. Python geht anscheinend sehr viel genauer mit Datentypen um, wie z.b. php oder Perl.

Warum ist denn eigentlich ein beliebiger String immer größer als 100?

@all: Als Editor nehm ich aus Gewohnheit editplus. Und ja, der kann markierte Zeilen per tab einrücken und das Schöne ist, man kann tabs als Whitespaces einfügen.

Grüße, NP
Benutzeravatar
Hyperion
Moderator
Beiträge: 7477
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Sonntag 26. September 2010, 20:56

derdon hat geschrieben:Hyperion: *Wie* ein guter Editor das kann, ist doch egal ;)
Ooops... zu viel Info versucht in einen Satz zu packen :-D
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
BlackJack

Sonntag 26. September 2010, 21:10

@Nordpol: Wenn unterschiedliche Typen nicht "wissen" wie sie verglichen werden können, dann wird auf eine nicht näher bestimmte, aber für einen Programmlauf konsistente Weise aufgrund des Typs bestimmt was grösser/kleiner ist. In diesem Fall sind also alle Zeichenketten grösser als alle ganzen Zahlen.

AFAIK wird in CPython die `id()` des Typs verwendet, was in CPython der Adresse des Typobjekts entspricht. Sind aber beides Implementierungsdetails auf die man sich nicht verlassen sollte.

Ab Python 3.x ist der Vergleich von Unterschiedlichen Typen die nicht wissen wie man sie vergleicht ein Laufzeitfehler.
Benutzeravatar
/me
User
Beiträge: 3262
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Montag 27. September 2010, 07:03

Nordpol hat geschrieben:In php z.B. mache ich einfach um den kompletten Teil, der in die Schleife soll, geschweifte Klammern. Geht das in Python nicht?

Code: Alles auswählen

>>> from __future__ import braces
SyntaxError: not a chance (<pyshell#22>, line 1)
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Montag 27. September 2010, 13:45

Code: Alles auswählen

if a and True:
ist übrigens immer das gleiche wie

Code: Alles auswählen

if a:
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Antworten