Seite 1 von 1
Zahl in einem kurzen Text finden
Verfasst: Montag 1. Juni 2009, 09:03
von Red Bull
Hallo,
ich bin Neueinsteiger in Python und brauche eure Hilfe

.
Ich schreibe gerade ein Script für Eventscripts. Der Spieler muss einen kurzen Text eingeben. Bestehend aus einem !, einem Wort und einer Zahl. Ungefähr so: !python 234. Das Problem ist, ich weiß nicht welche Zahl (1-16000) eingegeben wird. Deshalb meine Frage, ob man das nicht irgendwie herausfinden kann? 16000x if zu benutzen... Da gibts doch bestimmt was schnelleres. Boardsuche habe ich benutzt, habs auch mit re.findall versucht. Jedoch werde ich daraus nicht schlau. Kann mir jemand einen Lösung für Neueinsteiger geben?
Vielen dank,
Red Bull
Verfasst: Montag 1. Juni 2009, 09:19
von Dill
mit re bist du schon richtig, schau mal hier:
http://www.amk.ca/python/howto/regex/
eine (ganz)zahl findest zb mit diesem ausdruck:
Re: Zahl in einem kurzen Text finden
Verfasst: Montag 1. Juni 2009, 09:36
von numerix
Wenn sicher ist, dass bei der Eingabe ein Leerzeichen gelassen wird, genügt auch das:
Verfasst: Montag 1. Juni 2009, 11:45
von hendrikS
Verfasst: Montag 1. Juni 2009, 12:08
von Red Bull
Danke für eure Antworten. Ja, es ist sicher, dass bei der Eingabe ein Leerzeichen gelassen wird. Ich werde aus euren Beispielen aber net schlau. Wofür steht z.B. das s,n. Könntet ihr eine beschreibung ranhängen für Newbies wie mich? Sry, aber ich verstehe echt nur Bahnhof, wie das funktionieren soll. Mit split splittet man doch irgendwas, oder liege ich da falsch?
Greetz,
Red Bull
Verfasst: Montag 1. Juni 2009, 12:17
von Hyperion
@Red Bull: Du willst dringend das Tutorial durcharbeiten! Außerdem solltest Du Dir angewöhnen, in die Doku zu gucken und Dir Infos zu den gegebenen Funktionen durchzulesen. Dann wüßtest Du, was split macht. Alternativ in iPython:
Code: Alles auswählen
In [2]: help("".split)
Help on built-in function split:
split(...)
S.split([sep [,maxsplit]]) -> list of strings
Return a list of the words in the string S, using sep as the
delimiter string. If maxsplit is given, at most maxsplit
splits are done. If sep is not specified or is None, any
whitespace string is a separator and empty strings are removed
from the result.
Wie Du weiter oben geschrieben hast handelt es sich bei dem zu parsenden Ausdruck um eine menschliche Eingabe - wie ist da sicher gestellt, dass der User sich an die Konvention hält? Ich halte hier die Anwendung eines RegExps sauberer.
Zu guter letzt ist es doch schneller, einfach mal trivial Beispiele in einer Python Shell (wie eben iPython oder auch die Standard-Shell) auszuprobieren, als hier zu fragen, was split() nun genau macht

Verfasst: Montag 1. Juni 2009, 14:41
von hendrikS
Noch kurz zwei Dinge.
s und n sind zwei beliebige Bezeichner, die ich verwende um dann direkt auf die Listenelemente zugreifen zu können und nicht über einen Index wie bei numerix' Beispiel. Könnte auch Adam und Eva sein.
Es muß allerdings sicher sein, daß split hier eine Liste aus exakt zwei Elementen zuückgibt. Sonst handelst Du Dir eine Exception ein.
Na ja. Tutorial ist empfehlenswert. Ist noch kein Meister vom Himmel gefallen.
Verfasst: Montag 1. Juni 2009, 16:08
von str1442
Code: Alles auswählen
In [1]: a = "!python 123"
In [6]: print int("".join(x for x in a if "0" <= x <= "9"))
Du könntest dir noch die Position mithilfe von enumerate() zurückgeben lassen (also einen Tupel aus <index>, <zahlencharacter>) und die Angaben nutzen, um zu überprüfen, ob die Zahlen an der richtigen Stelle eingetippt wurden. Überhaupt solltest du das so direkt nicht benutzen, denn es reiht jede beliebige Zahl im String direkt aneinander.