[Python-de] Probleme mit Lesen

Thilo Ernst Thilo.Ernst at dlr.de
Mon Jun 3 13:55:58 EDT 2002


Sven Ahlheim schrieb:

>  ne nicht so ganz (=
> also erstmal danke (=meine frage ist ja nicht wie ich einen text printen kann, sondern wie ich es hinbekomme diesen text als
> einzelne wörter zu definieren. Das ist eine aufgabe aus einen beispielcode der so lautet Algorithmus LiesWort (w, ende
> (beides outout))Objekte w: Wort            ende: boolscher wert            ch: zeichen Repeat (*uberlies leerzeichen*)
> lies(ch)until ch/=" "w.laenge := w.laenge+1w.text := w.länge+1lies (ch)endende := ch="$" (*textende*)end Lieswort

Ah ja. Du willst also so etwas wie einen einfachen Lexer
(lexikalischen Analysator) unbedingt selbst schreiben.
Tippe ich richtig: Übungsaufgabe oder dergleichen? Na, wie auch immer.

Also, in Python 2.2 würde so etwas sehr schön mit generators gehen,
aber wir wollen es mal so machen, dass es dem obigen (Algol?
Oberon?)-Stil noch ähnelt, auch wenn es dadurch einfach nur komplizierter wird.

Ich habe jetzt  nicht so sehr viel Zeit, aber folgende kurze Tipps & Anmerkungen:

- Wenn Du in Python über einem String itereieren willst, mußt Du nur wissen,
  dass ein String eine Sequenz ist, und schon kannst Du mit 'for' iterieren:
  for char in s: do_something(char)
- Wenn Du meinst, dass Dein Algorithmus unbedingt so etwas wie einen
  Cursor in die zu verarbeitende Zeichenkette braucht, verwalte einen
  Index:
  def lies():
      global i,s
       i=i+1
      return s[i]
- oder ist Dein Problem vielleicht, wie Du Dateien zeichenweise auslesen kannst?
  -> Doku lesen

- HAUPTTIP: Insbesondere falls meine obige Vermutung nicht den Tatsachen entspricht,
   versuche, das ganze Problem etwas abstrakter zu sehen. Mit eingebauten Features
   kommt man sehr oft schneller weiter. Ganz sicher jedenfalls bei solchen
   (pardon) kleinkalibrigen Problemstellungen.  Anders gesagt,
   bist Du *ganz *sicher, dass split() Dir nicht weiterhilft? Du musst die einzelnen
   Wörter ja in der Schleife ja nicht ausdrucken, sondern kannst irgendetwas anderes
   nettes mit ihnen anstellen.

z.B.:

inputstring='das ist das haus vom nikolaus'
alle_worte=inputstring.split()
wortindex=0

def LiesWort():
   global  alle_worte, wortindex
   wortindex=wortindex+1
   return alle_worte[wortindex-1]

Oops, nun wollte ich doch eigentlich keine Lösung servieren...

Viel Spass,

T. Ernst




More information about the Python-de mailing list