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
Zahl in einem kurzen Text finden
mit re bist du schon richtig, schau mal hier:
http://www.amk.ca/python/howto/regex/
eine (ganz)zahl findest zb mit diesem ausdruck:
http://www.amk.ca/python/howto/regex/
eine (ganz)zahl findest zb mit diesem ausdruck:
Code: Alles auswählen
[0-9]+
http://www.kinderpornos.info
Wenn sicher ist, dass bei der Eingabe ein Leerzeichen gelassen wird, genügt auch das:
Code: Alles auswählen
>>> txt = "!python 234"
>>> txt.split()[-1]
'234'
Variante von numerix:
Code: Alles auswählen
s,n="!python 234".split()
print n
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
Greetz,
Red Bull
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
@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:
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
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.
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
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.
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.
Code: Alles auswählen
In [1]: a = "!python 123"
In [6]: print int("".join(x for x in a if "0" <= x <= "9"))